taglinefilesource code
shmd24ipc/shm.cstatic int shm_map (struct vm_area_struct *shmd);
shmd26ipc/shm.cstatic void shm_open (struct vm_area_struct *shmd);
shmd27ipc/shm.cstatic void shm_close (struct vm_area_struct *shmd);
shmd377ipc/shm.cstatic inline void insert_attach (struct shmid_ds * shp, struct vm_area_struct * shmd)
shmd382ipc/shm.cshmd->vm_next_share = attaches;
shmd383ipc/shm.cshmd->vm_prev_share = attaches->vm_prev_share;
shmd384ipc/shm.cshmd->vm_prev_share->vm_next_share = shmd;
shmd385ipc/shm.cattaches->vm_prev_share = shmd;
shmd387ipc/shm.cshp->attaches = shmd->vm_next_share = shmd->vm_prev_share = shmd;
shmd391ipc/shm.cstatic inline void remove_attach (struct shmid_ds * shp, struct vm_area_struct * shmd)
shmd393ipc/shm.cif (shmd->vm_next_share == shmd) {
shmd394ipc/shm.cif (shp->attaches != shmd) {
shmd396ipc/shm.c(shmd->vm_pte >> SHM_ID_SHIFT) & SHM_ID_MASK);
shmd398ipc/shm.cshmd->vm_task->pid, shmd->vm_start, shmd->vm_end,
shmd399ipc/shm.cshmd->vm_flags & VM_READ ? 'r' : '-',
shmd400ipc/shm.cshmd->vm_flags & VM_WRITE ? 'w' : '-',
shmd401ipc/shm.cshmd->vm_flags & VM_EXEC ? 'x' : '-',
shmd402ipc/shm.cshmd->vm_flags & VM_MAYSHARE ? 's' : 'p',
shmd403ipc/shm.cshmd->vm_offset, shmd->vm_pte);
shmd407ipc/shm.cif (shp->attaches == shmd)
shmd408ipc/shm.cshp->attaches = shmd->vm_next_share;
shmd409ipc/shm.cshmd->vm_prev_share->vm_next_share = shmd->vm_next_share;
shmd410ipc/shm.cshmd->vm_next_share->vm_prev_share = shmd->vm_prev_share;
shmd418ipc/shm.cstatic int shm_map (struct vm_area_struct *shmd)
shmd427ipc/shm.cdo_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start);
shmd430ipc/shm.cinsert_vm_struct(current, shmd);
shmd431ipc/shm.cmerge_segments(current, shmd->vm_start, shmd->vm_end);
shmd434ipc/shm.cshm_sgn = shmd->vm_pte + ((shmd->vm_offset >> PAGE_SHIFT) << SHM_IDX_SHIFT);
shmd435ipc/shm.cfor (tmp = shmd->vm_start; tmp < shmd->vm_end; tmp += PAGE_SIZE,
shmd437ipc/shm.cpage_dir = pgd_offset(shmd->vm_task,tmp);
shmd456ipc/shm.cstruct vm_area_struct *shmd;
shmd488ipc/shm.cif ((shmd = find_vma_intersection(current, addr, addr + shp->shm_segsz))) {
shmd499ipc/shm.cshmd = (struct vm_area_struct *) kmalloc (sizeof(*shmd), GFP_KERNEL);
shmd500ipc/shm.cif (!shmd)
shmd503ipc/shm.ckfree(shmd);
shmd507ipc/shm.cshmd->vm_pte = (SHM_SWP_TYPE << 1) | (id << SHM_ID_SHIFT);
shmd508ipc/shm.cshmd->vm_start = addr;
shmd509ipc/shm.cshmd->vm_end = addr + shp->shm_npages * PAGE_SIZE;
shmd510ipc/shm.cshmd->vm_task = current;
shmd511ipc/shm.cshmd->vm_page_prot = (shmflg & SHM_RDONLY) ? PAGE_READONLY : PAGE_SHARED;
shmd512ipc/shm.cshmd->vm_flags = VM_SHM | VM_MAYSHARE | VM_SHARED
shmd515ipc/shm.cshmd->vm_next_share = shmd->vm_prev_share = NULL;
shmd516ipc/shm.cshmd->vm_inode = NULL;
shmd517ipc/shm.cshmd->vm_offset = 0;
shmd518ipc/shm.cshmd->vm_ops = &shm_vm_ops;
shmd521ipc/shm.cif ((err = shm_map (shmd))) {
shmd524ipc/shm.ckfree(shmd);
shmd528ipc/shm.cinsert_attach(shp,shmd);  /* insert shmd into shp->attaches */
shmd538ipc/shm.cstatic void shm_open (struct vm_area_struct *shmd)
shmd543ipc/shm.cid = (shmd->vm_pte >> SHM_ID_SHIFT) & SHM_ID_MASK;
shmd549ipc/shm.cinsert_attach(shp,shmd);  /* insert shmd into shp->attaches */
shmd561ipc/shm.cstatic void shm_close (struct vm_area_struct *shmd)
shmd566ipc/shm.cunmap_page_range (shmd->vm_start, shmd->vm_end - shmd->vm_start);
shmd569ipc/shm.cid = (shmd->vm_pte >> SHM_ID_SHIFT) & SHM_ID_MASK;
shmd571ipc/shm.cremove_attach(shp,shmd);  /* remove from shp->attaches */
shmd584ipc/shm.cstruct vm_area_struct *shmd, *shmdnext;
shmd586ipc/shm.cfor (shmd = current->mm->mmap; shmd; shmd = shmdnext) {
shmd587ipc/shm.cshmdnext = shmd->vm_next;
shmd588ipc/shm.cif (shmd->vm_ops == &shm_vm_ops
shmd589ipc/shm.c&& shmd->vm_start - shmd->vm_offset == (ulong) shmaddr)
shmd590ipc/shm.cdo_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start);
shmd598ipc/shm.cstatic pte_t shm_swap_in(struct vm_area_struct * shmd, unsigned long offset, unsigned long code)
shmd605ipc/shm.cif (id != ((shmd->vm_pte >> SHM_ID_SHIFT) & SHM_ID_MASK)) {
shmd607ipc/shm.cid, (shmd->vm_pte >> SHM_ID_SHIFT) & SHM_ID_MASK);
shmd661ipc/shm.creturn pte_modify(pte, shmd->vm_page_prot);
shmd674ipc/shm.cstruct vm_area_struct *shmd;
shmd714ipc/shm.cfor (shmd = shp->attaches; ; ) {
shmd721ipc/shm.cif ((shmd->vm_pte >> SHM_ID_SHIFT & SHM_ID_MASK) != id) {
shmd722ipc/shm.cprintk ("shm_swap: id=%ld does not match shmd->vm_pte.id=%ld\n", id, shmd->vm_pte >> SHM_ID_SHIFT & SHM_ID_MASK);
shmd725ipc/shm.ctmp = shmd->vm_start + (idx << PAGE_SHIFT) - shmd->vm_offset;
shmd726ipc/shm.cif (!(tmp >= shmd->vm_start && tmp < shmd->vm_end))
shmd728ipc/shm.cpage_dir = pgd_offset(shmd->vm_task,tmp);
shmd731ipc/shm.cid, shmd->vm_start, idx);
shmd738ipc/shm.cid, shmd->vm_start, idx);
shmd752ipc/shm.cpte_val(*page_table) = shmd->vm_pte | idx << SHM_IDX_SHIFT;
shmd754ipc/shm.cif (shmd->vm_task->mm->rss > 0)
shmd755ipc/shm.cshmd->vm_task->mm->rss--;
shmd759ipc/shm.cif ((shmd = shmd->vm_next_share) == shp->attaches)