tag | line | file | source code |
shmd | 24 | ipc/shm.c | static int shm_map (struct vm_area_struct *shmd); |
shmd | 26 | ipc/shm.c | static void shm_open (struct vm_area_struct *shmd); |
shmd | 27 | ipc/shm.c | static void shm_close (struct vm_area_struct *shmd); |
shmd | 377 | ipc/shm.c | static inline void insert_attach (struct shmid_ds * shp, struct vm_area_struct * shmd) |
shmd | 382 | ipc/shm.c | shmd->vm_next_share = attaches; |
shmd | 383 | ipc/shm.c | shmd->vm_prev_share = attaches->vm_prev_share; |
shmd | 384 | ipc/shm.c | shmd->vm_prev_share->vm_next_share = shmd; |
shmd | 385 | ipc/shm.c | attaches->vm_prev_share = shmd; |
shmd | 387 | ipc/shm.c | shp->attaches = shmd->vm_next_share = shmd->vm_prev_share = shmd; |
shmd | 391 | ipc/shm.c | static inline void remove_attach (struct shmid_ds * shp, struct vm_area_struct * shmd) |
shmd | 393 | ipc/shm.c | if (shmd->vm_next_share == shmd) { |
shmd | 394 | ipc/shm.c | if (shp->attaches != shmd) { |
shmd | 396 | ipc/shm.c | (shmd->vm_pte >> SHM_ID_SHIFT) & SHM_ID_MASK); |
shmd | 398 | ipc/shm.c | shmd->vm_task->pid, shmd->vm_start, shmd->vm_end, |
shmd | 399 | ipc/shm.c | shmd->vm_flags & VM_READ ? 'r' : '-', |
shmd | 400 | ipc/shm.c | shmd->vm_flags & VM_WRITE ? 'w' : '-', |
shmd | 401 | ipc/shm.c | shmd->vm_flags & VM_EXEC ? 'x' : '-', |
shmd | 402 | ipc/shm.c | shmd->vm_flags & VM_MAYSHARE ? 's' : 'p', |
shmd | 403 | ipc/shm.c | shmd->vm_offset, shmd->vm_pte); |
shmd | 407 | ipc/shm.c | if (shp->attaches == shmd) |
shmd | 408 | ipc/shm.c | shp->attaches = shmd->vm_next_share; |
shmd | 409 | ipc/shm.c | shmd->vm_prev_share->vm_next_share = shmd->vm_next_share; |
shmd | 410 | ipc/shm.c | shmd->vm_next_share->vm_prev_share = shmd->vm_prev_share; |
shmd | 418 | ipc/shm.c | static int shm_map (struct vm_area_struct *shmd) |
shmd | 427 | ipc/shm.c | do_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start); |
shmd | 430 | ipc/shm.c | insert_vm_struct(current, shmd); |
shmd | 431 | ipc/shm.c | merge_segments(current, shmd->vm_start, shmd->vm_end); |
shmd | 434 | ipc/shm.c | shm_sgn = shmd->vm_pte + ((shmd->vm_offset >> PAGE_SHIFT) << SHM_IDX_SHIFT); |
shmd | 435 | ipc/shm.c | for (tmp = shmd->vm_start; tmp < shmd->vm_end; tmp += PAGE_SIZE, |
shmd | 437 | ipc/shm.c | page_dir = pgd_offset(shmd->vm_task,tmp); |
shmd | 456 | ipc/shm.c | struct vm_area_struct *shmd; |
shmd | 488 | ipc/shm.c | if ((shmd = find_vma_intersection(current, addr, addr + shp->shm_segsz))) { |
shmd | 499 | ipc/shm.c | shmd = (struct vm_area_struct *) kmalloc (sizeof(*shmd), GFP_KERNEL); |
shmd | 500 | ipc/shm.c | if (!shmd) |
shmd | 503 | ipc/shm.c | kfree(shmd); |
shmd | 507 | ipc/shm.c | shmd->vm_pte = (SHM_SWP_TYPE << 1) | (id << SHM_ID_SHIFT); |
shmd | 508 | ipc/shm.c | shmd->vm_start = addr; |
shmd | 509 | ipc/shm.c | shmd->vm_end = addr + shp->shm_npages * PAGE_SIZE; |
shmd | 510 | ipc/shm.c | shmd->vm_task = current; |
shmd | 511 | ipc/shm.c | shmd->vm_page_prot = (shmflg & SHM_RDONLY) ? PAGE_READONLY : PAGE_SHARED; |
shmd | 512 | ipc/shm.c | shmd->vm_flags = VM_SHM | VM_MAYSHARE | VM_SHARED |
shmd | 515 | ipc/shm.c | shmd->vm_next_share = shmd->vm_prev_share = NULL; |
shmd | 516 | ipc/shm.c | shmd->vm_inode = NULL; |
shmd | 517 | ipc/shm.c | shmd->vm_offset = 0; |
shmd | 518 | ipc/shm.c | shmd->vm_ops = &shm_vm_ops; |
shmd | 521 | ipc/shm.c | if ((err = shm_map (shmd))) { |
shmd | 524 | ipc/shm.c | kfree(shmd); |
shmd | 528 | ipc/shm.c | insert_attach(shp,shmd); /* insert shmd into shp->attaches */ |
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 | insert_attach(shp,shmd); /* insert shmd into shp->attaches */ |
shmd | 561 | ipc/shm.c | static void shm_close (struct vm_area_struct *shmd) |
shmd | 566 | ipc/shm.c | unmap_page_range (shmd->vm_start, shmd->vm_end - shmd->vm_start); |
shmd | 569 | ipc/shm.c | id = (shmd->vm_pte >> SHM_ID_SHIFT) & SHM_ID_MASK; |
shmd | 571 | ipc/shm.c | remove_attach(shp,shmd); /* remove from shp->attaches */ |
shmd | 584 | ipc/shm.c | struct vm_area_struct *shmd, *shmdnext; |
shmd | 586 | ipc/shm.c | for (shmd = current->mm->mmap; shmd; shmd = shmdnext) { |
shmd | 587 | ipc/shm.c | shmdnext = shmd->vm_next; |
shmd | 588 | ipc/shm.c | if (shmd->vm_ops == &shm_vm_ops |
shmd | 589 | ipc/shm.c | && shmd->vm_start - shmd->vm_offset == (ulong) shmaddr) |
shmd | 590 | ipc/shm.c | do_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start); |
shmd | 598 | ipc/shm.c | static pte_t shm_swap_in(struct vm_area_struct * shmd, unsigned long offset, unsigned long code) |
shmd | 605 | ipc/shm.c | if (id != ((shmd->vm_pte >> SHM_ID_SHIFT) & SHM_ID_MASK)) { |
shmd | 607 | ipc/shm.c | id, (shmd->vm_pte >> SHM_ID_SHIFT) & SHM_ID_MASK); |
shmd | 661 | ipc/shm.c | return pte_modify(pte, shmd->vm_page_prot); |
shmd | 674 | ipc/shm.c | struct vm_area_struct *shmd; |
shmd | 714 | ipc/shm.c | for (shmd = shp->attaches; ; ) { |
shmd | 721 | ipc/shm.c | if ((shmd->vm_pte >> SHM_ID_SHIFT & SHM_ID_MASK) != id) { |
shmd | 722 | 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 | 725 | ipc/shm.c | tmp = shmd->vm_start + (idx << PAGE_SHIFT) - shmd->vm_offset; |
shmd | 726 | ipc/shm.c | if (!(tmp >= shmd->vm_start && tmp < shmd->vm_end)) |
shmd | 728 | ipc/shm.c | page_dir = pgd_offset(shmd->vm_task,tmp); |
shmd | 731 | ipc/shm.c | id, shmd->vm_start, idx); |
shmd | 738 | ipc/shm.c | id, shmd->vm_start, idx); |
shmd | 752 | ipc/shm.c | pte_val(*page_table) = shmd->vm_pte | idx << SHM_IDX_SHIFT; |
shmd | 754 | ipc/shm.c | if (shmd->vm_task->mm->rss > 0) |
shmd | 755 | ipc/shm.c | shmd->vm_task->mm->rss--; |
shmd | 759 | ipc/shm.c | if ((shmd = shmd->vm_next_share) == shp->attaches) |