All of lore.kernel.org
 help / color / mirror / Atom feed
From: tip-bot for Mathieu Desnoyers <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: paulmck@linux.vnet.ibm.com, ahh@google.com, paulus@samba.org,
	sehr@google.com, davejwatson@fb.com, ghackmann@google.com,
	mathieu.desnoyers@efficios.com, hpa@zytor.com,
	boqun.feng@gmail.com, linux-kernel@vger.kernel.org,
	mpe@ellerman.id.au, avi@scylladb.com, tglx@linutronix.de,
	parri.andrea@gmail.com, luto@kernel.org,
	benh@kernel.crashing.org, linux@armlinux.org.uk,
	will.deacon@arm.com, torvalds@linux-foundation.org,
	mingo@kernel.org, maged.michael@gmail.com, peterz@infradead.org
Subject: [tip:sched/urgent] membarrier/x86: Provide core serializing command
Date: Mon, 5 Feb 2018 13:29:34 -0800	[thread overview]
Message-ID: <tip-10bcc80e9dbced128e3b4aa86e4737e5486a45d0@git.kernel.org> (raw)
In-Reply-To: <20180129202020.8515-10-mathieu.desnoyers@efficios.com>

Commit-ID:  10bcc80e9dbced128e3b4aa86e4737e5486a45d0
Gitweb:     https://git.kernel.org/tip/10bcc80e9dbced128e3b4aa86e4737e5486a45d0
Author:     Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
AuthorDate: Mon, 29 Jan 2018 15:20:18 -0500
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Mon, 5 Feb 2018 21:35:11 +0100

membarrier/x86: Provide core serializing command

There are two places where core serialization is needed by membarrier:

1) When returning from the membarrier IPI,
2) After scheduler updates curr to a thread with a different mm, before
   going back to user-space, since the curr->mm is used by membarrier to
   check whether it needs to send an IPI to that CPU.

x86-32 uses IRET as return from interrupt, and both IRET and SYSEXIT to go
back to user-space. The IRET instruction is core serializing, but not
SYSEXIT.

x86-64 uses IRET as return from interrupt, which takes care of the IPI.
However, it can return to user-space through either SYSRETL (compat
code), SYSRETQ, or IRET. Given that SYSRET{L,Q} is not core serializing,
we rely instead on write_cr3() performed by switch_mm() to provide core
serialization after changing the current mm, and deal with the special
case of kthread -> uthread (temporarily keeping current mm into
active_mm) by adding a sync_core() in that specific case.

Use the new sync_core_before_usermode() to guarantee this.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Andrea Parri <parri.andrea@gmail.com>
Cc: Andrew Hunter <ahh@google.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Avi Kivity <avi@scylladb.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Boqun Feng <boqun.feng@gmail.com>
Cc: Dave Watson <davejwatson@fb.com>
Cc: David Sehr <sehr@google.com>
Cc: Greg Hackmann <ghackmann@google.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Maged Michael <maged.michael@gmail.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Will Deacon <will.deacon@arm.com>
Cc: linux-api@vger.kernel.org
Cc: linux-arch@vger.kernel.org
Link: http://lkml.kernel.org/r/20180129202020.8515-10-mathieu.desnoyers@efficios.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/Kconfig          | 1 +
 arch/x86/entry/entry_32.S | 5 +++++
 arch/x86/entry/entry_64.S | 4 ++++
 arch/x86/mm/tlb.c         | 7 ++++---
 4 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 31030ad..e095bdb 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -54,6 +54,7 @@ config X86
 	select ARCH_HAS_FORTIFY_SOURCE
 	select ARCH_HAS_GCOV_PROFILE_ALL
 	select ARCH_HAS_KCOV			if X86_64
+	select ARCH_HAS_MEMBARRIER_SYNC_CORE
 	select ARCH_HAS_PMEM_API		if X86_64
 	select ARCH_HAS_REFCOUNT
 	select ARCH_HAS_UACCESS_FLUSHCACHE	if X86_64
diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
index 2a35b1e..abee6d2 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -566,6 +566,11 @@ restore_all:
 .Lrestore_nocheck:
 	RESTORE_REGS 4				# skip orig_eax/error_code
 .Lirq_return:
