[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20171214161403.30643-1-mathieu.desnoyers@efficios.com>
Date: Thu, 14 Dec 2017 11:13:42 -0500
From: Mathieu Desnoyers <mathieu.desnoyers@...icios.com>
To: Peter Zijlstra <peterz@...radead.org>,
"Paul E . McKenney" <paulmck@...ux.vnet.ibm.com>,
Boqun Feng <boqun.feng@...il.com>,
Andy Lutomirski <luto@...capital.net>,
Dave Watson <davejwatson@...com>
Cc: linux-kernel@...r.kernel.org, linux-api@...r.kernel.org,
Paul Turner <pjt@...gle.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Russell King <linux@....linux.org.uk>,
Thomas Gleixner <tglx@...utronix.de>,
Ingo Molnar <mingo@...hat.com>,
"H . Peter Anvin" <hpa@...or.com>, Andrew Hunter <ahh@...gle.com>,
Andi Kleen <andi@...stfloor.org>, Chris Lameter <cl@...ux.com>,
Ben Maurer <bmaurer@...com>,
Steven Rostedt <rostedt@...dmis.org>,
Josh Triplett <josh@...htriplett.org>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Catalin Marinas <catalin.marinas@....com>,
Will Deacon <will.deacon@....com>,
Michael Kerrisk <mtk.manpages@...il.com>,
Mathieu Desnoyers <mathieu.desnoyers@...icios.com>
Subject: [RFC PATCH for 4.16 00/21] Restartable sequences and CPU op vector
Hi,
Following changes based on the last round of review, I'm respinning this
series for another RFC round. It is based on the v4.15-rc3 tag. I am
now targeting the 4.16 merge window.
This series contains:
- Restartable sequences system call (x86 32/64, powerpc 32/64, arm 32),
- CPU operation vector system call (x86 32/64, powerpc 32/64, arm 32).
I have moved the membarrier patches to a different series.
The main changes introduced in this updated version are:
- Introducing a user-space "percpu-op.h" API, which wraps fast and slow
paths into a single inline function,
- Changes to the cpu_opv page pinning, making it robust with respect to
concurrent PTE changes,
- Fixed a rseq bug where the rseq_cs pointer was cleared too soon,
causing hard-to-reproduce races triggered by NUMA page protection.
- Extended rseq selftests to add a "compare twice" approach validating
invaritants, which catches races more quickly and closer to the
race.
This updated series documents a major upside of the cpu_opv system call:
it allows performing operations on remote per-cpu data (e.g. migration
of memory between per-cpu memory pools, task migration across per-cpu
work queues, or summing up and clearning per-cpu statistics counters)
by simply passing the CPU number on which the operation must be
performed as argument to the system call.
Doing this without cpu_opv would require use of sched_setaffinity
alongside with restartable sequences, which is not safe against CPU
hot-unplug.
Feedback is welcome!
Thanks,
Mathieu
Boqun Feng (2):
powerpc: Add support for restartable sequences
powerpc: Wire up restartable sequences system call
Mathieu Desnoyers (19):
uapi headers: Provide types_32_64.h
rseq: Introduce restartable sequences system call (v12)
arm: Add restartable sequences support
arm: Wire up restartable sequences system call
x86: Add support for restartable sequences
x86: Wire up restartable sequence system call
sched: Implement push_task_to_cpu
cpu_opv: Provide cpu_opv system call (v5)
x86: Wire up cpu_opv system call
powerpc: Wire up cpu_opv system call
arm: Wire up cpu_opv system call
selftests: lib.mk: Introduce OVERRIDE_TARGETS
cpu_opv: selftests: Implement selftests (v6)
rseq: selftests: Provide rseq library (v5)
rseq: selftests: Provide percpu_op API
rseq: selftests: Provide basic test
rseq: selftests: Provide basic percpu ops test
rseq: selftests: Provide parametrized tests
rseq: selftests: Provide Makefile, scripts, gitignore
MAINTAINERS | 20 +
arch/Kconfig | 7 +
arch/arm/Kconfig | 1 +
arch/arm/kernel/signal.c | 7 +
arch/arm/tools/syscall.tbl | 2 +
arch/powerpc/Kconfig | 1 +
arch/powerpc/include/asm/systbl.h | 2 +
arch/powerpc/include/asm/unistd.h | 2 +-
arch/powerpc/include/uapi/asm/unistd.h | 2 +
arch/powerpc/kernel/signal.c | 3 +
arch/x86/Kconfig | 1 +
arch/x86/entry/common.c | 1 +
arch/x86/entry/syscalls/syscall_32.tbl | 2 +
arch/x86/entry/syscalls/syscall_64.tbl | 2 +
arch/x86/kernel/signal.c | 6 +
fs/exec.c | 1 +
include/linux/sched.h | 109 ++
include/linux/syscalls.h | 6 +
include/trace/events/rseq.h | 56 +
include/uapi/linux/cpu_opv.h | 114 ++
include/uapi/linux/rseq.h | 150 +++
include/uapi/linux/types_32_64.h | 67 ++
init/Kconfig | 30 +
kernel/Makefile | 2 +
kernel/cpu_opv.c | 1078 +++++++++++++++++
kernel/fork.c | 2 +
kernel/rseq.c | 358 ++++++
kernel/sched/core.c | 38 +
kernel/sched/sched.h | 10 +
kernel/sys_ni.c | 4 +
tools/testing/selftests/Makefile | 2 +
tools/testing/selftests/cpu-opv/.gitignore | 1 +
tools/testing/selftests/cpu-opv/Makefile | 17 +
.../testing/selftests/cpu-opv/basic_cpu_opv_test.c | 1258 ++++++++++++++++++++
tools/testing/selftests/cpu-opv/cpu-op.c | 352 ++++++
tools/testing/selftests/cpu-opv/cpu-op.h | 59 +
tools/testing/selftests/lib.mk | 4 +
tools/testing/selftests/rseq/.gitignore | 7 +
tools/testing/selftests/rseq/Makefile | 37 +
.../testing/selftests/rseq/basic_percpu_ops_test.c | 296 +++++
tools/testing/selftests/rseq/basic_test.c | 55 +
tools/testing/selftests/rseq/param_test.c | 1163 ++++++++++++++++++
tools/testing/selftests/rseq/percpu-op.h | 163 +++
tools/testing/selftests/rseq/rseq-arm.h | 732 ++++++++++++
tools/testing/selftests/rseq/rseq-ppc.h | 688 +++++++++++
tools/testing/selftests/rseq/rseq-skip.h | 82 ++
tools/testing/selftests/rseq/rseq-x86.h | 1149 ++++++++++++++++++
tools/testing/selftests/rseq/rseq.c | 116 ++
tools/testing/selftests/rseq/rseq.h | 164 +++
tools/testing/selftests/rseq/run_param_test.sh | 130 ++
50 files changed, 8558 insertions(+), 1 deletion(-)
create mode 100644 include/trace/events/rseq.h
create mode 100644 include/uapi/linux/cpu_opv.h
create mode 100644 include/uapi/linux/rseq.h
create mode 100644 include/uapi/linux/types_32_64.h
create mode 100644 kernel/cpu_opv.c
create mode 100644 kernel/rseq.c
create mode 100644 tools/testing/selftests/cpu-opv/.gitignore
create mode 100644 tools/testing/selftests/cpu-opv/Makefile
create mode 100644 tools/testing/selftests/cpu-opv/basic_cpu_opv_test.c
create mode 100644 tools/testing/selftests/cpu-opv/cpu-op.c
create mode 100644 tools/testing/selftests/cpu-opv/cpu-op.h
create mode 100644 tools/testing/selftests/rseq/.gitignore
create mode 100644 tools/testing/selftests/rseq/Makefile
create mode 100644 tools/testing/selftests/rseq/basic_percpu_ops_test.c
create mode 100644 tools/testing/selftests/rseq/basic_test.c
create mode 100644 tools/testing/selftests/rseq/param_test.c
create mode 100644 tools/testing/selftests/rseq/percpu-op.h
create mode 100644 tools/testing/selftests/rseq/rseq-arm.h
create mode 100644 tools/testing/selftests/rseq/rseq-ppc.h
create mode 100644 tools/testing/selftests/rseq/rseq-skip.h
create mode 100644 tools/testing/selftests/rseq/rseq-x86.h
create mode 100644 tools/testing/selftests/rseq/rseq.c
create mode 100644 tools/testing/selftests/rseq/rseq.h
create mode 100755 tools/testing/selftests/rseq/run_param_test.sh
--
2.11.0
Powered by blists - more mailing lists