tag | line | file | source code |
shp | 51 | ipc/shm.c | struct shmid_ds *shp; |
shp | 54 | ipc/shm.c | while ((shp = shm_segs[id]) == IPC_NOID) |
shp | 56 | ipc/shm.c | if (shp == IPC_UNUSED) |
shp | 58 | ipc/shm.c | if (key == shp->shm_perm.key) |
shp | 69 | ipc/shm.c | struct shmid_ds *shp; |
shp | 85 | ipc/shm.c | shp = (struct shmid_ds *) kmalloc (sizeof (*shp), GFP_KERNEL); |
shp | 86 | ipc/shm.c | if (!shp) { |
shp | 93 | ipc/shm.c | shp->shm_pages = (ulong *) kmalloc (numpages*sizeof(ulong),GFP_KERNEL); |
shp | 94 | ipc/shm.c | if (!shp->shm_pages) { |
shp | 98 | ipc/shm.c | kfree(shp); |
shp | 102 | ipc/shm.c | for (i=0; i< numpages; shp->shm_pages[i++] = 0); |
shp | 104 | ipc/shm.c | shp->shm_perm.key = key; |
shp | 105 | ipc/shm.c | shp->shm_perm.mode = (shmflg & S_IRWXUGO); |
shp | 106 | ipc/shm.c | shp->shm_perm.cuid = shp->shm_perm.uid = current->euid; |
shp | 107 | ipc/shm.c | shp->shm_perm.cgid = shp->shm_perm.gid = current->egid; |
shp | 108 | ipc/shm.c | shp->shm_perm.seq = shm_seq; |
shp | 109 | ipc/shm.c | shp->shm_segsz = size; |
shp | 110 | ipc/shm.c | shp->shm_cpid = current->pid; |
shp | 111 | ipc/shm.c | shp->attaches = NULL; |
shp | 112 | ipc/shm.c | shp->shm_lpid = shp->shm_nattch = 0; |
shp | 113 | ipc/shm.c | shp->shm_atime = shp->shm_dtime = 0; |
shp | 114 | ipc/shm.c | shp->shm_ctime = CURRENT_TIME; |
shp | 115 | ipc/shm.c | shp->shm_npages = numpages; |
shp | 119 | ipc/shm.c | shm_segs[id] = shp; |
shp | 128 | ipc/shm.c | struct shmid_ds *shp; |
shp | 142 | ipc/shm.c | shp = shm_segs[id]; |
shp | 143 | ipc/shm.c | if (shp->shm_perm.mode & SHM_DEST) |
shp | 145 | ipc/shm.c | if (size > shp->shm_segsz) |
shp | 147 | ipc/shm.c | if (ipcperms (&shp->shm_perm, shmflg)) |
shp | 149 | ipc/shm.c | return shp->shm_perm.seq*SHMMNI + id; |
shp | 158 | ipc/shm.c | struct shmid_ds *shp; |
shp | 162 | ipc/shm.c | shp = shm_segs[id]; |
shp | 163 | ipc/shm.c | if (shp == IPC_NOID || shp == IPC_UNUSED) { |
shp | 167 | ipc/shm.c | shp->shm_perm.seq++; /* for shmat */ |
shp | 168 | ipc/shm.c | numpages = shp->shm_npages; |
shp | 174 | ipc/shm.c | if (!shp->shm_pages) { |
shp | 179 | ipc/shm.c | if (!(page = shp->shm_pages[i])) |
shp | 189 | ipc/shm.c | kfree(shp->shm_pages); |
shp | 191 | ipc/shm.c | kfree(shp); |
shp | 197 | ipc/shm.c | struct shmid_ds *shp, tbuf; |
shp | 249 | ipc/shm.c | err = verify_area (VERIFY_WRITE, buf, sizeof (*shp)); |
shp | 254 | ipc/shm.c | shp = shm_segs[shmid]; |
shp | 255 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID) |
shp | 257 | ipc/shm.c | if (ipcperms (&shp->shm_perm, S_IRUGO)) |
shp | 259 | ipc/shm.c | id = shmid + shp->shm_perm.seq * SHMMNI; |
shp | 260 | ipc/shm.c | memcpy_tofs (buf, shp, sizeof(*shp)); |
shp | 264 | ipc/shm.c | shp = shm_segs[id = shmid % SHMMNI]; |
shp | 265 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID) |
shp | 267 | ipc/shm.c | ipcp = &shp->shm_perm; |
shp | 294 | ipc/shm.c | err = verify_area (VERIFY_WRITE, buf, sizeof (*shp)); |
shp | 297 | ipc/shm.c | memcpy_tofs (buf, shp, sizeof(*shp)); |
shp | 300 | ipc/shm.c | if (suser() || current->euid == shp->shm_perm.uid || |
shp | 301 | ipc/shm.c | current->euid == shp->shm_perm.cuid) { |
shp | 306 | ipc/shm.c | shp->shm_ctime = CURRENT_TIME; |
shp | 311 | ipc/shm.c | if (suser() || current->euid == shp->shm_perm.uid || |
shp | 312 | ipc/shm.c | current->euid == shp->shm_perm.cuid) { |
shp | 313 | ipc/shm.c | shp->shm_perm.mode |= SHM_DEST; |
shp | 314 | ipc/shm.c | if (shp->shm_nattch <= 0) |
shp | 385 | ipc/shm.c | struct shmid_ds *shp; |
shp | 400 | ipc/shm.c | shp = shm_segs[id = shmid % SHMMNI]; |
shp | 401 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID) |
shp | 415 | ipc/shm.c | addr = (addr - shp->shm_segsz) & PAGE_MASK; |
shp | 422 | ipc/shm.c | if ((addr > current->mm->start_stack - 16384 - PAGE_SIZE*shp->shm_npages)) |
shp | 428 | ipc/shm.c | if (addr + shp->shm_segsz >= shmd->start && |
shp | 429 | ipc/shm.c | addr + shp->shm_segsz < shmd->end) |
shp | 433 | ipc/shm.c | if (ipcperms(&shp->shm_perm, shmflg & SHM_RDONLY ? S_IRUGO : S_IRUGO|S_IWUGO)) |
shp | 435 | ipc/shm.c | if (shp->shm_perm.seq != shmid / SHMMNI) |
shp | 441 | ipc/shm.c | if ((shp != shm_segs[id]) || (shp->shm_perm.seq != shmid / SHMMNI)) { |
shp | 448 | ipc/shm.c | shmd->end = addr + shp->shm_npages * PAGE_SIZE; |
shp | 451 | ipc/shm.c | shp->shm_nattch++; /* prevent destruction */ |
shp | 459 | ipc/shm.c | if (--shp->shm_nattch <= 0 && shp->shm_perm.mode & SHM_DEST) |
shp | 467 | ipc/shm.c | shmd->seg_next = shp->attaches; |
shp | 468 | ipc/shm.c | shp->attaches = shmd; |
shp | 469 | ipc/shm.c | shp->shm_lpid = current->pid; |
shp | 470 | ipc/shm.c | shp->shm_atime = CURRENT_TIME; |
shp | 485 | ipc/shm.c | struct shmid_ds *shp; |
shp | 489 | ipc/shm.c | shp = shm_segs[id]; |
shp | 491 | ipc/shm.c | for (shmdp = &shp->attaches; *shmdp; shmdp = &(*shmdp)->seg_next) |
shp | 499 | ipc/shm.c | unmap_page_range (shmd->start, shp->shm_segsz); /* sleeps */ |
shp | 501 | ipc/shm.c | shp->shm_lpid = current->pid; |
shp | 502 | ipc/shm.c | shp->shm_dtime = CURRENT_TIME; |
shp | 503 | ipc/shm.c | if (--shp->shm_nattch <= 0 && shp->shm_perm.mode & SHM_DEST) |
shp | 543 | ipc/shm.c | struct shmid_ds *shp; |
shp | 567 | ipc/shm.c | shp = shm_segs[id]; |
shp | 568 | ipc/shm.c | if (shp == IPC_UNUSED) { |
shp | 572 | ipc/shm.c | shmd->seg_next = shp->attaches; |
shp | 573 | ipc/shm.c | shp->attaches = shmd; |
shp | 574 | ipc/shm.c | shp->shm_nattch++; |
shp | 575 | ipc/shm.c | shp->shm_atime = CURRENT_TIME; |
shp | 576 | ipc/shm.c | shp->shm_lpid = current->pid; |
shp | 588 | ipc/shm.c | struct shmid_ds *shp; |
shp | 596 | ipc/shm.c | shp = shm_segs[id]; |
shp | 597 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID) { |
shp | 602 | ipc/shm.c | if (idx >= shp->shm_npages) { |
shp | 607 | ipc/shm.c | if (!(shp->shm_pages[idx] & PAGE_PRESENT)) { |
shp | 613 | ipc/shm.c | if (shp->shm_pages[idx] & PAGE_PRESENT) { |
shp | 617 | ipc/shm.c | if (shp->shm_pages[idx]) { |
shp | 618 | ipc/shm.c | read_swap_page (shp->shm_pages[idx], (char *) page); |
shp | 619 | ipc/shm.c | if (shp->shm_pages[idx] & PAGE_PRESENT) { |
shp | 623 | ipc/shm.c | swap_free (shp->shm_pages[idx]); |
shp | 627 | ipc/shm.c | shp->shm_pages[idx] = page | (PAGE_SHARED | PAGE_DIRTY); |
shp | 633 | ipc/shm.c | page = shp->shm_pages[idx]; |
shp | 650 | ipc/shm.c | struct shmid_ds *shp; |
shp | 661 | ipc/shm.c | shp = shm_segs[swap_id]; |
shp | 662 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID || shp->shm_perm.mode & SHM_LOCKED ) { |
shp | 672 | ipc/shm.c | if (idx >= shp->shm_npages) { |
shp | 679 | ipc/shm.c | page = shp->shm_pages[idx]; |
shp | 690 | ipc/shm.c | for (shmd = shp->attaches; shmd; shmd = shmd->seg_next) { |
shp | 727 | ipc/shm.c | shp->shm_pages[idx] = swap_nr; |