+	/*
+	 * ARCH_HAS_MEMBARRIER_SYNC_CORE rely on IRET core serialization
+	 * when returning from IPI handler and when returning from
+	 * scheduler to user-space.
+	 */
 	INTERRUPT_RETURN
 
 .section .fixup, "ax"
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
index a835704..5816858 100644
--- a/arch/x86/entry/entry_64.S
+++ b/arch/x86/entry/entry_64.S
@@ -804,6 +804,10 @@ GLOBAL(restore_regs_and_return_to_kernel)
 	POP_EXTRA_REGS
 	POP_C_REGS
 	addq	$8, %rsp	/* skip regs->orig_ax */
+	/*
+	 * ARCH_HAS_MEMBARRIER_SYNC_CORE rely on IRET core serialization
+	 * when returning from IPI handler.
+	 */
 	INTERRUPT_RETURN
 
 ENTRY(native_iret)
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
index 9fa7d2e..9b34121 100644
--- a/arch/x86/mm/tlb.c
+++ b/arch/x86/mm/tlb.c
@@ -229,9 +229,10 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
 	this_cpu_write(cpu_tlbstate.is_lazy, false);
 
 	/*
-	 * The membarrier system call requires a full memory barrier
-	 * before returning to user-space, after storing to rq->curr.
-	 * Writing to CR3 provides that full memory barrier.
+	 * The membarrier system call requires a full memory barrier and
+	 * core serialization before returning to user-space, after
+	 * storing to rq->curr. Writing to CR3 provides that full
+	 * memory barrier and core serializing instruction.
 	 */
 	if (real_prev == next) {
 		VM_WARN_ON(this_cpu_read(cpu_tlbstate.ctxs[prev_asid].ctx_id) !=

  reply	other threads:[~2018-02-05 21:43 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-29 20:20 [PATCH for 4.16 00/11] membarrier updates for 4.16 Mathieu Desnoyers
2018-01-29 20:20 ` Mathieu Desnoyers
2018-01-29 20:20 ` [PATCH for 4.16 v2 01/11] membarrier: selftest: Test private expedited cmd Mathieu Desnoyers
2018-01-29 20:20   ` [Linux-kselftest-mirror] " Mathieu Desnoyers
2018-01-29 20:20   ` mathieu.desnoyers
2018-01-29 20:20   ` Mathieu Desnoyers
2018-02-05 21:25   ` [tip:sched/urgent] membarrier/selftest: Test private expedited command tip-bot for Mathieu Desnoyers
2018-01-29 20:20 ` [PATCH for 4.16 v7 02/11] powerpc: membarrier: Skip memory barrier in switch_mm() Mathieu Desnoyers
2018-01-29 20:20   ` Mathieu Desnoyers
2018-02-05 20:22   ` Ingo Molnar
2018-02-05 20:22     ` Ingo Molnar
     [not found]     ` <20180205202242.6ilyjh35byycf3ez-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-02-05 20:32       ` Mathieu Desnoyers
2018-02-05 20:32         ` Mathieu Desnoyers
2018-02-05 21:26   ` [tip:sched/urgent] powerpc, " tip-bot for Mathieu Desnoyers
2021-06-18 17:13   ` [PATCH for 4.16 v7 02/11] powerpc: " Christophe Leroy
2021-06-18 17:13     ` Christophe Leroy
2021-06-18 17:26     ` Mathieu Desnoyers
2021-06-18 17:26       ` Mathieu Desnoyers
2021-06-19  9:35       ` Christophe Leroy
2021-06-19  9:35         ` Christophe Leroy
2021-06-19 15:02         ` Segher Boessenkool
2021-06-19 15:02           ` Segher Boessenkool
2021-06-21 14:11           ` Christophe Leroy
2021-06-21 14:11             ` Christophe Leroy
2021-06-22  0:15             ` Segher Boessenkool
2021-06-22  0:15               ` Segher Boessenkool
2018-01-29 20:20 ` [PATCH for 4.16 v5 03/11] membarrier: Document scheduler barrier requirements Mathieu Desnoyers
2018-01-29 20:20   ` Mathieu Desnoyers
2018-02-05 21:26   ` [tip:sched/urgent] " tip-bot for Mathieu Desnoyers
2018-01-29 20:20 ` [PATCH for 4.16 v2 05/11] membarrier: selftest: Test global expedited cmd Mathieu Desnoyers
2018-01-29 20:20   ` [Linux-kselftest-mirror] " Mathieu Desnoyers
2018-01-29 20:20   ` mathieu.desnoyers
2018-01-29 20:20   ` Mathieu Desnoyers
2018-02-05 21:27   ` [tip:sched/urgent] membarrier/selftest: Test global expedited command tip-bot for Mathieu Desnoyers
2018-01-29 20:20 ` [PATCH for 4.16 v2 06/11] Introduce sync_core_before_usermode Mathieu Desnoyers
2018-01-29 20:20   ` Mathieu Desnoyers
2018-02-05 21:28   ` [tip:sched/urgent] locking: Introduce sync_core_before_usermode() tip-bot for Mathieu Desnoyers
2018-01-29 20:20 ` [PATCH for 4.16 v3 07/11] x86: Implement sync_core_before_usermode Mathieu Desnoyers
2018-01-29 20:20   ` Mathieu Desnoyers
2018-02-05 21:28   ` [tip:sched/urgent] lockin/x86: Implement sync_core_before_usermode() tip-bot for Mathieu Desnoyers
     [not found] ` <20180129202020.8515-1-mathieu.desnoyers-vg+e7yoeK/dWk0Htik3J/w@public.gmane.org>
2018-01-29 20:20   ` [PATCH for 4.16 v3 04/11] membarrier: provide GLOBAL_EXPEDITED command Mathieu Desnoyers
2018-01-29 20:20     ` Mathieu Desnoyers
2018-02-05 21:27     ` [tip:sched/urgent] membarrier: Provide " tip-bot for Mathieu Desnoyers
2018-01-29 20:20   ` [PATCH for 4.16 v3 08/11] membarrier: Provide core serializing command Mathieu Desnoyers
2018-01-29 20:20     ` Mathieu Desnoyers
2018-02-05 21:29     ` [tip:sched/urgent] membarrier: Provide core serializing command, *_SYNC_CORE tip-bot for Mathieu Desnoyers
2018-01-29 20:20   ` [PATCH for 4.16 11/11] membarrier: selftest: Test private expedited sync core cmd Mathieu Desnoyers
2018-01-29 20:20     ` [Linux-kselftest-mirror] " Mathieu Desnoyers
2018-01-29 20:20     ` mathieu.desnoyers
2018-01-29 20:20     ` Mathieu Desnoyers
2018-02-05 21:30     ` [tip:sched/urgent] membarrier/selftest: Test private expedited sync core command tip-bot for Mathieu Desnoyers
2018-02-05 21:21   ` [PATCH for 4.16 00/11] membarrier updates for 4.16 Ingo Molnar
2018-02-05 21:21     ` Ingo Molnar
2018-01-29 20:20 ` [PATCH for 4.16 v4 09/11] membarrier: x86: Provide core serializing command Mathieu Desnoyers
2018-01-29 20:20   ` Mathieu Desnoyers
2018-02-05 21:29   ` tip-bot for Mathieu Desnoyers [this message]
2018-01-29 20:20 ` [PATCH for 4.16 10/11] membarrier: arm64: " Mathieu Desnoyers
2018-01-29 20:20   ` Mathieu Desnoyers
2018-02-05 21:30   ` [tip:sched/urgent] membarrier/arm64: " tip-bot for 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=tip-10bcc80e9dbced128e3b4aa86e4737e5486a45d0@git.kernel.org \
    --to=tipbot@zytor.com \
    --cc=ahh@google.com \
    --cc=avi@scylladb.com \
    --cc=benh@kernel.crashing.org \
    --cc=boqun.feng@gmail.com \
    --cc=davejwatson@fb.com \
    --cc=ghackmann@google.com \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=luto@kernel.org \
    --cc=maged.michael@gmail.com \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mingo@kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=parri.andrea@gmail.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=paulus@samba.org \
    --cc=peterz@infradead.org \
    --cc=sehr@google.com \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --cc=will.deacon@arm.com \
    /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.