[RFC PATCH v9 for 4.15 00/14] Restartable sequences and CPU op vector system calls

From: Mathieu Desnoyers
Date: Thu Oct 12 2017 - 19:03:50 EST


Hi,

This v9 series addresses the debugger single-stepping problem for
restartable sequences by providing a new cpu_opv "cpu operation vector"
system call, and let userspace defer execution of the critical sections
to the kernel in case a restartable sequence gets restarted.

This cpu_opv system call is inspired from readv/writev system calls.
Instead of a struct io_vec array, it receives a struct cpu_op array as
argument.

This is provided as RFC, feedback is welcome!

Thanks,

Mathieu

Boqun Feng (2):
Restartable sequences: powerpc architecture support
Restartable sequences: Wire up powerpc system call

Mathieu Desnoyers (12):
Restartable sequences system call (v9)
tracing: instrument restartable sequences
Restartable sequences: ARM 32 architecture support
Restartable sequences: wire up ARM 32 system call
Restartable sequences: x86 32/64 architecture support
Restartable sequences: wire up x86 32/64 system call
Provide cpu_opv system call
cpu_opv: Wire up x86 32/64 system call
cpu_opv: Wire up powerpc system call
cpu_opv: Wire up ARM32 system call
cpu_opv: Implement selftests
Restartable sequences: Provide self-tests

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 | 89 ++
include/trace/events/rseq.h | 64 +
include/uapi/linux/cpu_opv.h | 93 ++
include/uapi/linux/rseq.h | 131 ++
init/Kconfig | 27 +
kernel/Makefile | 2 +
kernel/cpu_opv.c | 1000 ++++++++++++++++
kernel/fork.c | 2 +
kernel/rseq.c | 354 ++++++
kernel/sched/core.c | 41 +
kernel/sched/sched.h | 2 +
kernel/sys_ni.c | 4 +
tools/testing/selftests/cpu-opv/.gitignore | 1 +
tools/testing/selftests/cpu-opv/Makefile | 13 +
.../testing/selftests/cpu-opv/basic_cpu_opv_test.c | 828 +++++++++++++
tools/testing/selftests/cpu-opv/cpu-op.c | 189 +++
tools/testing/selftests/cpu-opv/cpu-op.h | 53 +
tools/testing/selftests/rseq/.gitignore | 4 +
tools/testing/selftests/rseq/Makefile | 13 +
.../testing/selftests/rseq/basic_percpu_ops_test.c | 319 +++++
tools/testing/selftests/rseq/basic_test.c | 97 ++
tools/testing/selftests/rseq/param_test.c | 1246 ++++++++++++++++++++
tools/testing/selftests/rseq/rseq-arm.h | 159 +++
tools/testing/selftests/rseq/rseq-ppc.h | 266 +++++
tools/testing/selftests/rseq/rseq-x86.h | 304 +++++
tools/testing/selftests/rseq/rseq.c | 78 ++
tools/testing/selftests/rseq/rseq.h | 298 +++++
43 files changed, 5736 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 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/rseq-arm.h
create mode 100644 tools/testing/selftests/rseq/rseq-ppc.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

--
2.11.0