lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <3ff33b45-a47e-4a7b-86d9-45f44794071b@infradead.org>
Date: Wed, 22 Oct 2025 10:28:23 -0700
From: Randy Dunlap <rdunlap@...radead.org>
To: Thomas Gleixner <tglx@...utronix.de>, LKML <linux-kernel@...r.kernel.org>
Cc: Peter Zijlstra <peterz@...radead.org>,
 Mathieu Desnoyers <mathieu.desnoyers@...icios.com>,
 "Paul E. McKenney" <paulmck@...nel.org>, Boqun Feng <boqun.feng@...il.com>,
 Jonathan Corbet <corbet@....net>,
 Prakash Sangappa <prakash.sangappa@...cle.com>,
 Madadi Vineeth Reddy <vineethr@...ux.ibm.com>,
 K Prateek Nayak <kprateek.nayak@....com>,
 Steven Rostedt <rostedt@...dmis.org>,
 Sebastian Andrzej Siewior <bigeasy@...utronix.de>,
 Arnd Bergmann <arnd@...db.de>, linux-arch@...r.kernel.org
Subject: Re: [patch V2 02/12] rseq: Add fields and constants for time slice
 extension



On 10/22/25 5:57 AM, Thomas Gleixner wrote:
> Aside of a Kconfig knob add the following items:
> 
>    - Two flag bits for the rseq user space ABI, which allow user space to
>      query the availability and enablement without a syscall.
> 
>    - A new member to the user space ABI struct rseq, which is going to be
>      used to communicate request and grant between kernel and user space.
> 
>    - A rseq state struct to hold the kernel state of this
> 
>    - Documentation of the new mechanism
> 
> Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
> Cc: Peter Zijlstra <peterz@...radead.org>
> Cc: Mathieu Desnoyers <mathieu.desnoyers@...icios.com>
> Cc: "Paul E. McKenney" <paulmck@...nel.org>
> Cc: Boqun Feng <boqun.feng@...il.com>
> Cc: Jonathan Corbet <corbet@....net>
> Cc: Prakash Sangappa <prakash.sangappa@...cle.com>
> Cc: Madadi Vineeth Reddy <vineethr@...ux.ibm.com>
> Cc: K Prateek Nayak <kprateek.nayak@....com>
> Cc: Steven Rostedt <rostedt@...dmis.org>
> Cc: Sebastian Andrzej Siewior <bigeasy@...utronix.de>
> ---
> V2: Fix Kconfig indentation, fix typos and expressions - Randy
>     Make the control fields a struct and remove the atomicity requirement - Mathieu
> ---
>  Documentation/userspace-api/index.rst |    1 
>  Documentation/userspace-api/rseq.rst  |  118 ++++++++++++++++++++++++++++++++++
>  include/linux/rseq_types.h            |   26 +++++++
>  include/uapi/linux/rseq.h             |   38 ++++++++++
>  init/Kconfig                          |   12 +++
>  kernel/rseq.c                         |    7 ++
>  6 files changed, 202 insertions(+)
> 

> --- /dev/null
> +++ b/Documentation/userspace-api/rseq.rst
> @@ -0,0 +1,118 @@
> +=====================
> +Restartable Sequences
> +=====================
> +
> +Restartable Sequences allow to register a per thread userspace memory area
> +to be used as an ABI between kernel and userspace for three purposes:
> +
> + * userspace restartable sequences
> +
> + * quick access to read the current CPU number, node ID from userspace
> +
> + * scheduler time slice extensions
> +
> +Restartable sequences (per-cpu atomics)
> +---------------------------------------
> +
> +Restartables sequences allow userspace to perform update operations on

   Restartable

> +per-cpu data without requiring heavyweight atomic operations. The actual
> +ABI is unfortunately only available in the code and selftests.
> +
> +Quick access to CPU number, node ID
> +-----------------------------------
> +
> +Allows to implement per CPU data efficiently. Documentation is in code and
> +selftests. :(
> +
> +Scheduler time slice extensions
> +-------------------------------
> +
> +This allows a thread to request a time slice extension when it enters a
> +critical section to avoid contention on a resource when the thread is
> +scheduled out inside of the critical section.
> +
> +The prerequisites for this functionality are:
> +
> +    * Enabled in Kconfig
> +
> +    * Enabled at boot time (default is enabled)
> +
> +    * A rseq userspace pointer has been registered for the thread

I would write:  An rseq ...
but it depends on how someone treats (or speaks or thinks) "rseq."
I say/think of it as are-seq, so using "An" makes sense.

> +
> +The thread has to enable the functionality via prctl(2)::
> +
> +    prctl(PR_RSEQ_SLICE_EXTENSION, PR_RSEQ_SLICE_EXTENSION_SET,
> +          PR_RSEQ_SLICE_EXT_ENABLE, 0, 0);
> +
> +prctl() returns 0 on success and otherwise with the following error codes:

                                or

> +
> +========= ==============================================================
> +Errorcode Meaning
> +========= ==============================================================
> +EINVAL	  Functionality not available or invalid function arguments.
> +          Note: arg4 and arg5 must be zero
> +ENOTSUPP  Functionality was disabled on the kernel command line
> +ENXIO	  Available, but no rseq user struct registered
> +========= ==============================================================


[snip]> --- a/include/linux/rseq_types.h
> +++ b/include/linux/rseq_types.h
> @@ -73,12 +73,35 @@ struct rseq_ids {
>  };
>  
>  /**
> + * union rseq_slice_state - Status information for rseq time slice extension
> + * @state:	Compound to access the overall state
> + * @enabled:	Time slice extension is enabled for the task
> + * @granted:	Time slice extension was granted to the task
> + */
> +union rseq_slice_state {
> +	u16			state;
> +	struct {
> +		u8		enabled;
> +		u8		granted;
> +	};
> +};
> +
> +/**
> + * struct rseq_slice - Status information for rseq time slice extension
> + * @state:	Time slice extension state
> + */
> +struct rseq_slice {
> +	union rseq_slice_state	state;
> +};
> +
> +/**
>   * struct rseq_data - Storage for all rseq related data
>   * @usrptr:	Pointer to the registered user space RSEQ memory
>   * @len:	Length of the RSEQ region
>   * @sig:	Signature of critial section abort IPs

                             critical

>   * @event:	Storage for event management
>   * @ids:	Storage for cached CPU ID and MM CID
> + * @slice:	Storage for time slice extension data
>   */
>  struct rseq_data {
>  	struct rseq __user		*usrptr;
> @@ -86,6 +109,9 @@ struct rseq_data {
>  	u32				sig;
>  	struct rseq_event		event;
>  	struct rseq_ids			ids;
> +#ifdef CONFIG_RSEQ_SLICE_EXTENSION
> +	struct rseq_slice		slice;
> +#endif
>  };
>  
>  #else /* CONFIG_RSEQ */
-- 
~Randy


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