- error = mmalloc(p, uap->shmid, &uva, (segsz_t)size, prot, &shmops, &mp);
- if (error) {
- u.u_error = error;
- return;
- }
- if (u.u_error = mmmapin(p, mp, shmmapin)) {
- if (error = mmfree(p, mp))
- u.u_error = error;
- return;
- }
+ prot = VM_PROT_READ;
+ if ((uap->shmflg & SHM_RDONLY) == 0)
+ prot |= VM_PROT_WRITE;
+ flags = MAP_ANON|MAP_SHARED;
+ if (uva)
+ flags |= MAP_FIXED;
+ else
+ uva = (caddr_t)0x1000000; /* XXX */
+ error = vm_mmap(&p->p_vmspace->vm_map, (vm_offset_t *)&uva,
+ (vm_size_t)size, prot, flags,
+ ((struct shmhandle *)shp->shm_handle)->shmh_id, 0);
+ if (error)
+ return(error);
+ shmd->shmd_uva = (vm_offset_t)uva;
+ shmd->shmd_id = uap->shmid;