taglinefilesource code
shmd21ipc/shm.cstatic int shm_map (struct vm_area_struct *shmd, int remap);
shmd23ipc/shm.cstatic void shm_open (struct vm_area_struct *shmd);
shmd24ipc/shm.cstatic void shm_close (struct vm_area_struct *shmd);
shmd375ipc/shm.cstatic int shm_map (struct vm_area_struct *shmd, int remap)
shmd379ipc/shm.cunsigned long page_dir = shmd->vm_task->tss.cr3;
shmd383ipc/shm.cfor (tmp = shmd->vm_start; tmp < shmd->vm_end; tmp += PAGE_SIZE) {
shmd396ipc/shm.cdo_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start);
shmd399ipc/shm.cinsert_vm_struct(current, shmd);
shmd403ipc/shm.cfor (tmp = shmd->vm_start; tmp < shmd->vm_end; tmp += PAGE_SIZE) {
shmd427ipc/shm.cshm_sgn = shmd->vm_pte + ((shmd->vm_offset >> PAGE_SHIFT) << SHM_IDX_SHIFT);
shmd428ipc/shm.cfor (tmp = shmd->vm_start; tmp < shmd->vm_end; tmp += PAGE_SIZE,
shmd446ipc/shm.cstruct vm_area_struct *shmd;
shmd484ipc/shm.cfor (shmd = current->mm->mmap; shmd; shmd = shmd->vm_next)
shmd485ipc/shm.cif (!(addr >= shmd->vm_end || addr + shp->shm_segsz <= shmd->vm_start)) {
shmd496ipc/shm.cshmd = (struct vm_area_struct *) kmalloc (sizeof(*shmd), GFP_KERNEL);
shmd497ipc/shm.cif (!shmd)
shmd500ipc/shm.ckfree(shmd);
shmd504ipc/shm.cshmd->vm_pte = (SHM_SWP_TYPE << 1) | (id << SHM_ID_SHIFT) |
shmd506ipc/shm.cshmd->vm_start = addr;
shmd507ipc/shm.cshmd->vm_end = addr + shp->shm_npages * PAGE_SIZE;
shmd508ipc/shm.cshmd->vm_task = current;
shmd509ipc/shm.cshmd->vm_page_prot = (shmflg & SHM_RDONLY) ? PAGE_READONLY : PAGE_SHARED;
shmd510ipc/shm.cshmd->vm_flags = VM_SHM | VM_MAYSHARE | VM_SHARED
shmd513ipc/shm.cshmd->vm_share = NULL;
shmd514ipc/shm.cshmd->vm_inode = NULL;
shmd515ipc/shm.cshmd->vm_offset = 0;
shmd516ipc/shm.cshmd->vm_ops = &shm_vm_ops;
shmd519ipc/shm.cif ((err = shm_map (shmd, shmflg & SHM_REMAP))) {
shmd522ipc/shm.ckfree(shmd);
shmd526ipc/shm.cshmd->vm_share = shp->attaches;
shmd527ipc/shm.cshp->attaches = shmd;
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.cshmd->vm_share = shp->attaches;
shmd550ipc/shm.cshp->attaches = shmd;
shmd562ipc/shm.cstatic void shm_close (struct vm_area_struct *shmd)
shmd568ipc/shm.cunmap_page_range (shmd->vm_start, shmd->vm_end - shmd->vm_start);
shmd571ipc/shm.cid = (shmd->vm_pte >> SHM_ID_SHIFT) & SHM_ID_MASK;
shmd574ipc/shm.cif (*shmdp == shmd) {
shmd575ipc/shm.c*shmdp = shmd->vm_share;
shmd580ipc/shm.cshmd->vm_task->pid, shmd->vm_start, shmd->vm_end,
shmd581ipc/shm.cshmd->vm_flags & VM_READ ? 'r' : '-',
shmd582ipc/shm.cshmd->vm_flags & VM_WRITE ? 'w' : '-',
shmd583ipc/shm.cshmd->vm_flags & VM_EXEC ? 'x' : '-',
shmd584ipc/shm.cshmd->vm_flags & VM_SHARED ? 's' : 'p',
shmd585ipc/shm.cshmd->vm_offset, shmd->vm_pte);
shmd600ipc/shm.cstruct vm_area_struct *shmd, *shmdnext;
shmd602ipc/shm.cfor (shmd = current->mm->mmap; shmd; shmd = shmdnext) {
shmd603ipc/shm.cshmdnext = shmd->vm_next;
shmd604ipc/shm.cif (shmd->vm_ops == &shm_vm_ops
shmd605ipc/shm.c&& shmd->vm_start - shmd->vm_offset == (ulong) shmaddr)
shmd606ipc/shm.cdo_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start);
shmd678ipc/shm.cstruct vm_area_struct *shmd;
shmd717ipc/shm.cfor (shmd = shp->attaches; shmd; shmd = shmd->vm_share) {
shmd719ipc/shm.cif ((shmd->vm_pte >> SHM_ID_SHIFT & SHM_ID_MASK) != id) {
shmd720ipc/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);
shmd723ipc/shm.ctmp = shmd->vm_start + (idx << PAGE_SHIFT) - shmd->vm_offset;
shmd724ipc/shm.cif (!(tmp >= shmd->vm_start && tmp < shmd->vm_end))
shmd726ipc/shm.cpte = PAGE_DIR_OFFSET(shmd->vm_task->tss.cr3,tmp);
shmd729ipc/shm.cid, shmd->vm_start, idx);
shmd742ipc/shm.ctmp = shmd->vm_pte | idx << SHM_IDX_SHIFT;
shmd745ipc/shm.cshmd->vm_task->mm->rss--;