All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vladimir Davydov <vdavydov@parallels.com>
To: Johannes Weiner <hannes@cmpxchg.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Michal Hocko <mhocko@suse.cz>,
	linux-mm@kvack.org, cgroups@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [patch 1/4] mm: memcontrol: inline memcg->move_lock locking
Date: Wed, 22 Oct 2014 10:48:54 +0400	[thread overview]
Message-ID: <20141022064854.GR16496@esperanza> (raw)
In-Reply-To: <1413922896-29042-1-git-send-email-hannes@cmpxchg.org>

On Tue, Oct 21, 2014 at 04:21:33PM -0400, Johannes Weiner wrote:
> The wrappers around taking and dropping the memcg->move_lock spinlock
> add nothing of value.  Inline the spinlock calls into the callsites.
> 
> Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>

Acked-by: Vladimir Davydov <vdavydov@parallels.com>

> ---
>  mm/memcontrol.c | 34 +++++++++-------------------------
>  1 file changed, 9 insertions(+), 25 deletions(-)
> 
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 293db8234179..1ff125d2a427 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -1507,23 +1507,6 @@ static bool mem_cgroup_wait_acct_move(struct mem_cgroup *memcg)
>  	return false;
>  }
>  
> -/*
> - * Take this lock when
> - * - a code tries to modify page's memcg while it's USED.
> - * - a code tries to modify page state accounting in a memcg.
> - */
> -static void move_lock_mem_cgroup(struct mem_cgroup *memcg,
> -				  unsigned long *flags)
> -{
> -	spin_lock_irqsave(&memcg->move_lock, *flags);
> -}
> -
> -static void move_unlock_mem_cgroup(struct mem_cgroup *memcg,
> -				unsigned long *flags)
> -{
> -	spin_unlock_irqrestore(&memcg->move_lock, *flags);
> -}
> -
>  #define K(x) ((x) << (PAGE_SHIFT-10))
>  /**
>   * mem_cgroup_print_oom_info: Print OOM information relevant to memory controller.
> @@ -2013,7 +1996,7 @@ again:
>  		return;
>  	/*
>  	 * If this memory cgroup is not under account moving, we don't
> -	 * need to take move_lock_mem_cgroup(). Because we already hold
> +	 * need to take &memcg->move_lock. Because we already hold
>  	 * rcu_read_lock(), any calls to move_account will be delayed until
>  	 * rcu_read_unlock().
>  	 */
> @@ -2021,9 +2004,9 @@ again:
>  	if (atomic_read(&memcg->moving_account) <= 0)
>  		return;
>  
> -	move_lock_mem_cgroup(memcg, flags);
> +	spin_lock_irqsave(&memcg->move_lock, *flags);
>  	if (memcg != pc->mem_cgroup) {
> -		move_unlock_mem_cgroup(memcg, flags);
> +		spin_unlock_irqrestore(&memcg->move_lock, *flags);
>  		goto again;
>  	}
>  	*locked = true;
> @@ -2038,7 +2021,7 @@ void __mem_cgroup_end_update_page_stat(struct page *page, unsigned long *flags)
>  	 * lock is held because a routine modifies pc->mem_cgroup
>  	 * should take move_lock_mem_cgroup().
>  	 */
> -	move_unlock_mem_cgroup(pc->mem_cgroup, flags);
> +	spin_unlock_irqrestore(&pc->mem_cgroup->move_lock, *flags);
>  }
>  
>  void mem_cgroup_update_page_stat(struct page *page,
> @@ -3083,7 +3066,7 @@ static int mem_cgroup_move_account(struct page *page,
>  	if (pc->mem_cgroup != from)
>  		goto out_unlock;
>  
> -	move_lock_mem_cgroup(from, &flags);
> +	spin_lock_irqsave(&from->move_lock, flags);
>  
>  	if (!PageAnon(page) && page_mapped(page)) {
>  		__this_cpu_sub(from->stat->count[MEM_CGROUP_STAT_FILE_MAPPED],
> @@ -3107,7 +3090,8 @@ static int mem_cgroup_move_account(struct page *page,
>  
>  	/* caller should have done css_get */
>  	pc->mem_cgroup = to;
> -	move_unlock_mem_cgroup(from, &flags);
> +	spin_unlock_irqrestore(&from->move_lock, flags);
> +
>  	ret = 0;
>  
>  	local_irq_disable();
> @@ -6033,9 +6017,9 @@ void mem_cgroup_migrate(struct page *oldpage, struct page *newpage,
>  	 * but there might still be references, e.g. from finishing
>  	 * writeback.  Follow the charge moving protocol here.
>  	 */
> -	move_lock_mem_cgroup(memcg, &flags);
> +	spin_lock_irqsave(&memcg->move_lock, flags);
>  	pc->mem_cgroup = NULL;
> -	move_unlock_mem_cgroup(memcg, &flags);
> +	spin_unlock_irqrestore(&memcg->move_lock, flags);
>  
>  	if (lrucare)
>  		unlock_page_lru(oldpage, isolated);
> -- 
> 2.1.2
> 

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Vladimir Davydov <vdavydov@parallels.com>
To: Johannes Weiner <hannes@cmpxchg.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Michal Hocko <mhocko@suse.cz>, <linux-mm@kvack.org>,
	<cgroups@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [patch 1/4] mm: memcontrol: inline memcg->move_lock locking
Date: Wed, 22 Oct 2014 10:48:54 +0400	[thread overview]
Message-ID: <20141022064854.GR16496@esperanza> (raw)
In-Reply-To: <1413922896-29042-1-git-send-email-hannes@cmpxchg.org>

On Tue, Oct 21, 2014 at 04:21:33PM -0400, Johannes Weiner wrote:
> The wrappers around taking and dropping the memcg->move_lock spinlock
> add nothing of value.  Inline the spinlock calls into the callsites.
> 
> Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>

Acked-by: Vladimir Davydov <vdavydov@parallels.com>

> ---
>  mm/memcontrol.c | 34 +++++++++-------------------------
>  1 file changed, 9 insertions(+), 25 deletions(-)
> 
> diff --git a/mm/memcontrol.c b/mm/memcontrol.c
> index 293db8234179..1ff125d2a427 100644
> --- a/mm/memcontrol.c
> +++ b/mm/memcontrol.c
> @@ -1507,23 +1507,6 @@ static bool mem_cgroup_wait_acct_move(struct mem_cgroup *memcg)
>  	return false;
>  }
>  
> -/*
> - * Take this lock when
> - * - a code tries to modify page's memcg while it's USED.
> - * - a code tries to modify page state accounting in a memcg.
> - */
> -static void move_lock_mem_cgroup(struct mem_cgroup *memcg,
> -				  unsigned long *flags)
> -{
> -	spin_lock_irqsave(&memcg->move_lock, *flags);
> -}
> -
> -static void move_unlock_mem_cgroup(struct mem_cgroup *memcg,
> -				unsigned long *flags)
> -{
> -	spin_unlock_irqrestore(&memcg->move_lock, *flags);
> -}
> -
>  #define K(x) ((x) << (PAGE_SHIFT-10))
>  /**
>   * mem_cgroup_print_oom_info: Print OOM information relevant to memory controller.
> @@ -2013,7 +1996,7 @@ again:
>  		return;
>  	/*
>  	 * If this memory cgroup is not under account moving, we don't
> -	 * need to take move_lock_mem_cgroup(). Because we already hold
> +	 * need to take &memcg->move_lock. Because we already hold
>  	 * rcu_read_lock(), any calls to move_account will be delayed until
>  	 * rcu_read_unlock().
>  	 */
> @@ -2021,9 +2004,9 @@ again:
>  	if (atomic_read(&memcg->moving_account) <= 0)
>  		return;
>  
> -	move_lock_mem_cgroup(memcg, flags);
> +	spin_lock_irqsave(&memcg->move_lock, *flags);
>  	if (memcg != pc->mem_cgroup) {
> -		move_unlock_mem_cgroup(memcg, flags);
> +		spin_unlock_irqrestore(&memcg->move_lock, *flags);
>  		goto again;
>  	}
>  	*locked = true;
> @@ -2038,7 +2021,7 @@ void __mem_cgroup_end_update_page_stat(struct page *page, unsigned long *flags)
>  	 * lock is held because a routine modifies pc->mem_cgroup
>  	 * should take move_lock_mem_cgroup().
>  	 */
> -	move_unlock_mem_cgroup(pc->mem_cgroup, flags);
> +	spin_unlock_irqrestore(&pc->mem_cgroup->move_lock, *flags);
>  }
>  
>  void mem_cgroup_update_page_stat(struct page *page,
> @@ -3083,7 +3066,7 @@ static int mem_cgroup_move_account(struct page *page,
>  	if (pc->mem_cgroup != from)
>  		goto out_unlock;
>  
> -	move_lock_mem_cgroup(from, &flags);
> +	spin_lock_irqsave(&from->move_lock, flags);
>  
>  	if (!PageAnon(page) && page_mapped(page)) {
>  		__this_cpu_sub(from->stat->count[MEM_CGROUP_STAT_FILE_MAPPED],
> @@ -3107,7 +3090,8 @@ static int mem_cgroup_move_account(struct page *page,
>  
>  	/* caller should have done css_get */
>  	pc->mem_cgroup = to;
> -	move_unlock_mem_cgroup(from, &flags);
> +	spin_unlock_irqrestore(&from->move_lock, flags);
> +
>  	ret = 0;
>  
>  	local_irq_disable();
> @@ -6033,9 +6017,9 @@ void mem_cgroup_migrate(struct page *oldpage, struct page *newpage,
>  	 * but there might still be references, e.g. from finishing
>  	 * writeback.  Follow the charge moving protocol here.
>  	 */
> -	move_lock_mem_cgroup(memcg, &flags);
> +	spin_lock_irqsave(&memcg->move_lock, flags);
>  	pc->mem_cgroup = NULL;
> -	move_unlock_mem_cgroup(memcg, &flags);
> +	spin_unlock_irqrestore(&memcg->move_lock, flags);
>  
>  	if (lrucare)
>  		unlock_page_lru(oldpage, isolated);
> -- 
> 2.1.2
> 

  parent reply	other threads:[~2014-10-22  6:48 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-21 20:21 [patch 1/4] mm: memcontrol: inline memcg->move_lock locking Johannes Weiner
2014-10-21 20:21 ` Johannes Weiner
2014-10-21 20:21 ` [patch 2/4] mm: memcontrol: don't pass a NULL memcg to mem_cgroup_end_move() Johannes Weiner
2014-10-21 20:21   ` Johannes Weiner
     [not found]   ` <1413922896-29042-2-git-send-email-hannes-druUgvl0LCNAfugRpC6u6w@public.gmane.org>
2014-10-22  6:52     ` Vladimir Davydov
2014-10-22  6:52       ` Vladimir Davydov
2014-10-22  6:52       ` Vladimir Davydov
2014-10-21 20:21 ` [patch 3/4] mm: page-writeback: inline account_page_dirtied() into single caller Johannes Weiner
2014-10-21 20:21   ` Johannes Weiner
2014-10-21 20:21 ` [patch 4/4] mm: memcontrol: simplify per-memcg page statistics accounting Johannes Weiner
2014-10-21 20:21   ` Johannes Weiner
2014-10-21 21:05   ` Johannes Weiner
2014-10-21 21:05     ` Johannes Weiner
2014-10-22  6:48 ` Vladimir Davydov [this message]
2014-10-22  6:48   ` [patch 1/4] mm: memcontrol: inline memcg->move_lock locking Vladimir Davydov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20141022064854.GR16496@esperanza \
    --to=vdavydov@parallels.com \
    --cc=akpm@linux-foundation.org \
    --cc=cgroups@vger.kernel.org \
    --cc=hannes@cmpxchg.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@suse.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.