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_s (shp, sizeof (*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_s (shp->shm_pages, numpages * sizeof (ulong)); |
shp | 191 | ipc/shm.c | kfree_s (shp, sizeof (*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 | 394 | ipc/shm.c | shp = shm_segs[id = shmid % SHMMNI]; |
shp | 395 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID) |
shp | 409 | ipc/shm.c | addr = (addr - shp->shm_segsz) & PAGE_MASK; |
shp | 416 | ipc/shm.c | if ((addr > current->start_stack - 16384 - PAGE_SIZE*shp->shm_npages)) |
shp | 422 | ipc/shm.c | if (addr + shp->shm_segsz >= shmd->start && |
shp | 423 | ipc/shm.c | addr + shp->shm_segsz < shmd->end) |
shp | 427 | ipc/shm.c | if (ipcperms(&shp->shm_perm, shmflg & SHM_RDONLY ? S_IRUGO : S_IRUGO|S_IWUGO)) |
shp | 429 | ipc/shm.c | if (shp->shm_perm.seq != shmid / SHMMNI) |
shp | 435 | ipc/shm.c | if ((shp != shm_segs[id]) || (shp->shm_perm.seq != shmid / SHMMNI)) { |
shp | 442 | ipc/shm.c | shmd->end = addr + shp->shm_npages * PAGE_SIZE; |
shp | 445 | ipc/shm.c | shp->shm_nattch++; /* prevent destruction */ |
shp | 453 | ipc/shm.c | if (--shp->shm_nattch <= 0 && shp->shm_perm.mode & SHM_DEST) |
shp | 461 | ipc/shm.c | shmd->seg_next = shp->attaches; |
shp | 462 | ipc/shm.c | shp->attaches = shmd; |
shp | 463 | ipc/shm.c | shp->shm_lpid = current->pid; |
shp | 464 | ipc/shm.c | shp->shm_atime = CURRENT_TIME; |
shp | 477 | ipc/shm.c | struct shmid_ds *shp; |
shp | 481 | ipc/shm.c | shp = shm_segs[id]; |
shp | 483 | ipc/shm.c | for (shmdp = &shp->attaches; *shmdp; shmdp = &(*shmdp)->seg_next) |
shp | 491 | ipc/shm.c | unmap_page_range (shmd->start, shp->shm_segsz); /* sleeps */ |
shp | 493 | ipc/shm.c | shp->shm_lpid = current->pid; |
shp | 494 | ipc/shm.c | shp->shm_dtime = CURRENT_TIME; |
shp | 495 | ipc/shm.c | if (--shp->shm_nattch <= 0 && shp->shm_perm.mode & SHM_DEST) |
shp | 535 | ipc/shm.c | struct shmid_ds *shp; |
shp | 559 | ipc/shm.c | shp = shm_segs[id]; |
shp | 560 | ipc/shm.c | if (shp == IPC_UNUSED) { |
shp | 564 | ipc/shm.c | shmd->seg_next = shp->attaches; |
shp | 565 | ipc/shm.c | shp->attaches = shmd; |
shp | 566 | ipc/shm.c | shp->shm_nattch++; |
shp | 567 | ipc/shm.c | shp->shm_atime = CURRENT_TIME; |
shp | 568 | ipc/shm.c | shp->shm_lpid = current->pid; |
shp | 580 | ipc/shm.c | struct shmid_ds *shp; |
shp | 588 | ipc/shm.c | shp = shm_segs[id]; |
shp | 589 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID) { |
shp | 594 | ipc/shm.c | if (idx >= shp->shm_npages) { |
shp | 599 | ipc/shm.c | if (!(shp->shm_pages[idx] & PAGE_PRESENT)) { |
shp | 605 | ipc/shm.c | if (shp->shm_pages[idx] & PAGE_PRESENT) { |
shp | 609 | ipc/shm.c | if (shp->shm_pages[idx]) { |
shp | 610 | ipc/shm.c | read_swap_page (shp->shm_pages[idx], (char *) page); |
shp | 611 | ipc/shm.c | if (shp->shm_pages[idx] & PAGE_PRESENT) { |
shp | 615 | ipc/shm.c | swap_free (shp->shm_pages[idx]); |
shp | 619 | ipc/shm.c | shp->shm_pages[idx] = page | (PAGE_SHARED | PAGE_DIRTY); |
shp | 625 | ipc/shm.c | page = shp->shm_pages[idx]; |
shp | 642 | ipc/shm.c | struct shmid_ds *shp; |
shp | 653 | ipc/shm.c | shp = shm_segs[swap_id]; |
shp | 654 | ipc/shm.c | if (shp == IPC_UNUSED || shp == IPC_NOID || shp->shm_perm.mode & SHM_LOCKED ) { |
shp | 664 | ipc/shm.c | if (idx >= shp->shm_npages) { |
shp | 671 | ipc/shm.c | page = shp->shm_pages[idx]; |
shp | 682 | ipc/shm.c | for (shmd = shp->attaches; shmd; shmd = shmd->seg_next) { |
shp | 719 | ipc/shm.c | shp->shm_pages[idx] = swap_nr; |