tag | line | file | source code |
shmd | 23 | ipc/shm.c | static int shm_map (struct vm_area_struct *shmd); |
shmd | 25 | ipc/shm.c | static void shm_open (struct vm_area_struct *shmd); |
shmd | 26 | ipc/shm.c | static void shm_close (struct vm_area_struct *shmd); |
shmd | 376 | ipc/shm.c | static inline void insert_attach (struct shmid_ds * shp, struct vm_area_struct * shmd) |
shmd | 381 | ipc/shm.c | shmd->vm_next_share = attaches; |
shmd | 382 | ipc/shm.c | shmd->vm_prev_share = attaches->vm_prev_share; |
shmd | 383 | ipc/shm.c | shmd->vm_prev_share->vm_next_share = shmd; |
shmd | 384 | ipc/shm.c | attaches->vm_prev_share = shmd; |
shmd | 386 | ipc/shm.c | shp->attaches = shmd->vm_next_share = shmd->vm_prev_share = shmd; |
shmd | 390 | ipc/shm.c | static inline void remove_attach (struct shmid_ds * shp, struct vm_area_struct * shmd) |
shmd | 392 | ipc/shm.c | if (shmd->vm_next_share == shmd) { |
shmd | 393 | ipc/shm.c | if (shp->attaches != shmd) { |
shmd | 395 | ipc/shm.c | SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK); |
shmd | 397 | ipc/shm.c | shmd->vm_start, shmd->vm_end, |
shmd | 398 | ipc/shm.c | shmd->vm_flags & VM_READ ? 'r' : '-', |
shmd | 399 | ipc/shm.c | shmd->vm_flags & VM_WRITE ? 'w' : '-', |
shmd | 400 | ipc/shm.c | shmd->vm_flags & VM_EXEC ? 'x' : '-', |
shmd | 401 | ipc/shm.c | shmd->vm_flags & VM_MAYSHARE ? 's' : 'p', |
shmd | 402 | ipc/shm.c | shmd->vm_offset, shmd->vm_pte); |
shmd | 406 | ipc/shm.c | if (shp->attaches == shmd) |
shmd | 407 | ipc/shm.c | shp->attaches = shmd->vm_next_share; |
shmd | 408 | ipc/shm.c | shmd->vm_prev_share->vm_next_share = shmd->vm_next_share; |
shmd | 409 | ipc/shm.c | shmd->vm_next_share->vm_prev_share = shmd->vm_prev_share; |
shmd | 417 | ipc/shm.c | static int shm_map (struct vm_area_struct *shmd) |
shmd | 425 | ipc/shm.c | do_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start); |
shmd | 428 | ipc/shm.c | current->mm->total_vm += (shmd->vm_end - shmd->vm_start) >> PAGE_SHIFT; |
shmd | 429 | ipc/shm.c | insert_vm_struct(current, shmd); |
shmd | 430 | ipc/shm.c | merge_segments(current, shmd->vm_start, shmd->vm_end); |
shmd | 433 | ipc/shm.c | shm_sgn = shmd->vm_pte + |
shmd | 434 | ipc/shm.c | SWP_ENTRY(0, (shmd->vm_offset >> PAGE_SHIFT) << SHM_IDX_SHIFT); |
shmd | 435 | ipc/shm.c | for (tmp = shmd->vm_start; |
shmd | 436 | ipc/shm.c | tmp < shmd->vm_end; |
shmd | 439 | ipc/shm.c | page_dir = pgd_offset(shmd->vm_mm,tmp); |
shmd | 448 | ipc/shm.c | invalidate_range(shmd->vm_mm, shmd->vm_start, shmd->vm_end); |
shmd | 458 | ipc/shm.c | struct vm_area_struct *shmd; |
shmd | 496 | ipc/shm.c | if ((shmd = find_vma_intersection(current, addr, addr + shp->shm_segsz))) { |
shmd | 507 | ipc/shm.c | shmd = (struct vm_area_struct *) kmalloc (sizeof(*shmd), GFP_KERNEL); |
shmd | 508 | ipc/shm.c | if (!shmd) |
shmd | 511 | ipc/shm.c | kfree(shmd); |
shmd | 515 | ipc/shm.c | shmd->vm_pte = SWP_ENTRY(SHM_SWP_TYPE, id); |
shmd | 516 | ipc/shm.c | shmd->vm_start = addr; |
shmd | 517 | ipc/shm.c | shmd->vm_end = addr + shp->shm_npages * PAGE_SIZE; |
shmd | 518 | ipc/shm.c | shmd->vm_mm = current->mm; |
shmd | 519 | ipc/shm.c | shmd->vm_page_prot = (shmflg & SHM_RDONLY) ? PAGE_READONLY : PAGE_SHARED; |
shmd | 520 | ipc/shm.c | shmd->vm_flags = VM_SHM | VM_MAYSHARE | VM_SHARED |
shmd | 523 | ipc/shm.c | shmd->vm_next_share = shmd->vm_prev_share = NULL; |
shmd | 524 | ipc/shm.c | shmd->vm_inode = NULL; |
shmd | 525 | ipc/shm.c | shmd->vm_offset = 0; |
shmd | 526 | ipc/shm.c | shmd->vm_ops = &shm_vm_ops; |
shmd | 529 | ipc/shm.c | if ((err = shm_map (shmd))) { |
shmd | 532 | ipc/shm.c | kfree(shmd); |
shmd | 536 | ipc/shm.c | insert_attach(shp,shmd); /* insert shmd into shp->attaches */ |
shmd | 546 | ipc/shm.c | static void shm_open (struct vm_area_struct *shmd) |
shmd | 551 | ipc/shm.c | id = SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK; |
shmd | 557 | ipc/shm.c | insert_attach(shp,shmd); /* insert shmd into shp->attaches */ |
shmd | 569 | ipc/shm.c | static void shm_close (struct vm_area_struct *shmd) |
shmd | 575 | ipc/shm.c | id = SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK; |
shmd | 577 | ipc/shm.c | remove_attach(shp,shmd); /* remove from shp->attaches */ |
shmd | 590 | ipc/shm.c | struct vm_area_struct *shmd, *shmdnext; |
shmd | 592 | ipc/shm.c | for (shmd = current->mm->mmap; shmd; shmd = shmdnext) { |
shmd | 593 | ipc/shm.c | shmdnext = shmd->vm_next; |
shmd | 594 | ipc/shm.c | if (shmd->vm_ops == &shm_vm_ops |
shmd | 595 | ipc/shm.c | && shmd->vm_start - shmd->vm_offset == (ulong) shmaddr) |
shmd | 596 | ipc/shm.c | do_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start); |
shmd | 604 | ipc/shm.c | static pte_t shm_swap_in(struct vm_area_struct * shmd, unsigned long offset, unsigned long code) |
shmd | 611 | ipc/shm.c | if (id != (SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK)) { |
shmd | 613 | ipc/shm.c | id, SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK); |
shmd | 667 | ipc/shm.c | return pte_modify(pte, shmd->vm_page_prot); |
shmd | 680 | ipc/shm.c | struct vm_area_struct *shmd; |
shmd | 723 | ipc/shm.c | for (shmd = shp->attaches; ; ) { |
shmd | 730 | ipc/shm.c | if ((SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK) != id) { |
shmd | 732 | ipc/shm.c | id, SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK); |
shmd | 735 | ipc/shm.c | tmp = shmd->vm_start + (idx << PAGE_SHIFT) - shmd->vm_offset; |
shmd | 736 | ipc/shm.c | if (!(tmp >= shmd->vm_start && tmp < shmd->vm_end)) |
shmd | 738 | ipc/shm.c | page_dir = pgd_offset(shmd->vm_mm,tmp); |
shmd | 741 | ipc/shm.c | id, shmd->vm_start, idx); |
shmd | 748 | ipc/shm.c | id, shmd->vm_start, idx); |
shmd | 763 | ipc/shm.c | __pte(shmd->vm_pte + SWP_ENTRY(0, idx << SHM_IDX_SHIFT))); |
shmd | 765 | ipc/shm.c | if (shmd->vm_mm->rss > 0) |
shmd | 766 | ipc/shm.c | shmd->vm_mm->rss--; |
shmd | 767 | ipc/shm.c | invalidate_range(shmd->vm_mm, shmd->vm_start, shmd->vm_end); |
shmd | 770 | ipc/shm.c | if ((shmd = shmd->vm_next_share) == shp->attaches) |