home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / ipc_namespace.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.2 KB  |  103 lines

  1. #ifndef __IPC_NAMESPACE_H__
  2. #define __IPC_NAMESPACE_H__
  3.  
  4. #include <linux/err.h>
  5. #include <linux/idr.h>
  6. #include <linux/rwsem.h>
  7. #include <linux/notifier.h>
  8.  
  9. /*
  10.  * ipc namespace events
  11.  */
  12. #define IPCNS_MEMCHANGED   0x00000001   /* Notify lowmem size changed */
  13. #define IPCNS_CREATED  0x00000002   /* Notify new ipc namespace created */
  14. #define IPCNS_REMOVED  0x00000003   /* Notify ipc namespace removed */
  15.  
  16. #define IPCNS_CALLBACK_PRI 0
  17.  
  18.  
  19. struct ipc_ids {
  20.     int in_use;
  21.     unsigned short seq;
  22.     unsigned short seq_max;
  23.     struct rw_semaphore rw_mutex;
  24.     struct idr ipcs_idr;
  25. };
  26.  
  27. struct ipc_namespace {
  28.     struct kref    kref;
  29.     struct ipc_ids    ids[3];
  30.  
  31.     int        sem_ctls[4];
  32.     int        used_sems;
  33.  
  34.     int        msg_ctlmax;
  35.     int        msg_ctlmnb;
  36.     int        msg_ctlmni;
  37.     atomic_t    msg_bytes;
  38.     atomic_t    msg_hdrs;
  39.     int        auto_msgmni;
  40.  
  41.     size_t        shm_ctlmax;
  42.     size_t        shm_ctlall;
  43.     int        shm_ctlmni;
  44.     int        shm_tot;
  45.  
  46.     struct notifier_block ipcns_nb;
  47. };
  48.  
  49. extern struct ipc_namespace init_ipc_ns;
  50. extern atomic_t nr_ipc_ns;
  51.  
  52. #ifdef CONFIG_SYSVIPC
  53. #define INIT_IPC_NS(ns)        .ns        = &init_ipc_ns,
  54.  
  55. extern int register_ipcns_notifier(struct ipc_namespace *);
  56. extern int cond_register_ipcns_notifier(struct ipc_namespace *);
  57. extern void unregister_ipcns_notifier(struct ipc_namespace *);
  58. extern int ipcns_notify(unsigned long);
  59.  
  60. #else /* CONFIG_SYSVIPC */
  61. #define INIT_IPC_NS(ns)
  62. #endif /* CONFIG_SYSVIPC */
  63.  
  64. #if defined(CONFIG_SYSVIPC) && defined(CONFIG_IPC_NS)
  65. extern void free_ipc_ns(struct kref *kref);
  66. extern struct ipc_namespace *copy_ipcs(unsigned long flags,
  67.                        struct ipc_namespace *ns);
  68. extern void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids,
  69.               void (*free)(struct ipc_namespace *,
  70.                    struct kern_ipc_perm *));
  71.  
  72. static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns)
  73. {
  74.     if (ns)
  75.         kref_get(&ns->kref);
  76.     return ns;
  77. }
  78.  
  79. static inline void put_ipc_ns(struct ipc_namespace *ns)
  80. {
  81.     kref_put(&ns->kref, free_ipc_ns);
  82. }
  83. #else
  84. static inline struct ipc_namespace *copy_ipcs(unsigned long flags,
  85.         struct ipc_namespace *ns)
  86. {
  87.     if (flags & CLONE_NEWIPC)
  88.         return ERR_PTR(-EINVAL);
  89.  
  90.     return ns;
  91. }
  92.  
  93. static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns)
  94. {
  95.     return ns;
  96. }
  97.  
  98. static inline void put_ipc_ns(struct ipc_namespace *ns)
  99. {
  100. }
  101. #endif
  102. #endif
  103.