Print this page
OS-5223 removed shm segment is no longer available
Reviewed by: Bryan Cantrill <bryan@joyent.com>
Reviewed by: Patrick Mooney <patrick.mooney@joyent.com>
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/uts/common/sys/shm_impl.h
+++ new/usr/src/uts/common/sys/shm_impl.h
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
12 12 *
13 13 * When distributing Covered Code, include this CDDL HEADER in each
|
↓ open down ↓ |
13 lines elided |
↑ open up ↑ |
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
19 19 * CDDL HEADER END
20 20 */
21 21 /*
22 22 * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
23 23 * Use is subject to license terms.
24 + * Copyright 2016 Joyent, Inc.
24 25 */
25 26
26 27 #ifndef _SYS_SHM_IMPL_H
27 28 #define _SYS_SHM_IMPL_H
28 29
29 -#pragma ident "%Z%%M% %I% %E% SMI"
30 -
31 30 #include <sys/ipc_impl.h>
32 31 #if defined(_KERNEL) || defined(_KMEMUSER)
33 32 #include <sys/shm.h>
34 33 #include <sys/avl.h>
35 34 #include <sys/t_lock.h>
36 35 #endif
37 36
38 37 #ifdef __cplusplus
39 38 extern "C" {
40 39 #endif
41 40
42 41 /*
43 42 * shmsys system call subcodes
44 43 */
45 44 #define SHMAT 0
46 45 #define SHMCTL 1
47 46 #define SHMDT 2
48 47 #define SHMGET 3
49 48 #define SHMIDS 4
50 49
51 50 /*
52 51 * There is a shared mem id data structure (shmid_ds) for each
53 52 * segment in the system.
54 53 */
55 54 #if defined(_KERNEL) || defined(_KMEMUSER)
56 55 typedef struct kshmid {
57 56 kipc_perm_t shm_perm; /* operation permission struct */
58 57 size_t shm_segsz; /* size of segment in bytes */
59 58 struct anon_map *shm_amp; /* segment anon_map pointer */
60 59 ushort_t shm_lkcnt; /* number of times it is being locked */
61 60 pgcnt_t shm_lkpages; /* number of pages locked by shmctl */
62 61 kmutex_t shm_mlock; /* held when locking physical pages */
|
↓ open down ↓ |
22 lines elided |
↑ open up ↑ |
63 62 /* Therefore, protects p_lckcnt for */
64 63 /* pages that back shm */
65 64 pid_t shm_lpid; /* pid of last shmop */
66 65 pid_t shm_cpid; /* pid of creator */
67 66 ulong_t shm_ismattch; /* number of ISM attaches */
68 67 time_t shm_atime; /* last shmat time */
69 68 time_t shm_dtime; /* last shmdt time */
70 69 time_t shm_ctime; /* last change time */
71 70 struct sptinfo *shm_sptinfo; /* info about ISM segment */
72 71 struct seg *shm_sptseg; /* pointer to ISM segment */
73 - long shm_sptprot; /* was reserved (still a "long") */
72 + ulong_t shm_opts;
73 + /*
74 + * Composed of: sptprot (uchar_t) and
75 + * RM_PENDING flag (1 bit).
76 + */
74 77 } kshmid_t;
75 78
76 79 /*
77 80 * Segacct Flags.
78 81 */
79 82 #define SHMSA_ISM 1 /* uses shared page table */
80 83
84 +/*
85 + * shm_opts definitions
86 + * Low byte in shm_opts is used for sptprot (see PROT_ALL). The upper bits are
87 + * used for additional options.
88 + */
89 +#define SHM_PROT_MASK 0xff
90 +#define SHM_RM_PENDING 0x100
91 +
81 92 typedef struct sptinfo {
82 93 struct as *sptas; /* dummy as ptr. for spt segment */
83 94 } sptinfo_t;
84 95
85 96 /*
86 97 * Protected by p->p_lock
87 98 */
88 99 typedef struct segacct {
89 100 avl_node_t sa_tree;
90 101 caddr_t sa_addr;
91 102 size_t sa_len;
92 103 ulong_t sa_flags;
93 104 kshmid_t *sa_id;
94 105 } segacct_t;
95 106
96 107 /*
97 108 * Error codes for shmgetid().
98 109 */
99 110 #define SHMID_NONE (-1)
100 111 #define SHMID_FREE (-2)
101 112
102 113 extern void shminit(void);
103 114 extern void shmfork(struct proc *, struct proc *);
104 115 extern void shmexit(struct proc *);
105 116 extern int shmgetid(struct proc *, caddr_t);
106 117
107 118 #endif /* _KERNEL */
108 119
109 120 #if defined(_SYSCALL32)
110 121 /*
111 122 * LP64 view of the ILP32 shmid_ds structure
112 123 */
113 124 struct shmid_ds32 {
114 125 struct ipc_perm32 shm_perm; /* operation permission struct */
115 126 size32_t shm_segsz; /* size of segment in bytes */
116 127 caddr32_t shm_amp; /* segment anon_map pointer */
117 128 uint16_t shm_lkcnt; /* number of times it is being locked */
118 129 pid32_t shm_lpid; /* pid of last shmop */
119 130 pid32_t shm_cpid; /* pid of creator */
120 131 uint32_t shm_nattch; /* number of attaches */
121 132 uint32_t shm_cnattch; /* number of ISM attaches */
122 133 time32_t shm_atime; /* last shmat time */
123 134 int32_t shm_pad1; /* reserved for time_t expansion */
124 135 time32_t shm_dtime; /* last shmdt time */
125 136 int32_t shm_pad2; /* reserved for time_t expansion */
126 137 time32_t shm_ctime; /* last change time */
127 138 int32_t shm_pad3; /* reserved for time_t expansion */
128 139 int32_t shm_pad4[4]; /* reserve area */
129 140 };
130 141 #endif
131 142
132 143 #ifdef __cplusplus
133 144 }
134 145 #endif
135 146
136 147 #endif /* _SYS_SHM_IMPL_H */
|
↓ open down ↓ |
46 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX