linux/include/linux/sem.h
<<
>>
Prefs
   1#ifndef _LINUX_SEM_H
   2#define _LINUX_SEM_H
   3
   4#include <linux/atomic.h>
   5#include <linux/rcupdate.h>
   6#include <linux/cache.h>
   7#include <uapi/linux/sem.h>
   8
   9struct task_struct;
  10
  11/* One sem_array data structure for each set of semaphores in the system. */
  12struct sem_array {
  13        struct kern_ipc_perm    ____cacheline_aligned_in_smp
  14                                sem_perm;       /* permissions .. see ipc.h */
  15        time_t                  sem_ctime;      /* last change time */
  16        struct sem              *sem_base;      /* ptr to first semaphore in array */
  17        struct list_head        pending_alter;  /* pending operations */
  18                                                /* that alter the array */
  19        struct list_head        pending_const;  /* pending complex operations */
  20                                                /* that do not alter semvals */
  21        struct list_head        list_id;        /* undo requests on this array */
  22        int                     sem_nsems;      /* no. of semaphores in array */
  23        int                     complex_count;  /* pending complex operations */
  24};
  25
  26#ifdef CONFIG_SYSVIPC
  27
  28struct sysv_sem {
  29        struct sem_undo_list *undo_list;
  30};
  31
  32extern int copy_semundo(unsigned long clone_flags, struct task_struct *tsk);
  33extern void exit_sem(struct task_struct *tsk);
  34
  35#else
  36
  37struct sysv_sem {
  38        /* empty */
  39};
  40
  41static inline int copy_semundo(unsigned long clone_flags, struct task_struct *tsk)
  42{
  43        return 0;
  44}
  45
  46static inline void exit_sem(struct task_struct *tsk)
  47{
  48        return;
  49}
  50#endif
  51
  52#endif /* _LINUX_SEM_H */
  53