16f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2607ca46eSDavid Howells #ifndef _UAPI_LINUX_SEM_H 3607ca46eSDavid Howells #define _UAPI_LINUX_SEM_H 4607ca46eSDavid Howells 5607ca46eSDavid Howells #include <linux/ipc.h> 6607ca46eSDavid Howells 7607ca46eSDavid Howells /* semop flags */ 8607ca46eSDavid Howells #define SEM_UNDO 0x1000 /* undo the operation on exit */ 9607ca46eSDavid Howells 10607ca46eSDavid Howells /* semctl Command Definitions. */ 11607ca46eSDavid Howells #define GETPID 11 /* get sempid */ 12607ca46eSDavid Howells #define GETVAL 12 /* get semval */ 13607ca46eSDavid Howells #define GETALL 13 /* get all semval's */ 14607ca46eSDavid Howells #define GETNCNT 14 /* get semncnt */ 15607ca46eSDavid Howells #define GETZCNT 15 /* get semzcnt */ 16607ca46eSDavid Howells #define SETVAL 16 /* set semval */ 17607ca46eSDavid Howells #define SETALL 17 /* set all semval's */ 18607ca46eSDavid Howells 19607ca46eSDavid Howells /* ipcs ctl cmds */ 20607ca46eSDavid Howells #define SEM_STAT 18 21607ca46eSDavid Howells #define SEM_INFO 19 22a280d6dcSDavidlohr Bueso #define SEM_STAT_ANY 20 23607ca46eSDavid Howells 24607ca46eSDavid Howells /* Obsolete, used only for backwards compatibility and libc5 compiles */ 25607ca46eSDavid Howells struct semid_ds { 26607ca46eSDavid Howells struct ipc_perm sem_perm; /* permissions .. see ipc.h */ 27*2a785996SArnd Bergmann __kernel_old_time_t sem_otime; /* last semop time */ 28*2a785996SArnd Bergmann __kernel_old_time_t sem_ctime; /* create/last semctl() time */ 29607ca46eSDavid Howells struct sem *sem_base; /* ptr to first semaphore in array */ 30607ca46eSDavid Howells struct sem_queue *sem_pending; /* pending operations to be processed */ 31607ca46eSDavid Howells struct sem_queue **sem_pending_last; /* last pending operation */ 32607ca46eSDavid Howells struct sem_undo *undo; /* undo requests on this array */ 33607ca46eSDavid Howells unsigned short sem_nsems; /* no. of semaphores in array */ 34607ca46eSDavid Howells }; 35607ca46eSDavid Howells 36607ca46eSDavid Howells /* Include the definition of semid64_ds */ 37607ca46eSDavid Howells #include <asm/sembuf.h> 38607ca46eSDavid Howells 39607ca46eSDavid Howells /* semop system calls takes an array of these. */ 40607ca46eSDavid Howells struct sembuf { 41607ca46eSDavid Howells unsigned short sem_num; /* semaphore index in array */ 42607ca46eSDavid Howells short sem_op; /* semaphore operation */ 43607ca46eSDavid Howells short sem_flg; /* operation flags */ 44607ca46eSDavid Howells }; 45607ca46eSDavid Howells 46607ca46eSDavid Howells /* arg for semctl system calls. */ 47607ca46eSDavid Howells union semun { 48607ca46eSDavid Howells int val; /* value for SETVAL */ 49607ca46eSDavid Howells struct semid_ds __user *buf; /* buffer for IPC_STAT & IPC_SET */ 50607ca46eSDavid Howells unsigned short __user *array; /* array for GETALL & SETALL */ 51607ca46eSDavid Howells struct seminfo __user *__buf; /* buffer for IPC_INFO */ 52607ca46eSDavid Howells void __user *__pad; 53607ca46eSDavid Howells }; 54607ca46eSDavid Howells 55607ca46eSDavid Howells struct seminfo { 56607ca46eSDavid Howells int semmap; 57607ca46eSDavid Howells int semmni; 58607ca46eSDavid Howells int semmns; 59607ca46eSDavid Howells int semmnu; 60607ca46eSDavid Howells int semmsl; 61607ca46eSDavid Howells int semopm; 62607ca46eSDavid Howells int semume; 63607ca46eSDavid Howells int semusz; 64607ca46eSDavid Howells int semvmx; 65607ca46eSDavid Howells int semaem; 66607ca46eSDavid Howells }; 67607ca46eSDavid Howells 68e843e7d2SManfred Spraul /* 69e843e7d2SManfred Spraul * SEMMNI, SEMMSL and SEMMNS are default values which can be 70e843e7d2SManfred Spraul * modified by sysctl. 71e843e7d2SManfred Spraul * The values has been chosen to be larger than necessary for any 72e843e7d2SManfred Spraul * known configuration. 73e843e7d2SManfred Spraul * 74e843e7d2SManfred Spraul * SEMOPM should not be increased beyond 1000, otherwise there is the 75e843e7d2SManfred Spraul * risk that semop()/semtimedop() fails due to kernel memory fragmentation when 76e843e7d2SManfred Spraul * allocating the sop array. 77e843e7d2SManfred Spraul */ 78e843e7d2SManfred Spraul 79e843e7d2SManfred Spraul 80e843e7d2SManfred Spraul #define SEMMNI 32000 /* <= IPCMNI max # of semaphore identifiers */ 81e843e7d2SManfred Spraul #define SEMMSL 32000 /* <= INT_MAX max num of semaphores per id */ 82607ca46eSDavid Howells #define SEMMNS (SEMMNI*SEMMSL) /* <= INT_MAX max # of semaphores in system */ 83e843e7d2SManfred Spraul #define SEMOPM 500 /* <= 1 000 max num of ops per semop call */ 84607ca46eSDavid Howells #define SEMVMX 32767 /* <= 32767 semaphore maximum value */ 85607ca46eSDavid Howells #define SEMAEM SEMVMX /* adjust on exit max value */ 86607ca46eSDavid Howells 87607ca46eSDavid Howells /* unused */ 88607ca46eSDavid Howells #define SEMUME SEMOPM /* max num of undo entries per process */ 89607ca46eSDavid Howells #define SEMMNU SEMMNS /* num of undo structures system wide */ 90607ca46eSDavid Howells #define SEMMAP SEMMNS /* # of entries in semaphore map */ 91607ca46eSDavid Howells #define SEMUSZ 20 /* sizeof struct sem_undo */ 92607ca46eSDavid Howells 93607ca46eSDavid Howells 94607ca46eSDavid Howells #endif /* _UAPI_LINUX_SEM_H */ 95