shminfo
struct shminfo shminfo = {
TUNABLE_LONG("kern.ipc.shmmin", &shminfo.shmmin);
TUNABLE_LONG("kern.ipc.shmmni", &shminfo.shmmni);
TUNABLE_LONG("kern.ipc.shmseg", &shminfo.shmseg);
TUNABLE_LONG("kern.ipc.shmmaxpgs", &shminfo.shmall);
SYSCTL_LONG(_kern_ipc, OID_AUTO, shmmax, CTLFLAG_RW, &shminfo.shmmax, 0,
SYSCTL_LONG(_kern_ipc, OID_AUTO, shmmin, CTLFLAG_RW, &shminfo.shmmin, 0,
SYSCTL_LONG(_kern_ipc, OID_AUTO, shmmni, CTLFLAG_RD, &shminfo.shmmni, 0,
SYSCTL_LONG(_kern_ipc, OID_AUTO, shmseg, CTLFLAG_RW, &shminfo.shmseg, 0,
SYSCTL_LONG(_kern_ipc, OID_AUTO, shmall, CTLFLAG_RW, &shminfo.shmall, 0,
for (i = 0; i < shminfo.shmseg; i++, shmmap_s++) {
if (i == shminfo.shmseg)
size = shminfo.shmseg * sizeof(struct shmmap_state);
for (i = 0; i < shminfo.shmseg; i++) {
for (i = 0; i < shminfo.shmseg; i++) {
if (i >= shminfo.shmseg) {
if (uap->size < shminfo.shmmin || uap->size > shminfo.shmmax)
if (shm_nused >= shminfo.shmmni) /* any shmids left? */
if (shm_committed + btoc(size) > shminfo.shmall)
size = shminfo.shmseg * sizeof(struct shmmap_state);
for (i = 0; i < shminfo.shmseg; i++, shmmap_s++) {
for (i = 0, shm = base; i < shminfo.shmseg; i++, shm++) {
if (shmalloced >= shminfo.shmmni)
newsegs = kmalloc(shminfo.shmmni * sizeof(*newsegs), M_SHM, M_WAITOK);
for (; i < shminfo.shmmni; i++) {
shmalloced = shminfo.shmmni;
if (shminfo.shmall == 0)
shminfo.shmall = (size_t)vmstats.v_page_count * 2 / 3;
shminfo.shmmax = shminfo.shmall * PAGE_SIZE;
shmalloced = shminfo.shmmni;
extern struct shminfo shminfo;
kvm_read(kd, symbols[X_SHMINFO].n_value, &shminfo, sizeof(shminfo))) {
shminfo.shmmax);
shminfo.shmmin);
shminfo.shmmni);
shminfo.shmseg);
shminfo.shmall);
xshmids = malloc(sizeof(struct shmid_ds) * shminfo.shmmni);
shminfo.shmmni);
for (i = 0; i < shminfo.shmmni; i += 1) {
struct shminfo shminfo;
if ((long)shmget_msg->size < shminfo.shmmin)
if (shm_nused >= shminfo.shmmni) /* any shmids left? */
static struct shminfo shminfo = {
shmalloced = shminfo.shmmni;