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)
shmd426ipc/shm.cdo_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start);
shmd429ipc/shm.ccurrent->mm->total_vm += (shmd->vm_end - shmd->vm_start) >> PAGE_SHIFT;
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 +
shmd435ipc/shm.cSWP_ENTRY(0, (shmd->vm_offset >> PAGE_SHIFT) << SHM_IDX_SHIFT);
shmd436ipc/shm.cflush_cache_range(shmd->vm_mm, shmd->vm_start, shmd->vm_end);
shmd437ipc/shm.cfor (tmp = shmd->vm_start;
shmd438ipc/shm.ctmp < shmd->vm_end;
shmd441ipc/shm.cpage_dir = pgd_offset(shmd->vm_mm,tmp);
shmd450ipc/shm.cflush_tlb_range(shmd->vm_mm, shmd->vm_start, shmd->vm_end);
shmd460ipc/shm.cstruct vm_area_struct *shmd;
shmd498ipc/shm.cif ((shmd = find_vma_intersection(current, addr, addr + shp->shm_segsz))) {
shmd509ipc/shm.cshmd = (struct vm_area_struct *) kmalloc (sizeof(*shmd), GFP_KERNEL);
shmd510ipc/shm.cif (!shmd)
shmd513ipc/shm.ckfree(shmd);
shmd517ipc/shm.cshmd->vm_pte = SWP_ENTRY(SHM_SWP_TYPE, id);
shmd518ipc/shm.cshmd->vm_start = addr;
shmd519ipc/shm.cshmd->vm_end = addr + shp->shm_npages * PAGE_SIZE;
shmd520ipc/shm.cshmd->vm_mm = current->mm;
shmd521ipc/shm.cshmd->vm_page_prot = (shmflg & SHM_RDONLY) ? PAGE_READONLY : PAGE_SHARED;
shmd522ipc/shm.cshmd->vm_flags = VM_SHM | VM_MAYSHARE | VM_SHARED
shmd525ipc/shm.cshmd->vm_next_share = shmd->vm_prev_share = NULL;
shmd526ipc/shm.cshmd->vm_inode = NULL;
shmd527ipc/shm.cshmd->vm_offset = 0;
shmd528ipc/shm.cshmd->vm_ops = &shm_vm_ops;
shmd531ipc/shm.cif ((err = shm_map (shmd))) {
shmd534ipc/shm.ckfree(shmd);
shmd538ipc/shm.cinsert_attach(shp,shmd);  /* insert shmd into shp->attaches */
shmd548ipc/shm.cstatic void shm_open (struct vm_area_struct *shmd)
shmd553ipc/shm.cid = SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK;
shmd559ipc/shm.cinsert_attach(shp,shmd);  /* insert shmd into shp->attaches */
shmd571ipc/shm.cstatic void shm_close (struct vm_area_struct *shmd)
shmd577ipc/shm.cid = SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK;
shmd579ipc/shm.cremove_attach(shp,shmd);  /* remove from shp->attaches */
shmd592ipc/shm.cstruct vm_area_struct *shmd, *shmdnext;
shmd594ipc/shm.cfor (shmd = current->mm->mmap; shmd; shmd = shmdnext) {
shmd595ipc/shm.cshmdnext = shmd->vm_next;
shmd596ipc/shm.cif (shmd->vm_ops == &shm_vm_ops
shmd597ipc/shm.c&& shmd->vm_start - shmd->vm_offset == (ulong) shmaddr)
shmd598ipc/shm.cdo_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start);
shmd606ipc/shm.cstatic pte_t shm_swap_in(struct vm_area_struct * shmd, unsigned long offset, unsigned long code)
shmd613ipc/shm.cif (id != (SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK)) {
shmd615ipc/shm.cid, SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK);
shmd669ipc/shm.creturn pte_modify(pte, shmd->vm_page_prot);
shmd682ipc/shm.cstruct vm_area_struct *shmd;
shmd725ipc/shm.cfor (shmd = shp->attaches; ; ) {
shmd732ipc/shm.cif ((SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK) != id) {
shmd734ipc/shm.cid, SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK);
shmd737ipc/shm.ctmp = shmd->vm_start + (idx << PAGE_SHIFT) - shmd->vm_offset;
shmd738ipc/shm.cif (!(tmp >= shmd->vm_start && tmp < shmd->vm_end))
shmd740ipc/shm.cpage_dir = pgd_offset(shmd->vm_mm,tmp);
shmd743ipc/shm.cid, shmd->vm_start, idx);
shmd750ipc/shm.cid, shmd->vm_start, idx);
shmd764ipc/shm.cflush_cache_page(shmd, tmp);
shmd766ipc/shm.c__pte(shmd->vm_pte + SWP_ENTRY(0, idx << SHM_IDX_SHIFT)));
shmd768ipc/shm.cif (shmd->vm_mm->rss > 0)
shmd769ipc/shm.cshmd->vm_mm->rss--;
shmd770ipc/shm.cflush_tlb_page(shmd, tmp);
shmd773ipc/shm.cif ((shmd = shmd->vm_next_share) == shp->attaches)