S390_GUARDED_STORAGE(2)                                                    System Calls Manual                                                   S390_GUARDED_STORAGE(2)

NAME
       s390_guarded_storage - operations with z/Architecture guarded storage facility

SYNOPSIS
       #include <asm/guarded_storage.h> /* Definition of GS_* constants */
       #include <sys/syscall.h>         /* Definition of SYS_* constants */
       #include <unistd.h>

       int syscall(SYS_s390_guarded_storage, int command,
                   struct gs_cb *gs_cb);

       Note: glibc provides no wrapper for s390_guarded_storage(), necessitating the use of syscall(2).

DESCRIPTION
       The s390_guarded_storage() system call enables the use of the Guarded Storage Facility (a z/Architecture-specific feature) for user-space processes.

       The  guarded storage facility is a hardware feature that allows marking up to 64 memory regions (as of z14) as guarded; reading a pointer with a newly introduced
       "Load Guarded" (LGG) or "Load Logical and Shift Guarded" (LLGFSG) instructions will cause a range check on the loaded value and  invoke  a  (previously  set  up)
       user-space handler if one of the guarded regions is affected.

       The command argument indicates which function to perform.  The following commands are supported:

       GS_ENABLE
              Enable  the guarded storage facility for the calling task.  The initial content of the guarded storage control block will be all zeros.  After enablement,
              user-space code can use the "Load Guarded Storage Controls" (LGSC) instruction (or the load_gs_cb() function wrapper provided in the asm/guarded_storage.h
              header)  to  load an arbitrary control block.  While a task is enabled, the kernel will save and restore the calling content of the guarded storage regis‐
              ters on context switch.

       GS_DISABLE
              Disables the use of the guarded storage facility for the calling task.  The kernel will cease to save and restore the content of the guarded storage  reg‐
              isters, the task-specific content of these registers is lost.

       GS_SET_BC_CB
              Set  a  broadcast  guarded  storage  control block to the one provided in the gs_cb argument.  This is called per thread and associates a specific guarded
              storage control block with the calling task.  This control block will be used in the broadcast command GS_BROADCAST.

       GS_CLEAR_BC_CB
              Clears the broadcast guarded storage control block.  The guarded storage control block will no longer have the association established by the GS_SET_BC_CB
              command.

       GS_BROADCAST
              Sends a broadcast to all thread siblings of the calling task.  Every sibling that has established a broadcast guarded storage control block will load this
              control block and will be enabled for guarded storage.  The broadcast guarded storage control block is consumed; a second broadcast without a  refresh  of
              the stored control block with GS_SET_BC_CB will not have any effect.

       The gs_cb argument specifies the address of a guarded storage control block structure and is currently used only by the GS_SET_BC_CB command; all other aforemen‐
       tioned commands ignore this argument.

RETURN VALUE
       On success, the return value of s390_guarded_storage() is 0.

       On error, -1 is returned, and errno is set to indicate the error.

ERRORS
       EFAULT command was GS_SET_BC_CB and the copying of the guarded storage control block structure pointed by the gs_cb argument has failed.

       EINVAL The value provided in the command argument was not valid.

       ENOMEM command was one of GS_ENABLE or GS_SET_BC_CB, and the allocation of a new guarded storage control block has failed.

       EOPNOTSUPP
              The guarded storage facility is not supported by the hardware.

VERSIONS
       This system call is available since Linux 4.12.

CONFORMING TO
       This Linux-specific system call is available only on the s390 architecture.

       The guarded storage facility is available beginning with System z14.

NOTES
       The description of the guarded storage facility along with related instructions and Guarded Storage Control Block and Guarded Storage Event Parameter List struc‐
       ture layouts is available in "z/Architecture Principles of Operations" beginning from the twelfth edition.

       The  gs_cb  structure  has a field gsepla (Guarded Storage Event Parameter List Address), which is a user-space pointer to a Guarded Storage Event Parameter List
       structure (that contains the address of the aforementioned event handler in the gseha field), and its layout is available as a gs_epl structure  type  definition
       in the asm/guarded_storage.h header.

SEE ALSO
       syscall(2)

Linux Programmer's Manual                                                      2021-03-22                                                        S390_GUARDED_STORAGE(2)