linux/include/linux/shm.h
<<
>>
Prefs
   1#ifndef _LINUX_SHM_H_
   2#define _LINUX_SHM_H_
   3
   4#include <linux/ipc.h>
   5#include <linux/errno.h>
   6#ifdef __KERNEL__
   7#include <asm/page.h>
   8#else
   9#include <unistd.h>
  10#endif
  11
  12/*
  13 * SHMMAX, SHMMNI and SHMALL are upper limits are defaults which can
  14 * be increased by sysctl
  15 */
  16
  17#define SHMMAX 0x2000000                 /* max shared seg size (bytes) */
  18#define SHMMIN 1                         /* min shared seg size (bytes) */
  19#define SHMMNI 4096                      /* max num of segs system wide */
  20#ifdef __KERNEL__
  21#define SHMALL (SHMMAX/PAGE_SIZE*(SHMMNI/16)) /* max shm system wide (pages) */
  22#else
  23#define SHMALL (SHMMAX/getpagesize()*(SHMMNI/16))
  24#endif
  25#define SHMSEG SHMMNI                    /* max shared segs per process */
  26
  27#ifdef __KERNEL__
  28#include <asm/shmparam.h>
  29#endif
  30
  31/* Obsolete, used only for backwards compatibility and libc5 compiles */
  32struct shmid_ds {
  33        struct ipc_perm         shm_perm;       /* operation perms */
  34        int                     shm_segsz;      /* size of segment (bytes) */
  35        __kernel_time_t         shm_atime;      /* last attach time */
  36        __kernel_time_t         shm_dtime;      /* last detach time */
  37        __kernel_time_t         shm_ctime;      /* last change time */
  38        __kernel_ipc_pid_t      shm_cpid;       /* pid of creator */
  39        __kernel_ipc_pid_t      shm_lpid;       /* pid of last operator */
  40        unsigned short          shm_nattch;     /* no. of current attaches */
  41        unsigned short          shm_unused;     /* compatibility */
  42        void                    *shm_unused2;   /* ditto - used by DIPC */
  43        void                    *shm_unused3;   /* unused */
  44};
  45
  46/* Include the definition of shmid64_ds and shminfo64 */
  47#include <asm/shmbuf.h>
  48
  49/* permission flag for shmget */
  50#define SHM_R           0400    /* or S_IRUGO from <linux/stat.h> */
  51#define SHM_W           0200    /* or S_IWUGO from <linux/stat.h> */
  52
  53/* mode for attach */
  54#define SHM_RDONLY      010000  /* read-only access */
  55#define SHM_RND         020000  /* round attach address to SHMLBA boundary */
  56#define SHM_REMAP       040000  /* take-over region on attach */
  57#define SHM_EXEC        0100000 /* execution access */
  58
  59/* super user shmctl commands */
  60#define SHM_LOCK        11
  61#define SHM_UNLOCK      12
  62
  63/* ipcs ctl commands */
  64#define SHM_STAT        13
  65#define SHM_INFO        14
  66
  67/* Obsolete, used only for backwards compatibility */
  68struct  shminfo {
  69        int shmmax;
  70        int shmmin;
  71        int shmmni;
  72        int shmseg;
  73        int shmall;
  74};
  75
  76struct shm_info {
  77        int used_ids;
  78        unsigned long shm_tot;  /* total allocated shm */
  79        unsigned long shm_rss;  /* total resident shm */
  80        unsigned long shm_swp;  /* total swapped shm */
  81        unsigned long swap_attempts;
  82        unsigned long swap_successes;
  83};
  84
  85#ifdef __KERNEL__
  86struct shmid_kernel /* private to the kernel */
  87{       
  88        struct kern_ipc_perm    shm_perm;
  89        struct file *           shm_file;
  90        unsigned long           shm_nattch;
  91        unsigned long           shm_segsz;
  92        time_t                  shm_atim;
  93        time_t                  shm_dtim;
  94        time_t                  shm_ctim;
  95        pid_t                   shm_cprid;
  96        pid_t                   shm_lprid;
  97        struct user_struct      *mlock_user;
  98};
  99
 100/* shm_mode upper byte flags */
 101#define SHM_DEST        01000   /* segment will be destroyed on last detach */
 102#define SHM_LOCKED      02000   /* segment will not be swapped */
 103#define SHM_HUGETLB     04000   /* segment will use huge TLB pages */
 104#define SHM_NORESERVE   010000  /* don't check for reservations */
 105
 106#ifdef CONFIG_SYSVIPC
 107long do_shmat(int shmid, char __user *shmaddr, int shmflg, unsigned long *addr);
 108extern int is_file_shm_hugepages(struct file *file);
 109#else
 110static inline long do_shmat(int shmid, char __user *shmaddr,
 111                                int shmflg, unsigned long *addr)
 112{
 113        return -ENOSYS;
 114}
 115static inline int is_file_shm_hugepages(struct file *file)
 116{
 117        return 0;
 118}
 119#endif
 120
 121#endif /* __KERNEL__ */
 122
 123#endif /* _LINUX_SHM_H_ */
 124