tag | line | file | source code |
shmd | 21 | ipc/shm.c | static int shm_map (struct vm_area_struct *shmd, int remap); |
shmd | 23 | ipc/shm.c | static void shm_open (struct vm_area_struct *shmd); |
shmd | 24 | ipc/shm.c | static void shm_close (struct vm_area_struct *shmd); |
shmd | 375 | ipc/shm.c | static int shm_map (struct vm_area_struct *shmd, int remap) |
shmd | 379 | ipc/shm.c | unsigned long page_dir = shmd->vm_task->tss.cr3; |
shmd | 383 | ipc/shm.c | for (tmp = shmd->vm_start; tmp < shmd->vm_end; tmp += PAGE_SIZE) { |
shmd | 396 | ipc/shm.c | do_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start); |
shmd | 399 | ipc/shm.c | insert_vm_struct(current, shmd); |
shmd | 403 | ipc/shm.c | for (tmp = shmd->vm_start; tmp < shmd->vm_end; tmp += PAGE_SIZE) { |
shmd | 427 | ipc/shm.c | shm_sgn = shmd->vm_pte + ((shmd->vm_offset >> PAGE_SHIFT) << SHM_IDX_SHIFT); |
shmd | 428 | ipc/shm.c | for (tmp = shmd->vm_start; tmp < shmd->vm_end; tmp += PAGE_SIZE, |
shmd | 446 | ipc/shm.c | struct vm_area_struct *shmd; |
shmd | 484 | ipc/shm.c | for (shmd = current->mm->mmap; shmd; shmd = shmd->vm_next) |
shmd | 485 | ipc/shm.c | if (!(addr >= shmd->vm_end || addr + shp->shm_segsz <= shmd->vm_start)) { |
shmd | 496 | ipc/shm.c | shmd = (struct vm_area_struct *) kmalloc (sizeof(*shmd), GFP_KERNEL); |
shmd | 497 | ipc/shm.c | if (!shmd) |
shmd | 500 | ipc/shm.c | kfree(shmd); |
shmd | 504 | ipc/shm.c | shmd->vm_pte = (SHM_SWP_TYPE << 1) | (id << SHM_ID_SHIFT) | |
shmd | 506 | ipc/shm.c | shmd->vm_start = addr; |
shmd | 507 | ipc/shm.c | shmd->vm_end = addr + shp->shm_npages * PAGE_SIZE; |
shmd | 508 | ipc/shm.c | shmd->vm_task = current; |
shmd | 509 | ipc/shm.c | shmd->vm_page_prot = (shmflg & SHM_RDONLY) ? PAGE_READONLY : PAGE_SHARED; |
shmd | 510 | ipc/shm.c | shmd->vm_flags = VM_SHM | VM_MAYSHARE | VM_SHARED |
shmd | 513 | ipc/shm.c | shmd->vm_share = NULL; |
shmd | 514 | ipc/shm.c | shmd->vm_inode = NULL; |
shmd | 515 | ipc/shm.c | shmd->vm_offset = 0; |
shmd | 516 | ipc/shm.c | shmd->vm_ops = &shm_vm_ops; |
shmd | 519 | ipc/shm.c | if ((err = shm_map (shmd, shmflg & SHM_REMAP))) { |
shmd | 522 | ipc/shm.c | kfree(shmd); |
shmd | 526 | ipc/shm.c | shmd->vm_share = shp->attaches; |
shmd | 527 | ipc/shm.c | shp->attaches = shmd; |
shmd | 538 | ipc/shm.c | static void shm_open (struct vm_area_struct *shmd) |
shmd | 543 | ipc/shm.c | id = (shmd->vm_pte >> SHM_ID_SHIFT) & SHM_ID_MASK; |
shmd | 549 | ipc/shm.c | shmd->vm_share = shp->attaches; |
shmd | 550 | ipc/shm.c | shp->attaches = shmd; |
shmd | 562 | ipc/shm.c | static void shm_close (struct vm_area_struct *shmd) |
shmd | 568 | ipc/shm.c | unmap_page_range (shmd->vm_start, shmd->vm_end - shmd->vm_start); |
shmd | 571 | ipc/shm.c | id = (shmd->vm_pte >> SHM_ID_SHIFT) & SHM_ID_MASK; |
shmd | 574 | ipc/shm.c | if (*shmdp == shmd) { |
shmd | 575 | ipc/shm.c | *shmdp = shmd->vm_share; |
shmd | 580 | ipc/shm.c | shmd->vm_task->pid, shmd->vm_start, shmd->vm_end, |
shmd | 581 | ipc/shm.c | shmd->vm_flags & VM_READ ? 'r' : '-', |
shmd | 582 | ipc/shm.c | shmd->vm_flags & VM_WRITE ? 'w' : '-', |
shmd | 583 | ipc/shm.c | shmd->vm_flags & VM_EXEC ? 'x' : '-', |
shmd | 584 | ipc/shm.c | shmd->vm_flags & VM_SHARED ? 's' : 'p', |
shmd | 585 | ipc/shm.c | shmd->vm_offset, shmd->vm_pte); |
shmd | 600 | ipc/shm.c | struct vm_area_struct *shmd, *shmdnext; |
shmd | 602 | ipc/shm.c | for (shmd = current->mm->mmap; shmd; shmd = shmdnext) { |
shmd | 603 | ipc/shm.c | shmdnext = shmd->vm_next; |
shmd | 604 | ipc/shm.c | if (shmd->vm_ops == &shm_vm_ops |
shmd | 605 | ipc/shm.c | && shmd->vm_start - shmd->vm_offset == (ulong) shmaddr) |
shmd | 606 | ipc/shm.c | do_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start); |
shmd | 678 | ipc/shm.c | struct vm_area_struct *shmd; |
shmd | 717 | ipc/shm.c | for (shmd = shp->attaches; shmd; shmd = shmd->vm_share) { |
shmd | 719 | ipc/shm.c | if ((shmd->vm_pte >> SHM_ID_SHIFT & SHM_ID_MASK) != id) { |
shmd | 720 | ipc/shm.c | printk ("shm_swap: id=%ld does not match shmd->vm_pte.id=%ld\n", id, shmd->vm_pte >> SHM_ID_SHIFT & SHM_ID_MASK); |
shmd | 723 | ipc/shm.c | tmp = shmd->vm_start + (idx << PAGE_SHIFT) - shmd->vm_offset; |
shmd | 724 | ipc/shm.c | if (!(tmp >= shmd->vm_start && tmp < shmd->vm_end)) |
shmd | 726 | ipc/shm.c | pte = PAGE_DIR_OFFSET(shmd->vm_task->tss.cr3,tmp); |
shmd | 729 | ipc/shm.c | id, shmd->vm_start, idx); |
shmd | 742 | ipc/shm.c | tmp = shmd->vm_pte | idx << SHM_IDX_SHIFT; |
shmd | 745 | ipc/shm.c | shmd->vm_task->mm->rss--; |