linux/include/uapi/linux/shm.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
   2#ifndef _UAPI_LINUX_SHM_H_
   3#define _UAPI_LINUX_SHM_H_
   4
   5#include <linux/ipc.h>
   6#include <linux/errno.h>
   7#include <asm-generic/hugetlb_encode.h>
   8#ifndef __KERNEL__
   9#include <unistd.h>
  10#endif
  11
  12/*
  13 * SHMMNI, SHMMAX and SHMALL are default upper limits which can be
  14 * modified by sysctl. The SHMMAX and SHMALL values have been chosen to
  15 * be as large possible without facilitating scenarios where userspace
  16 * causes overflows when adjusting the limits via operations of the form
  17 * "retrieve current limit; add X; update limit". It is therefore not
  18 * advised to make SHMMAX and SHMALL any larger. These limits are
  19 * suitable for both 32 and 64-bit systems.
  20 */
  21#define SHMMIN 1                         /* min shared seg size (bytes) */
  22#define SHMMNI 4096                      /* max num of segs system wide */
  23#define SHMMAX (ULONG_MAX - (1UL << 24)) /* max shared seg size (bytes) */
  24#define SHMALL (ULONG_MAX - (1UL << 24)) /* max shm system wide (pages) */
  25#define SHMSEG SHMMNI                    /* max shared segs per process */
  26
  27/* Obsolete, used only for backwards compatibility and libc5 compiles */
  28struct shmid_ds {
  29        struct ipc_perm         shm_perm;       /* operation perms */
  30        int                     shm_segsz;      /* size of segment (bytes) */
  31        __kernel_old_time_t     shm_atime;      /* last attach time */
  32        __kernel_old_time_t     shm_dtime;      /* last detach time */
  33        __kernel_old_time_t     shm_ctime;      /* last change time */
  34        __kernel_ipc_pid_t      shm_cpid;       /* pid of creator */
  35        __kernel_ipc_pid_t      shm_lpid;       /* pid of last operator */
  36        unsigned short          shm_nattch;     /* no. of current attaches */
  37        unsigned short          shm_unused;     /* compatibility */
  38        void                    *shm_unused2;   /* ditto - used by DIPC */
  39        void                    *shm_unused3;   /* unused */
  40};
  41
  42/* Include the definition of shmid64_ds and shminfo64 */
  43#include <asm/shmbuf.h>
  44
  45/*
  46 * shmget() shmflg values.
  47 */
  48/* The bottom nine bits are the same as open(2) mode flags */
  49#define SHM_R           0400    /* or S_IRUGO from <linux/stat.h> */
  50#define SHM_W           0200    /* or S_IWUGO from <linux/stat.h> */
  51/* Bits 9 & 10 are IPC_CREAT and IPC_EXCL */
  52#define SHM_HUGETLB     04000   /* segment will use huge TLB pages */
  53#define SHM_NORESERVE   010000  /* don't check for reservations */
  54
  55/*
  56 * Huge page size encoding when SHM_HUGETLB is specified, and a huge page
  57 * size other than the default is desired.  See hugetlb_encode.h
  58 */
  59#define SHM_HUGE_SHIFT  HUGETLB_FLAG_ENCODE_SHIFT
  60#define SHM_HUGE_MASK   HUGETLB_FLAG_ENCODE_MASK
  61
  62#define SHM_HUGE_64KB   HUGETLB_FLAG_ENCODE_64KB
  63#define SHM_HUGE_512KB  HUGETLB_FLAG_ENCODE_512KB
  64#define SHM_HUGE_1MB    HUGETLB_FLAG_ENCODE_1MB
  65#define SHM_HUGE_2MB    HUGETLB_FLAG_ENCODE_2MB
  66#define SHM_HUGE_8MB    HUGETLB_FLAG_ENCODE_8MB
  67#define SHM_HUGE_16MB   HUGETLB_FLAG_ENCODE_16MB
  68#define SHM_HUGE_32MB   HUGETLB_FLAG_ENCODE_32MB
  69#define SHM_HUGE_256MB  HUGETLB_FLAG_ENCODE_256MB
  70#define SHM_HUGE_512MB  HUGETLB_FLAG_ENCODE_512MB
  71#define SHM_HUGE_1GB    HUGETLB_FLAG_ENCODE_1GB
  72#define SHM_HUGE_2GB    HUGETLB_FLAG_ENCODE_2GB
  73#define SHM_HUGE_16GB   HUGETLB_FLAG_ENCODE_16GB
  74
  75/*
  76 * shmat() shmflg values
  77 */
  78#define SHM_RDONLY      010000  /* read-only access */
  79#define SHM_RND         020000  /* round attach address to SHMLBA boundary */
  80#define SHM_REMAP       040000  /* take-over region on attach */
  81#define SHM_EXEC        0100000 /* execution access */
  82
  83/* super user shmctl commands */
  84#define SHM_LOCK        11
  85#define SHM_UNLOCK      12
  86
  87/* ipcs ctl commands */
  88#define SHM_STAT        13
  89#define SHM_INFO        14
  90#define SHM_STAT_ANY    15
  91
  92/* Obsolete, used only for backwards compatibility */
  93struct  shminfo {
  94        int shmmax;
  95        int shmmin;
  96        int shmmni;
  97        int shmseg;
  98        int shmall;
  99};
 100
 101struct shm_info {
 102        int used_ids;
 103        __kernel_ulong_t shm_tot;       /* total allocated shm */
 104        __kernel_ulong_t shm_rss;       /* total resident shm */
 105        __kernel_ulong_t shm_swp;       /* total swapped shm */
 106        __kernel_ulong_t swap_attempts;
 107        __kernel_ulong_t swap_successes;
 108};
 109
 110
 111#endif /* _UAPI_LINUX_SHM_H_ */
 112