From: Peter Zijlstra <peterz@infradead.org>
To: Peter Oskolkov <posk@google.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
"Paul E . McKenney" <paulmck@kernel.org>,
Boqun Feng <boqun.feng@gmail.com>,
linux-kernel@vger.kernel.org, Paul Turner <pjt@google.com>,
Chris Kennelly <ckennelly@google.com>,
Peter Oskolkov <posk@posk.io>
Subject: Re: [PATCH 1/2 v3] rseq/membarrier: add MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ
Date: Tue, 11 Aug 2020 08:27:33 +0200 [thread overview]
Message-ID: <20200811062733.GP3982@worktop.programming.kicks-ass.net> (raw)
In-Reply-To: <20200811000959.2486636-1-posk@google.com>
On Mon, Aug 10, 2020 at 05:09:58PM -0700, Peter Oskolkov wrote:
> @@ -27,6 +35,12 @@
>
> static void ipi_mb(void *info)
> {
The #ifdef wants to behere, otherwise you'll get a compile warning for
!RSEQ builds.
> + int *flags = info;
> +
> +#ifdef CONFIG_RSEQ
> + if (flags && (*flags == MEMBARRIER_FLAG_RSEQ))
> + rseq_preempt(current);
> +#endif
> smp_mb(); /* IPIs should be serializing but paranoid. */
> }
But yes, this looks much better.
Mathieu did mention a few other points that I didn't see addressed:
- he didn't like abusing the @flags syscall argument for a CPUid;
- he wondered if we should support SYNC_CORE + RSEQ.
Not sure we can easily change the syscall at this point, but the latter
point could be addressed with something like this.
---
Index: linux-2.6/kernel/sched/membarrier.c
===================================================================
--- linux-2.6.orig/kernel/sched/membarrier.c
+++ linux-2.6/kernel/sched/membarrier.c
@@ -374,8 +374,26 @@ static int membarrier_register_private_e
*/
SYSCALL_DEFINE2(membarrier, int, cmd, int, flags)
{
+ int cflags = 0, int cpuid = -1;
+
if (unlikely(flags) && cmd != MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ)
return -EINVAL;
+
+ if (cmd & (MEMBARRIER_CMD_PRIVATE_EXPEDITED |
+ MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE |
+ MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ)) {
+
+ if (cmd & MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ)
+ cflags |= MEMBARRIER_FLAG_RSEQ;
+
+ if (cmd & MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE) {
+ cflags |= MEMBARRIER_FLAG_SYNC_CORE;
+ cpuid = flags;
+ }
+
+ cmd = MEMBARRIER_CMD_PRIVATE_EXPEDITED;
+ }
+
switch (cmd) {
case MEMBARRIER_CMD_QUERY:
{
@@ -396,18 +414,16 @@ SYSCALL_DEFINE2(membarrier, int, cmd, in
return membarrier_global_expedited();
case MEMBARRIER_CMD_REGISTER_GLOBAL_EXPEDITED:
return membarrier_register_global_expedited();
- case MEMBARRIER_CMD_PRIVATE_EXPEDITED:
- return membarrier_private_expedited(0, -1);
case MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED:
return membarrier_register_private_expedited(0);
- case MEMBARRIER_CMD_PRIVATE_EXPEDITED_SYNC_CORE:
- return membarrier_private_expedited(MEMBARRIER_FLAG_SYNC_CORE, -1);
case MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_SYNC_CORE:
return membarrier_register_private_expedited(MEMBARRIER_FLAG_SYNC_CORE);
- case MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ:
- return membarrier_private_expedited(MEMBARRIER_FLAG_RSEQ, flags);
case MEMBARRIER_CMD_REGISTER_PRIVATE_EXPEDITED_RSEQ:
return membarrier_register_private_expedited(MEMBARRIER_FLAG_RSEQ);
+
+ case MEMBARRIER_CMD_PRIVATE_EXPEDITED:
+ return membarrier_private_expedited(cflags, cpuid);
+
default:
return -EINVAL;
}
next prev parent reply other threads:[~2020-08-11 6:27 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-11 0:09 [PATCH 1/2 v3] rseq/membarrier: add MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ Peter Oskolkov
2020-08-11 0:09 ` [PATCH 2/2 v3] rseq/selftests: test MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ Peter Oskolkov
2020-08-12 20:11 ` Mathieu Desnoyers
2020-08-11 6:27 ` Peter Zijlstra [this message]
2020-08-11 7:54 ` [PATCH 1/2 v3] rseq/membarrier: add MEMBARRIER_CMD_PRIVATE_EXPEDITED_RSEQ Peter Zijlstra
2020-08-11 21:08 ` Peter Oskolkov
2020-08-12 18:30 ` Mathieu Desnoyers
2020-08-12 18:48 ` Peter Oskolkov
2020-08-12 19:44 ` Mathieu Desnoyers
2020-08-20 17:42 ` Peter Oskolkov
2020-08-25 16:58 ` Mathieu Desnoyers
2020-08-25 17:22 ` Peter Oskolkov
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=20200811062733.GP3982@worktop.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=boqun.feng@gmail.com \
--cc=ckennelly@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=paulmck@kernel.org \
--cc=pjt@google.com \
--cc=posk@google.com \
--cc=posk@posk.io \
/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.