]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - include/linux/ipc.h
mm: share PG_readahead and PG_reclaim
[karo-tx-linux.git] / include / linux / ipc.h
index b291189737e747178b664d1d312e8b737442d790..3fd3ddd5f0d9e4bb885367f8de6fde50dc00918d 100644 (file)
@@ -51,6 +51,9 @@ struct ipc_perm
 
 #ifdef __KERNEL__
 
+#include <linux/kref.h>
+#include <linux/spinlock.h>
+
 #define IPCMNI 32768  /* <= MAX_INT limit for ipc arrays (including sysctl changes) */
 
 /* used by in-kernel data structures */
@@ -68,8 +71,56 @@ struct kern_ipc_perm
        void            *security;
 };
 
-#endif /* __KERNEL__ */
+struct ipc_ids;
+struct ipc_namespace {
+       struct kref     kref;
+       struct ipc_ids  *ids[3];
 
-#endif /* _LINUX_IPC_H */
+       int             sem_ctls[4];
+       int             used_sems;
+
+       int             msg_ctlmax;
+       int             msg_ctlmnb;
+       int             msg_ctlmni;
 
+       size_t          shm_ctlmax;
+       size_t          shm_ctlall;
+       int             shm_ctlmni;
+       int             shm_tot;
+};
+
+extern struct ipc_namespace init_ipc_ns;
+
+#ifdef CONFIG_SYSVIPC
+#define INIT_IPC_NS(ns)                .ns             = &init_ipc_ns,
+extern void free_ipc_ns(struct kref *kref);
+extern struct ipc_namespace *copy_ipcs(unsigned long flags,
+                                               struct ipc_namespace *ns);
+#else
+#define INIT_IPC_NS(ns)
+static inline struct ipc_namespace *copy_ipcs(unsigned long flags,
+                                               struct ipc_namespace *ns)
+{
+       return ns;
+}
+#endif
 
+static inline struct ipc_namespace *get_ipc_ns(struct ipc_namespace *ns)
+{
+#ifdef CONFIG_SYSVIPC
+       if (ns)
+               kref_get(&ns->kref);
+#endif
+       return ns;
+}
+
+static inline void put_ipc_ns(struct ipc_namespace *ns)
+{
+#ifdef CONFIG_SYSVIPC
+       kref_put(&ns->kref, free_ipc_ns);
+#endif
+}
+
+#endif /* __KERNEL__ */
+
+#endif /* _LINUX_IPC_H */