taglinefilesource code
shmd19ipc/shm.cstatic int shm_map (struct shm_desc *shmd, int remap);
shmd347ipc/shm.cstatic int shm_map (struct shm_desc *shmd, int remap)
shmd352ipc/shm.cunsigned long page_dir = shmd->task->tss.cr3;
shmd355ipc/shm.cfor (tmp = shmd->start; tmp < shmd->end; tmp += PAGE_SIZE) {
shmd384ipc/shm.cshm_sgn = shmd->shm_sgn;
shmd385ipc/shm.cfor (tmp = shmd->start; tmp < shmd->end; tmp += PAGE_SIZE,
shmd446ipc/shm.cstruct shm_desc *shmd;
shmd469ipc/shm.cfor (shmd = current->shm; shmd; shmd = shmd->task_next) {
shmd470ipc/shm.cif (shmd->start < SHM_RANGE_START)
shmd472ipc/shm.cif (addr >= shmd->start)
shmd473ipc/shm.caddr = shmd->start;
shmd485ipc/shm.cfor (shmd = current->shm; shmd; shmd = shmd->task_next) {
shmd486ipc/shm.cif (addr >= shmd->start && addr < shmd->end)
shmd488ipc/shm.cif (addr + shp->shm_segsz >= shmd->start &&
shmd489ipc/shm.caddr + shp->shm_segsz < shmd->end)
shmd498ipc/shm.cshmd = (struct shm_desc *) kmalloc (sizeof(*shmd), GFP_KERNEL);
shmd499ipc/shm.cif (!shmd)
shmd502ipc/shm.ckfree(shmd);
shmd505ipc/shm.cshmd->shm_sgn = (SHM_SWP_TYPE << 1) | (id << SHM_ID_SHIFT) |
shmd507ipc/shm.cshmd->start = addr;
shmd508ipc/shm.cshmd->end = addr + shp->shm_npages * PAGE_SIZE;
shmd509ipc/shm.cshmd->task = current;
shmd511ipc/shm.cif ((err = add_vm_area(shmd->start, shmd->end - shmd->start, shmflg & SHM_RDONLY))) {
shmd512ipc/shm.ckfree(shmd);
shmd518ipc/shm.cif ((err = shm_map (shmd, shmflg & SHM_REMAP))) {
shmd521ipc/shm.ckfree(shmd);
shmd525ipc/shm.cshmd->task_next = current->shm;
shmd526ipc/shm.ccurrent->shm = shmd;
shmd527ipc/shm.cshmd->seg_next = shp->attaches;
shmd528ipc/shm.cshp->attaches = shmd;
shmd544ipc/shm.cstruct shm_desc *shmd = *shmdp;
shmd548ipc/shm.cid = (shmd->shm_sgn >> SHM_ID_SHIFT) & SHM_ID_MASK;
shmd550ipc/shm.c*shmdp = shmd->task_next;
shmd552ipc/shm.cif (*shmdp == shmd) {
shmd553ipc/shm.c*shmdp = shmd->seg_next;
shmd559ipc/shm.cdo_munmap(shmd->start, shp->shm_segsz);
shmd560ipc/shm.ckfree(shmd);
shmd574ipc/shm.cstruct shm_desc *shmd, **shmdp;
shmd576ipc/shm.cfor (shmdp = &current->shm; (shmd = *shmdp); shmdp=&shmd->task_next) {
shmd577ipc/shm.cif (shmd->start == (ulong) shmaddr) {
shmd602ipc/shm.cstruct shm_desc *shmd, *new_desc = NULL, *tmp;
shmd610ipc/shm.cfor (shmd = p1->shm; shmd; shmd = shmd->task_next) {
shmd621ipc/shm.c*tmp = *shmd;
shmd627ipc/shm.cfor (shmd = new_desc; shmd; shmd = shmd->task_next) {
shmd628ipc/shm.cid = (shmd->shm_sgn >> SHM_ID_SHIFT) & SHM_ID_MASK;
shmd634ipc/shm.cshmd->seg_next = shp->attaches;
shmd635ipc/shm.cshp->attaches = shmd;
shmd710ipc/shm.cstruct shm_desc *shmd;
shmd749ipc/shm.cfor (shmd = shp->attaches; shmd; shmd = shmd->seg_next) {
shmd751ipc/shm.cif ((shmd->shm_sgn >> SHM_ID_SHIFT & SHM_ID_MASK) != id) {
shmd755ipc/shm.ctmp = shmd->start + (idx << PAGE_SHIFT);
shmd756ipc/shm.cif (tmp >= shmd->end) {
shmd760ipc/shm.cpte = PAGE_DIR_OFFSET(shmd->task->tss.cr3,tmp);
shmd763ipc/shm.cid, shmd->start, idx);
shmd776ipc/shm.ctmp = shmd->shm_sgn | idx << SHM_IDX_SHIFT;
shmd779ipc/shm.cshmd->task->mm->rss--;