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