root/include/linux/sem.h

/* [previous][next][first][last][top][bottom][index][help] */

INCLUDED FROM


   1 #ifndef _LINUX_SEM_H
   2 #define _LINUX_SEM_H
   3 #include <linux/ipc.h>
   4 
   5 /* semop flags */
   6 #define SEM_UNDO        010000  /* undo the operation on exit */
   7 
   8 /* semctl Command Definitions. */
   9 #define GETPID  11       /* get sempid */
  10 #define GETVAL  12       /* get semval */
  11 #define GETALL  13       /* get all semval's */
  12 #define GETNCNT 14       /* get semncnt */
  13 #define GETZCNT 15       /* get semzcnt */
  14 #define SETVAL  16       /* set semval */
  15 #define SETALL  17       /* set all semval's */
  16 
  17 /* One semid data structure for each set of semaphores in the system. */
  18 struct semid_ds {
  19   struct ipc_perm sem_perm;       /* permissions .. see ipc.h */
  20   time_t          sem_otime;      /* last semop time */
  21   time_t          sem_ctime;      /* last change time */
  22   struct sem      *sem_base;      /* ptr to first semaphore in array */
  23   struct wait_queue *eventn;
  24   struct wait_queue *eventz;
  25   struct sem_undo  *undo;         /* undo requests on this array */
  26   ushort          sem_nsems;      /* no. of semaphores in array */
  27 };
  28 
  29 /* semop system calls takes an array of these. */
  30 struct sembuf {
  31   ushort  sem_num;        /* semaphore index in array */
  32   short   sem_op;         /* semaphore operation */
  33   short   sem_flg;        /* operation flags */
  34 };
  35 
  36 /* arg for semctl system calls. */
  37 union semun {
  38   int val;                      /* value for SETVAL */
  39   struct semid_ds *buf;         /* buffer for IPC_STAT & IPC_SET */
  40   ushort *array;                /* array for GETALL & SETALL */
  41   struct seminfo *__buf;        /* buffer for IPC_INFO */
  42   void *__pad;
  43 };
  44 
  45 struct  seminfo {
  46     int semmap; 
  47     int semmni; 
  48     int semmns; 
  49     int semmnu; 
  50     int semmsl; 
  51     int semopm; 
  52     int semume; 
  53     int semusz; 
  54     int semvmx; 
  55     int semaem; 
  56 };
  57 
  58 #define SEMMNI  128             /* ?  max # of semaphore identifiers */
  59 #define SEMMSL  32              /* <= 512 max num of semaphores per id */
  60 #define SEMMNS  (SEMMNI*SEMMSL) /* ? max # of semaphores in system */
  61 #define SEMOPM  32              /* ~ 100 max num of ops per semop call */
  62 #define SEMVMX  32767           /* semaphore maximum value */
  63 
  64 /* unused */
  65 #define SEMUME  SEMOPM          /* max num of undo entries per process */
  66 #define SEMMNU  SEMMNS          /* num of undo structures system wide */
  67 #define SEMAEM  (SEMVMX >> 1)   /* adjust on exit max value */
  68 #define SEMMAP  SEMMNS          /* # of entries in semaphore map */
  69 #define SEMUSZ  20              /* sizeof struct sem_undo */ 
  70 
  71 #ifdef __KERNEL__
  72 
  73 /* One semaphore structure for each semaphore in the system. */
  74 struct sem {
  75   short   sempid;         /* pid of last operation */
  76   ushort  semval;         /* current value */
  77   ushort  semncnt;        /* num procs awaiting increase in semval */
  78   ushort  semzcnt;        /* num procs awaiting semval = 0 */
  79 };
  80 
  81 /* ipcs ctl cmds */
  82 #define SEM_STAT 18     
  83 #define SEM_INFO 19
  84 
  85 /* per process undo requests */
  86 /* this gets linked into the task_struct */
  87 struct sem_undo {
  88     struct sem_undo *proc_next;
  89     struct sem_undo *id_next;
  90     int    semid;
  91     short  semadj;              /* semval adjusted by exit */
  92     ushort sem_num;             /* semaphore index in array semid */
  93 };      
  94 
  95 #endif /* __KERNEL__ */
  96 
  97 #endif /* _LINUX_SEM_H */

/* [previous][next][first][last][top][bottom][index][help] */