aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/linux-headers/linux/shm.h
blob: a3133dc5aa6fd384edef9912d11bbc1120217cc1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 
#ifndef _LINUX_SHM_H_ 
#define _LINUX_SHM_H_ 
 
#include <linux/ipc.h> 
#include <linux/errno.h> 
#include <asm-generic/hugetlb_encode.h> 
#include <unistd.h> 
 
/* 
 * SHMMNI, SHMMAX and SHMALL are default upper limits which can be 
 * modified by sysctl. The SHMMAX and SHMALL values have been chosen to 
 * be as large possible without facilitating scenarios where userspace 
 * causes overflows when adjusting the limits via operations of the form 
 * "retrieve current limit; add X; update limit". It is therefore not 
 * advised to make SHMMAX and SHMALL any larger. These limits are 
 * suitable for both 32 and 64-bit systems. 
 */ 
#define SHMMIN 1			 /* min shared seg size (bytes) */ 
#define SHMMNI 4096			 /* max num of segs system wide */ 
#define SHMMAX (ULONG_MAX - (1UL << 24)) /* max shared seg size (bytes) */ 
#define SHMALL (ULONG_MAX - (1UL << 24)) /* max shm system wide (pages) */ 
#define SHMSEG SHMMNI			 /* max shared segs per process */ 
 
/* Obsolete, used only for backwards compatibility and libc5 compiles */ 
struct shmid_ds { 
	struct ipc_perm		shm_perm;	/* operation perms */ 
	int			shm_segsz;	/* size of segment (bytes) */ 
	__kernel_old_time_t	shm_atime;	/* last attach time */ 
	__kernel_old_time_t	shm_dtime;	/* last detach time */ 
	__kernel_old_time_t	shm_ctime;	/* last change time */ 
	__kernel_ipc_pid_t	shm_cpid;	/* pid of creator */ 
	__kernel_ipc_pid_t	shm_lpid;	/* pid of last operator */ 
	unsigned short		shm_nattch;	/* no. of current attaches */ 
	unsigned short 		shm_unused;	/* compatibility */ 
	void 			*shm_unused2;	/* ditto - used by DIPC */ 
	void			*shm_unused3;	/* unused */ 
}; 
 
/* Include the definition of shmid64_ds and shminfo64 */ 
#include <asm/shmbuf.h> 
 
/* 
 * shmget() shmflg values. 
 */ 
/* The bottom nine bits are the same as open(2) mode flags */ 
#define SHM_R		0400	/* or S_IRUGO from <linux/stat.h> */ 
#define SHM_W		0200	/* or S_IWUGO from <linux/stat.h> */ 
/* Bits 9 & 10 are IPC_CREAT and IPC_EXCL */ 
#define SHM_HUGETLB	04000	/* segment will use huge TLB pages */ 
#define SHM_NORESERVE	010000	/* don't check for reservations */ 
 
/* 
 * Huge page size encoding when SHM_HUGETLB is specified, and a huge page 
 * size other than the default is desired.  See hugetlb_encode.h 
 */ 
#define SHM_HUGE_SHIFT	HUGETLB_FLAG_ENCODE_SHIFT 
#define SHM_HUGE_MASK	HUGETLB_FLAG_ENCODE_MASK 
 
#define SHM_HUGE_64KB	HUGETLB_FLAG_ENCODE_64KB 
#define SHM_HUGE_512KB	HUGETLB_FLAG_ENCODE_512KB 
#define SHM_HUGE_1MB	HUGETLB_FLAG_ENCODE_1MB 
#define SHM_HUGE_2MB	HUGETLB_FLAG_ENCODE_2MB 
#define SHM_HUGE_8MB	HUGETLB_FLAG_ENCODE_8MB 
#define SHM_HUGE_16MB	HUGETLB_FLAG_ENCODE_16MB 
#define SHM_HUGE_32MB	HUGETLB_FLAG_ENCODE_32MB 
#define SHM_HUGE_256MB	HUGETLB_FLAG_ENCODE_256MB 
#define SHM_HUGE_512MB	HUGETLB_FLAG_ENCODE_512MB 
#define SHM_HUGE_1GB	HUGETLB_FLAG_ENCODE_1GB 
#define SHM_HUGE_2GB	HUGETLB_FLAG_ENCODE_2GB 
#define SHM_HUGE_16GB	HUGETLB_FLAG_ENCODE_16GB 
 
/* 
 * shmat() shmflg values 
 */ 
#define	SHM_RDONLY	010000	/* read-only access */ 
#define	SHM_RND		020000	/* round attach address to SHMLBA boundary */ 
#define	SHM_REMAP	040000	/* take-over region on attach */ 
#define	SHM_EXEC	0100000	/* execution access */ 
 
/* super user shmctl commands */ 
#define SHM_LOCK 	11 
#define SHM_UNLOCK 	12 
 
/* ipcs ctl commands */ 
#define SHM_STAT	13 
#define SHM_INFO	14 
#define SHM_STAT_ANY    15 
 
/* Obsolete, used only for backwards compatibility */ 
struct	shminfo { 
	int shmmax; 
	int shmmin; 
	int shmmni; 
	int shmseg; 
	int shmall; 
}; 
 
struct shm_info { 
	int used_ids; 
	__kernel_ulong_t shm_tot;	/* total allocated shm */ 
	__kernel_ulong_t shm_rss;	/* total resident shm */ 
	__kernel_ulong_t shm_swp;	/* total swapped shm */ 
	__kernel_ulong_t swap_attempts; 
	__kernel_ulong_t swap_successes; 
}; 
 
 
#endif /* _LINUX_SHM_H_ */