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.cSWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK);
shmd398ipc/shm.cshmd->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.ccurrent->mm->total_vm += (shmd->vm_end - shmd->vm_start) >> PAGE_SHIFT;
shmd431ipc/shm.cinsert_vm_struct(current, shmd);
shmd432ipc/shm.cmerge_segments(current, shmd->vm_start, shmd->vm_end);
shmd436ipc/shm.cshm_sgn = shmd->vm_pte +
shmd437ipc/shm.cSWP_ENTRY(0, (shmd->vm_offset >> PAGE_SHIFT) << SHM_IDX_SHIFT);
shmd438ipc/shm.cflush_cache_range(shmd->vm_mm, shmd->vm_start, shmd->vm_end);
shmd439ipc/shm.cfor (tmp = shmd->vm_start;
shmd440ipc/shm.ctmp < shmd->vm_end;
shmd443ipc/shm.cpage_dir = pgd_offset(shmd->vm_mm,tmp);
shmd456ipc/shm.cflush_tlb_range(shmd->vm_mm, shmd->vm_start, shmd->vm_end);
shmd466ipc/shm.cstruct vm_area_struct *shmd;
shmd504ipc/shm.cif ((shmd = find_vma_intersection(current, addr, addr + shp->shm_segsz))) {
shmd515ipc/shm.cshmd = (struct vm_area_struct *) kmalloc (sizeof(*shmd), GFP_KERNEL);
shmd516ipc/shm.cif (!shmd)
shmd519ipc/shm.ckfree(shmd);
shmd523ipc/shm.cshmd->vm_pte = SWP_ENTRY(SHM_SWP_TYPE, id);
shmd524ipc/shm.cshmd->vm_start = addr;
shmd525ipc/shm.cshmd->vm_end = addr + shp->shm_npages * PAGE_SIZE;
shmd526ipc/shm.cshmd->vm_mm = current->mm;
shmd527ipc/shm.cshmd->vm_page_prot = (shmflg & SHM_RDONLY) ? PAGE_READONLY : PAGE_SHARED;
shmd528ipc/shm.cshmd->vm_flags = VM_SHM | VM_MAYSHARE | VM_SHARED
shmd531ipc/shm.cshmd->vm_next_share = shmd->vm_prev_share = NULL;
shmd532ipc/shm.cshmd->vm_inode = NULL;
shmd533ipc/shm.cshmd->vm_offset = 0;
shmd534ipc/shm.cshmd->vm_ops = &shm_vm_ops;
shmd537ipc/shm.cif ((err = shm_map (shmd))) {
shmd540ipc/shm.ckfree(shmd);
shmd544ipc/shm.cinsert_attach(shp,shmd);  /* insert shmd into shp->attaches */
shmd554ipc/shm.cstatic void shm_open (struct vm_area_struct *shmd)
shmd559ipc/shm.cid = SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK;
shmd565ipc/shm.cinsert_attach(shp,shmd);  /* insert shmd into shp->attaches */
shmd577ipc/shm.cstatic void shm_close (struct vm_area_struct *shmd)
shmd583ipc/shm.cid = SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK;
shmd585ipc/shm.cremove_attach(shp,shmd);  /* remove from shp->attaches */
shmd598ipc/shm.cstruct vm_area_struct *shmd, *shmdnext;
shmd600ipc/shm.cfor (shmd = current->mm->mmap; shmd; shmd = shmdnext) {
shmd601ipc/shm.cshmdnext = shmd->vm_next;
shmd602ipc/shm.cif (shmd->vm_ops == &shm_vm_ops
shmd603ipc/shm.c&& shmd->vm_start - shmd->vm_offset == (ulong) shmaddr)
shmd604ipc/shm.cdo_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start);
shmd612ipc/shm.cstatic pte_t shm_swap_in(struct vm_area_struct * shmd, unsigned long offset, unsigned long code)
shmd619ipc/shm.cif (id != (SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK)) {
shmd621ipc/shm.cid, SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK);
shmd675ipc/shm.creturn pte_modify(pte, shmd->vm_page_prot);
shmd688ipc/shm.cstruct vm_area_struct *shmd;
shmd731ipc/shm.cfor (shmd = shp->attaches; ; ) {
shmd738ipc/shm.cif ((SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK) != id) {
shmd740ipc/shm.cid, SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK);
shmd743ipc/shm.ctmp = shmd->vm_start + (idx << PAGE_SHIFT) - shmd->vm_offset;
shmd744ipc/shm.cif (!(tmp >= shmd->vm_start && tmp < shmd->vm_end))
shmd746ipc/shm.cpage_dir = pgd_offset(shmd->vm_mm,tmp);
shmd749ipc/shm.cid, shmd->vm_start, idx);
shmd756ipc/shm.cid, shmd->vm_start, idx);
shmd770ipc/shm.cflush_cache_page(shmd, tmp);
shmd772ipc/shm.c__pte(shmd->vm_pte + SWP_ENTRY(0, idx << SHM_IDX_SHIFT)));
shmd774ipc/shm.cif (shmd->vm_mm->rss > 0)
shmd775ipc/shm.cshmd->vm_mm->rss--;
shmd776ipc/shm.cflush_tlb_page(shmd, tmp);
shmd779ipc/shm.cif ((shmd = shmd->vm_next_share) == shp->attaches)