All of lore.kernel.org
 help / color / mirror / Atom feed
From: Rik van Riel <riel@redhat.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Mel Gorman <mel@csn.ul.ie>,
	Andrea Arcangeli <aarcange@redhat.com>,
	Minchan Kim <minchan.kim@gmail.com>,
	Linux-MM <linux-mm@kvack.org>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 4/5] always lock the root (oldest) anon_vma
Date: Wed, 12 May 2010 18:18:11 -0400	[thread overview]
Message-ID: <4BEB2923.8030200@redhat.com> (raw)
In-Reply-To: <alpine.LFD.2.00.1005121441350.3711@i5.linux-foundation.org>

On 05/12/2010 05:55 PM, Linus Torvalds wrote:

> Wouldn't it be sufficient to do
>
> 	if (atomic_dec_and_test(&anon_vma->ksm_refcount)) {
> 		anon_vma_lock(anon_vma);
>
> instead? The "atomic_dec_and_lock()" semantics are _much_ stricter than a
> regular "decrement and test and then lock", and that strictness means that
> it's way more complicated and expensive. So if you don't need the
> semantics, you shouldn't use them.

I suspect the atomic_dec_and_lock in the KVM code is being used
to prevent the following race:

1) KSM code reduces the refcount to 0

2)                               munmap on other CPU frees the anon_vma

3) KSM code takes the anon_vma lock,
    which now lives in freed memory

Am I totally confused by this and can we use a nicer approach?

-- 
All rights reversed

WARNING: multiple messages have this Message-ID (diff)
From: Rik van Riel <riel@redhat.com>
To: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Mel Gorman <mel@csn.ul.ie>,
	Andrea Arcangeli <aarcange@redhat.com>,
	Minchan Kim <minchan.kim@gmail.com>,
	Linux-MM <linux-mm@kvack.org>,
	KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
	LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 4/5] always lock the root (oldest) anon_vma
Date: Wed, 12 May 2010 18:18:11 -0400	[thread overview]
Message-ID: <4BEB2923.8030200@redhat.com> (raw)
In-Reply-To: <alpine.LFD.2.00.1005121441350.3711@i5.linux-foundation.org>

On 05/12/2010 05:55 PM, Linus Torvalds wrote:

> Wouldn't it be sufficient to do
>
> 	if (atomic_dec_and_test(&anon_vma->ksm_refcount)) {
> 		anon_vma_lock(anon_vma);
>
> instead? The "atomic_dec_and_lock()" semantics are _much_ stricter than a
> regular "decrement and test and then lock", and that strictness means that
> it's way more complicated and expensive. So if you don't need the
> semantics, you shouldn't use them.

I suspect the atomic_dec_and_lock in the KVM code is being used
to prevent the following race:

1) KSM code reduces the refcount to 0

2)                               munmap on other CPU frees the anon_vma

3) KSM code takes the anon_vma lock,
    which now lives in freed memory

Am I totally confused by this and can we use a nicer approach?

-- 
All rights reversed

--
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>

  reply	other threads:[~2010-05-12 22:18 UTC|newest]

