From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Will Deacon <will@kernel.org>,
Michael Kerrisk <mtk.manpages@gmail.com>,
Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>,
paulmck <paulmck@linux.ibm.com>, Ingo Molnar <mingo@kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
Oleg Nesterov <oleg@redhat.com>,
"Eric W. Biederman" <ebiederm@xmission.com>,
"Russell King, ARM Linux" <linux@armlinux.org.uk>,
Chris Metcalf <cmetcalf@ezchip.com>, Chris Lameter <cl@linux.com>,
Kirill Tkhai <tkhai@yandex.ru>, Mike Galbraith <efault@gmx.de>,
Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [RFC PATCH 4/4] Fix: sched/membarrier: p->mm->membarrier_state racy load (v2)
Date: Fri, 13 Sep 2019 10:22:28 -0400 (EDT) [thread overview]
Message-ID: <1283729551.2396.1568384548023.JavaMail.zimbra@efficios.com> (raw)
In-Reply-To: <20190912154734.j3mmjmqf2iltbenm@willie-the-truck>
----- On Sep 12, 2019, at 11:47 AM, Will Deacon will@kernel.org wrote:
> On Thu, Sep 12, 2019 at 03:24:35PM +0100, Linus Torvalds wrote:
>> On Thu, Sep 12, 2019 at 2:48 PM Will Deacon <will@kernel.org> wrote:
>> >
>> > So the man page for sys_membarrier states that the expedited variants "never
>> > block", which feels pretty strong. Do any other system calls claim to
>> > provide this guarantee without a failure path if blocking is necessary?
>>
>> The traditional semantics for "we don't block" is that "we block on
>> memory allocations and locking and user accesses etc, but we don't
>> wait for our own IO".
>>
>> So there may be new IO started (and waited on) as part of allocating
>> new memory etc, or in just paging in user memory, but the IO that the
>> operation _itself_ explicitly starts is not waited on.
>
> Thanks, that makes sense, and I'd be inclined to suggest an update to the
> sys_membarrier manpage to make this more clear since the "never blocks"
> phrasing doesn't seem to be used like this for other system calls.
The current wording from membarrier(2) is:
The "expedited" commands complete faster than the non-expedited
ones; they never block, but have the downside of causing extra
overhead.
We could simply remove the "; they never block" part then ?
>
>> No system call should ever be considered "atomic" in any sense. If
>> you're doing RT, you should maybe expect "getpid()" to not ever block,
>> but that's just about the exclusive list of truly nonblocking system
>> calls, and even that can be preempted.
>
> In which case, why can't we just use GFP_KERNEL for the cpumask allocation
> instead of GFP_NOWAIT and then remove the failure path altogether? Mathieu?
Looking at:
#define GFP_KERNEL (__GFP_RECLAIM | __GFP_IO | __GFP_FS)
I notice that it does not include __GFP_NOFAIL. What prevents GFP_KERNEL from
failing, and where is this guarantee documented ?
Regarding __GFP_NOFAIL, its use seems to be discouraged in linux/gfp.h:
* %__GFP_NOFAIL: The VM implementation _must_ retry infinitely: the caller
* cannot handle allocation failures. The allocation could block
* indefinitely but will never return with failure. Testing for
* failure is pointless.
* New users should be evaluated carefully (and the flag should be
* used only when there is no reasonable failure policy) but it is
* definitely preferable to use the flag rather than opencode endless
* loop around allocator.
* Using this flag for costly allocations is _highly_ discouraged.
So I am reluctant to use it.
But if we can agree on the right combination of flags that guarantees there
is no failure, I would be perfectly fine with using them to remove the fallback
code.
Thanks,
Mathieu
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
next prev parent reply other threads:[~2019-09-13 14:22 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-06 3:12 [RFC PATCH 0/4] Membarrier fixes/cleanups Mathieu Desnoyers
2019-09-06 3:12 ` [RFC PATCH 1/4] Fix: sched/membarrier: private expedited registration check Mathieu Desnoyers
2019-09-06 3:12 ` [RFC PATCH 2/4] Cleanup: sched/membarrier: remove redundant check Mathieu Desnoyers
2019-09-06 3:12 ` [RFC PATCH 3/4] Cleanup: sched/membarrier: only sync_core before usermode for same mm Mathieu Desnoyers
2019-09-06 7:41 ` Peter Zijlstra
2019-09-06 13:40 ` Mathieu Desnoyers
2019-09-06 3:13 ` [RFC PATCH 4/4] Fix: sched/membarrier: p->mm->membarrier_state racy load Mathieu Desnoyers
2019-09-06 8:23 ` Peter Zijlstra
2019-09-08 13:49 ` [RFC PATCH 4/4] Fix: sched/membarrier: p->mm->membarrier_state racy load (v2) Mathieu Desnoyers
2019-09-08 16:51 ` Linus Torvalds
2019-09-10 9:48 ` Mathieu Desnoyers
2019-09-12 13:48 ` Will Deacon
2019-09-12 14:24 ` Linus Torvalds
2019-09-12 15:47 ` Will Deacon
2019-09-13 14:22 ` Mathieu Desnoyers [this message]
2019-09-19 16:26 ` Will Deacon
2019-09-19 17:33 ` Mathieu Desnoyers
2019-09-09 11:00 ` Oleg Nesterov
2019-09-13 15:20 ` Mathieu Desnoyers
2019-09-13 16:04 ` Oleg Nesterov
2019-09-13 17:07 ` Mathieu Desnoyers
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=1283729551.2396.1568384548023.JavaMail.zimbra@efficios.com \
--to=mathieu.desnoyers@efficios.com \
--cc=cl@linux.com \
--cc=cmetcalf@ezchip.com \
--cc=ebiederm@xmission.com \
--cc=efault@gmx.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=mingo@kernel.org \
--cc=mtk.manpages@gmail.com \
--cc=oleg@redhat.com \
--cc=paulmck@linux.ibm.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=tkhai@yandex.ru \
--cc=torvalds@linux-foundation.org \
--cc=will@kernel.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.