[lkml]   [2010]   [May]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRe: [PATCH 4/5] always lock the root (oldest) anon_vma
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

 \ /
  Last update: 2010-05-13 00:21    [W:0.042 / U:17.804 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site