Thread overview: 106+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-12 17:38 [PATCH 0/5] always lock the root anon_vma Rik van Riel
2010-05-12 17:38 ` Rik van Riel
2010-05-12 17:39 ` [PATCH 1/5] rename anon_vma_lock to vma_lock_anon_vma Rik van Riel
2010-05-12 17:39   ` Rik van Riel
2010-05-12 20:57   ` Mel Gorman
2010-05-12 20:57     ` Mel Gorman
2010-05-13  0:30   ` KAMEZAWA Hiroyuki
2010-05-13  0:30     ` KAMEZAWA Hiroyuki
2010-05-12 17:39 ` [PATCH 3/5] track the root (oldest) anon_vma Rik van Riel
2010-05-12 17:39   ` Rik van Riel
2010-05-12 20:59   ` Mel Gorman
2010-05-12 20:59     ` Mel Gorman
2010-05-12 21:01     ` Rik van Riel
2010-05-12 21:01       ` Rik van Riel
2010-05-13  0:38   ` KAMEZAWA Hiroyuki
2010-05-13  0:38     ` KAMEZAWA Hiroyuki
2010-05-13  2:25     ` Rik van Riel
2010-05-13  2:25       ` Rik van Riel
2010-05-14  0:04       ` KAMEZAWA Hiroyuki
2010-05-14  0:04         ` KAMEZAWA Hiroyuki
2010-05-12 17:40 ` [PATCH 4/5] always lock " Rik van Riel
2010-05-12 17:40   ` Rik van Riel
2010-05-12 21:02   ` Mel Gorman
2010-05-12 21:02     ` Mel Gorman
2010-05-12 21:08     ` Rik van Riel
2010-05-12 21:08       ` Rik van Riel
2010-05-13  9:54       ` Mel Gorman
2010-05-13  9:54         ` Mel Gorman
2010-05-13 14:33         ` [PATCH -v2 " Rik van Riel
2010-05-13 14:33           ` Rik van Riel
2010-05-13 21:09           ` Andrew Morton
2010-05-13 21:09             ` Andrew Morton
2010-05-13 22:50             ` Rik van Riel
2010-05-13 22:50               ` Rik van Riel
2010-05-14  9:33               ` Mel Gorman
2010-05-14  9:33                 ` Mel Gorman
2010-05-26  4:00             ` Rik van Riel
2010-05-26  4:00               ` Rik van Riel
2010-05-26  4:15               ` Andrew Morton
2010-05-26  4:15                 ` Andrew Morton
2010-05-26  5:46                 ` james toy
2010-05-26  5:46                   ` james toy
2010-06-01  0:57                   ` james toy
2010-06-01  0:57                     ` james toy
2010-05-26 15:24               ` [PATCH -v2 0/5] always lock the root anon_vma Rik van Riel
2010-05-26 15:24                 ` Rik van Riel
2010-05-26 15:25                 ` [PATCH 1/5] rename anon_vma_lock to vma_lock_anon_vma Rik van Riel
2010-05-26 15:25                   ` Rik van Riel
2010-05-26 17:25                   ` Linus Torvalds
2010-05-26 17:25                     ` Linus Torvalds
2010-05-26 19:01                     ` Rik van Riel
2010-05-26 19:01                       ` Rik van Riel
2010-05-26 19:25                       ` Linus Torvalds
2010-05-26 19:25                         ` Linus Torvalds
2010-05-26 19:35                         ` Rik van Riel
2010-05-26 19:35                           ` Rik van Riel
2010-05-26 15:25                 ` [PATCH 2/5] change direct call of spin_lock(anon_vma->lock) to inline function Rik van Riel
2010-05-26 15:25                   ` Rik van Riel
2010-05-26 15:26                 ` [PATCH 3/5] track the root (oldest) anon_vma Rik van Riel
2010-05-26 15:26                   ` Rik van Riel
2010-05-26 15:27                 ` [PATCH 4/5] always lock " Rik van Riel
2010-05-26 15:27                   ` Rik van Riel
2010-05-26 15:27                 ` [PATCH 5/5] extend KSM refcounts to the anon_vma root Rik van Riel
2010-05-26 15:27                   ` Rik van Riel
2010-05-12 21:55   ` [PATCH 4/5] always lock the root (oldest) anon_vma Linus Torvalds
2010-05-12 21:55     ` Linus Torvalds
2010-05-12 22:18     ` Rik van Riel [this message]
2010-05-12 22:18       ` Rik van Riel
2010-05-12 22:26       ` Linus Torvalds
2010-05-12 22:26         ` Linus Torvalds
2010-05-12 17:41 ` [PATCH 5/5] extend KSM refcounts to the anon_vma root Rik van Riel
2010-05-12 17:41   ` Rik van Riel
2010-05-12 21:07   ` Mel Gorman
2010-05-12 21:07     ` Mel Gorman
2010-05-12 21:09     ` Rik van Riel
2010-05-12 21:09       ` Rik van Riel
2010-05-13 11:26       ` Mel Gorman
2010-05-13 11:26         ` Mel Gorman
2010-05-13 13:11         ` Rik van Riel
2010-05-13 13:11           ` Rik van Riel
2010-05-13 13:24           ` Mel Gorman
2010-05-13 13:24             ` Mel Gorman
2010-05-13 14:34             ` [PATCH -v2 " Rik van Riel
2010-05-13 14:34               ` Rik van Riel
2010-05-19  1:05               ` Andrea Arcangeli
2010-05-19  1:05                 ` Andrea Arcangeli
2010-05-12 17:41 ` [PATCH 2/5] change direct call of spin_lock(anon_vma->lock) to inline function Rik van Riel
2010-05-12 17:41   ` Rik van Riel
2010-05-12 20:58   ` Mel Gorman
2010-05-12 20:58     ` Mel Gorman
2010-05-13  0:32   ` KAMEZAWA Hiroyuki
2010-05-13  0:32     ` KAMEZAWA Hiroyuki
2010-05-20 22:42 ` [PATCH 6/5] adjust mm_take_all_locks to anon-vma-root locking Andrea Arcangeli
2010-05-20 22:42   ` Andrea Arcangeli
2010-05-20 23:07   ` Rik van Riel
2010-05-20 23:07     ` Rik van Riel
  -- strict thread matches above, loose matches on Subject: below --
2010-05-26 19:38 [PATCH -v3 0/5] always lock the root anon_vma Rik van Riel
2010-05-26 19:40 ` [PATCH 4/5] always lock the root (oldest) anon_vma Rik van Riel
2010-05-26 19:40   ` Rik van Riel
2010-05-26 20:36   ` Larry Woodman
2010-05-26 20:36     ` Larry Woodman
2010-05-27  0:57   ` KAMEZAWA Hiroyuki
2010-05-27  0:57     ` KAMEZAWA Hiroyuki
2010-05-27 13:55   ` Minchan Kim
2010-05-27 13:55     ` Minchan Kim
2010-05-27 17:48   ` Mel Gorman
2010-05-27 17:48     ` Mel Gorman

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=4BEB2923.8030200@redhat.com \
    --to=riel@redhat.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=kamezawa.hiroyu@jp.fujitsu.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mel@csn.ul.ie \
    --cc=minchan.kim@gmail.com \
    --cc=torvalds@linux-foundation.org \
    /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.