From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753657AbdJLXDs convert rfc822-to-8bit (ORCPT ); Thu, 12 Oct 2017 19:03:48 -0400 Received: from mail.efficios.com ([167.114.142.141]:40430 "EHLO mail.efficios.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753274AbdJLXDq (ORCPT ); Thu, 12 Oct 2017 19:03:46 -0400 From: Mathieu Desnoyers To: "Paul E. McKenney" , Boqun Feng , Peter Zijlstra , Paul Turner , Andrew Hunter , Andy Lutomirski , Dave Watson , Josh Triplett , Will Deacon Cc: linux-kernel@vger.kernel.org, Mathieu Desnoyers Subject: [RFC PATCH v9 for 4.15 00/14] Restartable sequences and CPU op vector system calls Date: Thu, 12 Oct 2017 19:03:12 -0400 Message-Id: <20171012230326.19984-1-mathieu.desnoyers@efficios.com> X-Mailer: git-send-email 2.11.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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