From: Davidlohr Bueso <dave@stgolabs.net>
To: Daniel Jordan <daniel.m.jordan@oracle.com>
Cc: Christophe Leroy <christophe.leroy@c-s.fr>,
akpm@linux-foundation.org, Alexey Kardashevskiy <aik@ozlabs.ru>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
Paul Mackerras <paulus@samba.org>,
Christoph Lameter <cl@linux.com>,
linuxppc-dev@lists.ozlabs.org, jgg@mellanox.com
Subject: Re: [PATCH 5/6] powerpc/mmu: drop mmap_sem now that locked_vm is atomic
Date: Tue, 23 Apr 2019 19:15:44 -0700 [thread overview]
Message-ID: <20190424021544.ygqa4hvwbyb6nuxp@linux-r8p5> (raw)
In-Reply-To: <20190403164002.hued52o4mga4yprw@ca-dmjordan1.us.oracle.com>
On Wed, 03 Apr 2019, Daniel Jordan wrote:
>On Wed, Apr 03, 2019 at 06:58:45AM +0200, Christophe Leroy wrote:
>> Le 02/04/2019 à 22:41, Daniel Jordan a écrit :
>> > With locked_vm now an atomic, there is no need to take mmap_sem as
>> > writer. Delete and refactor accordingly.
>>
>> Could you please detail the change ?
>
>Ok, I'll be more specific in the next version, using some of your language in
>fact. :)
>
>> It looks like this is not the only
>> change. I'm wondering what the consequences are.
>>
>> Before we did:
>> - lock
>> - calculate future value
>> - check the future value is acceptable
>> - update value if future value acceptable
>> - return error if future value non acceptable
>> - unlock
>>
>> Now we do:
>> - atomic update with future (possibly too high) value
>> - check the new value is acceptable
>> - atomic update back with older value if new value not acceptable and return
>> error
>>
>> So if a concurrent action wants to increase locked_vm with an acceptable
>> step while another one has temporarily set it too high, it will now fail.
>>
>> I think we should keep the previous approach and do a cmpxchg after
>> validating the new value.
Wouldn't the cmpxchg alternative also be exposed the locked_vm changing between
validating the new value and the cmpxchg() and we'd bogusly fail even when there
is still just because the value changed (I'm assuming we don't hold any locks,
otherwise all this is pointless).
current_locked = atomic_read(&mm->locked_vm);
new_locked = current_locked + npages;
if (new_locked < lock_limit)
if (cmpxchg(&mm->locked_vm, current_locked, new_locked) == current_locked)
/* ENOMEM */
>
>That's a good idea, and especially worth doing considering that an arbitrary
>number of threads that charge a low amount of locked_vm can fail just because
>one thread charges lots of it.
Yeah but the window for this is quite small, I doubt it would be a real issue.
What if before doing the atomic_add_return(), we first did the racy new_locked
check for ENOMEM, then do the speculative add and cleanup, if necessary. This
would further reduce the scope of the window where false ENOMEM can occur.
>pinned_vm appears to be broken the same way, so I can fix it too unless someone
>beats me to it.
This should not be a surprise for the rdma folks. Cc'ing Jason nonetheless.
Thanks,
Davidlohr
next prev parent reply other threads:[~2019-04-24 2:15 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-02 20:41 [PATCH 0/6] convert locked_vm from unsigned long to atomic64_t Daniel Jordan
2019-04-02 20:41 ` [PATCH 1/6] mm: change locked_vm's type " Daniel Jordan
2019-04-02 22:04 ` Andrew Morton
2019-04-02 23:43 ` Davidlohr Bueso
2019-04-03 16:07 ` Daniel Jordan
2019-04-03 15:58 ` Daniel Jordan
2019-04-03 4:46 ` Christophe Leroy
2019-04-03 16:09 ` Daniel Jordan
2019-04-11 4:22 ` Alexey Kardashevskiy
2019-04-11 9:55 ` Mark Rutland
2019-04-11 20:28 ` Daniel Jordan
2019-04-16 23:33 ` Andrew Morton
2019-04-22 15:54 ` Daniel Jordan
2019-04-02 20:41 ` [PATCH 2/6] vfio/type1: drop mmap_sem now that locked_vm is atomic Daniel Jordan
2019-04-02 20:41 ` [PATCH 3/6] vfio/spapr_tce: " Daniel Jordan
2019-04-02 20:41 ` [PATCH 4/6] fpga/dlf/afu: " Daniel Jordan
2019-04-02 20:41 ` [PATCH 5/6] powerpc/mmu: " Daniel Jordan
2019-04-03 4:58 ` Christophe Leroy
2019-04-03 16:40 ` Daniel Jordan
2019-04-24 2:15 ` Davidlohr Bueso [this message]
2019-04-24 2:31 ` Davidlohr Bueso
2019-04-24 11:10 ` Jason Gunthorpe
2019-04-25 1:47 ` Daniel Jordan
2019-04-02 20:41 ` [PATCH 6/6] kvm/book3s: " Daniel Jordan
2019-04-03 12:51 ` [PATCH 0/6] convert locked_vm from unsigned long to atomic64_t Steven Sistare
2019-04-03 16:52 ` Daniel Jordan
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=20190424021544.ygqa4hvwbyb6nuxp@linux-r8p5 \
--to=dave@stgolabs.net \
--cc=aik@ozlabs.ru \
--cc=akpm@linux-foundation.org \
--cc=christophe.leroy@c-s.fr \
--cc=cl@linux.com \
--cc=daniel.m.jordan@oracle.com \
--cc=jgg@mellanox.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=paulus@samba.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox