---
name: "s390_guarded_storage"
section: "2"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/s390_guarded_storage"
---

# s390\_guarded\_storage(2)

operations with z/Architecture guarded storage facility

## NAME

s390\_guarded\_storage - operations with z/Architecture guarded storage facility

## LIBRARY

Standard C library (*libc*, *-lc*)

## 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)](/syscall/2.md).

## 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 registers 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 registers, 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 aforementioned 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.

## STANDARDS

Linux on s390.

## HISTORY

Linux 4.12, 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 structure 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)](/syscall/2.md)
