taglinefilesource code
shmd23ipc/shm.cstatic int shm_map (struct vm_area_struct *shmd);
shmd25ipc/shm.cstatic void shm_open (struct vm_area_struct *shmd);
shmd26ipc/shm.cstatic void shm_close (struct vm_area_struct *shmd);
shmd376ipc/shm.cstatic inline void insert_attach (struct shmid_ds * shp, struct vm_area_struct * shmd)
shmd381ipc/shm.cshmd->vm_next_share = attaches;
shmd382ipc/shm.cshmd->vm_prev_share = attaches->vm_prev_share;
shmd383ipc/shm.cshmd->vm_prev_share->vm_next_share = shmd;
shmd384ipc/shm.cattaches->vm_prev_share = shmd;
shmd386ipc/shm.cshp->attaches = shmd->vm_next_share = shmd->vm_prev_share = shmd;
shmd390ipc/shm.cstatic inline void remove_attach (struct shmid_ds * shp, struct vm_area_struct * shmd)
shmd392ipc/shm.cif (shmd->vm_next_share == shmd) {
shmd393ipc/shm.cif (shp->attaches != shmd) {
shmd395ipc/shm.cSWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK);
shmd397ipc/shm.cshmd->vm_start, shmd->vm_end,
shmd398ipc/shm.cshmd->vm_flags & VM_READ ? 'r' : '-',
shmd399ipc/shm.cshmd->vm_flags & VM_WRITE ? 'w' : '-',
shmd400ipc/shm.cshmd->vm_flags & VM_EXEC ? 'x' : '-',
shmd401ipc/shm.cshmd->vm_flags & VM_MAYSHARE ? 's' : 'p',
shmd402ipc/shm.cshmd->vm_offset, shmd->vm_pte);
shmd406ipc/shm.cif (shp->attaches == shmd)
shmd407ipc/shm.cshp->attaches = shmd->vm_next_share;
shmd408ipc/shm.cshmd->vm_prev_share->vm_next_share = shmd->vm_next_share;
shmd409ipc/shm.cshmd->vm_next_share->vm_prev_share = shmd->vm_prev_share;
shmd417ipc/shm.cstatic int shm_map (struct vm_area_struct *shmd)
shmd425ipc/shm.cdo_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start);
shmd428ipc/shm.ccurrent->mm->total_vm += (shmd->vm_end - shmd->vm_start) >> PAGE_SHIFT;
shmd429ipc/shm.cinsert_vm_struct(current, shmd);
shmd430ipc/shm.cmerge_segments(current, shmd->vm_start, shmd->vm_end);
shmd433ipc/shm.cshm_sgn = shmd->vm_pte +
shmd434ipc/shm.cSWP_ENTRY(0, (shmd->vm_offset >> PAGE_SHIFT) << SHM_IDX_SHIFT);
shmd435ipc/shm.cfor (tmp = shmd->vm_start;
shmd436ipc/shm.ctmp < shmd->vm_end;
shmd439ipc/shm.cpage_dir = pgd_offset(shmd->vm_mm,tmp);
shmd458ipc/shm.cstruct vm_area_struct *shmd;
shmd496ipc/shm.cif ((shmd = find_vma_intersection(current, addr, addr + shp->shm_segsz))) {
shmd507ipc/shm.cshmd = (struct vm_area_struct *) kmalloc (sizeof(*shmd), GFP_KERNEL);
shmd508ipc/shm.cif (!shmd)
shmd511ipc/shm.ckfree(shmd);
shmd515ipc/shm.cshmd->vm_pte = SWP_ENTRY(SHM_SWP_TYPE, id);
shmd516ipc/shm.cshmd->vm_start = addr;
shmd517ipc/shm.cshmd->vm_end = addr + shp->shm_npages * PAGE_SIZE;
shmd518ipc/shm.cshmd->vm_mm = current->mm;
shmd519ipc/shm.cshmd->vm_page_prot = (shmflg & SHM_RDONLY) ? PAGE_READONLY : PAGE_SHARED;
shmd520ipc/shm.cshmd->vm_flags = VM_SHM | VM_MAYSHARE | VM_SHARED
shmd523ipc/shm.cshmd->vm_next_share = shmd->vm_prev_share = NULL;
shmd524ipc/shm.cshmd->vm_inode = NULL;
shmd525ipc/shm.cshmd->vm_offset = 0;
shmd526ipc/shm.cshmd->vm_ops = &shm_vm_ops;
shmd529ipc/shm.cif ((err = shm_map (shmd))) {
shmd532ipc/shm.ckfree(shmd);
shmd536ipc/shm.cinsert_attach(shp,shmd);  /* insert shmd into shp->attaches */
shmd546ipc/shm.cstatic void shm_open (struct vm_area_struct *shmd)
shmd551ipc/shm.cid = SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK;
shmd557ipc/shm.cinsert_attach(shp,shmd);  /* insert shmd into shp->attaches */
shmd569ipc/shm.cstatic void shm_close (struct vm_area_struct *shmd)
shmd575ipc/shm.cid = SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK;
shmd577ipc/shm.cremove_attach(shp,shmd);  /* remove from shp->attaches */
shmd590ipc/shm.cstruct vm_area_struct *shmd, *shmdnext;
shmd592ipc/shm.cfor (shmd = current->mm->mmap; shmd; shmd = shmdnext) {
shmd593ipc/shm.cshmdnext = shmd->vm_next;
shmd594ipc/shm.cif (shmd->vm_ops == &shm_vm_ops
shmd595ipc/shm.c&& shmd->vm_start - shmd->vm_offset == (ulong) shmaddr)
shmd596ipc/shm.cdo_munmap(shmd->vm_start, shmd->vm_end - shmd->vm_start);
shmd604ipc/shm.cstatic pte_t shm_swap_in(struct vm_area_struct * shmd, unsigned long offset, unsigned long code)
shmd611ipc/shm.cif (id != (SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK)) {
shmd613ipc/shm.cid, SWP_OFFSET(shmd->vm_pte) & SHM_ID_MASK);
shmd667ipc/shm.creturn pte_modify(pte, shmd->vm_page_prot);
shmd680ipc/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);
shmd765ipc/shm.c__pte(shmd->vm_pte + SWP_ENTRY(0, idx << SHM_IDX_SHIFT)));
shmd767ipc/shm.cif (shmd->vm_mm->rss > 0)
shmd768ipc/shm.cshmd->vm_mm->rss--;
shmd772ipc/shm.cif ((shmd = shmd->vm_next_share) == shp->attaches)