rename mmap MAP_SHARED to MAP_IPC_SHARED
. MAP_SHARED was used to implement sysv shared memory . used to signal shareable memory region to VM . assumptions about this situation break when processes use MAP_SHARED for its normal, standardised meaning
This commit is contained in:
parent
255ae85b1e
commit
85f6d866e6
@ -13,7 +13,6 @@
|
|||||||
#define PROT_EXEC 0x04 /* pages can be executed */
|
#define PROT_EXEC 0x04 /* pages can be executed */
|
||||||
|
|
||||||
/* flags argument for mmap() */
|
/* flags argument for mmap() */
|
||||||
#define MAP_SHARED 0x0001 /* share changes */
|
|
||||||
#define MAP_PRIVATE 0x0002 /* changes are private */
|
#define MAP_PRIVATE 0x0002 /* changes are private */
|
||||||
#define MAP_ANON 0x0004 /* anonymous memory */
|
#define MAP_ANON 0x0004 /* anonymous memory */
|
||||||
#define MAP_PREALLOC 0x0008 /* not on-demand */
|
#define MAP_PREALLOC 0x0008 /* not on-demand */
|
||||||
@ -21,6 +20,7 @@
|
|||||||
#define MAP_LOWER16M 0x0020 /* physically below 16MB */
|
#define MAP_LOWER16M 0x0020 /* physically below 16MB */
|
||||||
#define MAP_ALIGN64K 0x0040 /* physically aligned at 64kB */
|
#define MAP_ALIGN64K 0x0040 /* physically aligned at 64kB */
|
||||||
#define MAP_LOWER1M 0x0080 /* physically below 16MB */
|
#define MAP_LOWER1M 0x0080 /* physically below 16MB */
|
||||||
|
#define MAP_IPC_SHARED 0x0100 /* used to implement shared memory */
|
||||||
|
|
||||||
/* mmap() error return */
|
/* mmap() error return */
|
||||||
#define MAP_FAILED ((void *)-1)
|
#define MAP_FAILED ((void *)-1)
|
||||||
|
@ -35,7 +35,9 @@ typedef __off_t off_t; /* file offset */
|
|||||||
* Flags contain sharing type and options.
|
* Flags contain sharing type and options.
|
||||||
* Sharing types; choose one.
|
* Sharing types; choose one.
|
||||||
*/
|
*/
|
||||||
|
#ifndef __minix
|
||||||
#define MAP_SHARED 0x0001 /* share changes */
|
#define MAP_SHARED 0x0001 /* share changes */
|
||||||
|
#endif
|
||||||
#define MAP_PRIVATE 0x0002 /* changes are private */
|
#define MAP_PRIVATE 0x0002 /* changes are private */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -52,6 +54,7 @@ typedef __off_t off_t; /* file offset */
|
|||||||
#define MAP_ALIGN64K 0x0040 /* physically aligned at 64kB */
|
#define MAP_ALIGN64K 0x0040 /* physically aligned at 64kB */
|
||||||
#define MAP_LOWER1M 0x0080 /* physically below 16MB */
|
#define MAP_LOWER1M 0x0080 /* physically below 16MB */
|
||||||
#define MAP_ALIGNMENT_64KB MAP_ALIGN64K
|
#define MAP_ALIGNMENT_64KB MAP_ALIGN64K
|
||||||
|
#define MAP_IPC_SHARED 0x0100 /* share changes */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Error indicator returned by mmap(2)
|
* Error indicator returned by mmap(2)
|
||||||
|
@ -74,7 +74,7 @@ PUBLIC int do_shmget(message *m)
|
|||||||
memset(shm, 0, sizeof(struct shm_struct));
|
memset(shm, 0, sizeof(struct shm_struct));
|
||||||
shm->page = (vir_bytes) mmap(0, size,
|
shm->page = (vir_bytes) mmap(0, size,
|
||||||
PROT_READ|PROT_WRITE,
|
PROT_READ|PROT_WRITE,
|
||||||
MAP_CONTIG|MAP_PREALLOC|MAP_ANON|MAP_SHARED,
|
MAP_CONTIG|MAP_PREALLOC|MAP_ANON|MAP_IPC_SHARED,
|
||||||
-1, 0);
|
-1, 0);
|
||||||
if (shm->page == (vir_bytes) MAP_FAILED)
|
if (shm->page == (vir_bytes) MAP_FAILED)
|
||||||
return ENOMEM;
|
return ENOMEM;
|
||||||
|
@ -56,7 +56,7 @@ PRIVATE void print_region(struct vm_region_info *vri, int *n)
|
|||||||
(vri->vri_prot & PROT_READ) ? 'r' : '-',
|
(vri->vri_prot & PROT_READ) ? 'r' : '-',
|
||||||
(vri->vri_prot & PROT_WRITE) ? 'w' : '-',
|
(vri->vri_prot & PROT_WRITE) ? 'w' : '-',
|
||||||
(vri->vri_prot & PROT_EXEC) ? 'x' : '-',
|
(vri->vri_prot & PROT_EXEC) ? 'x' : '-',
|
||||||
(vri->vri_flags & MAP_SHARED) ? 's' : 'p',
|
(vri->vri_flags & MAP_IPC_SHARED) ? 's' : 'p',
|
||||||
vri->vri_length / 1024L);
|
vri->vri_length / 1024L);
|
||||||
(*n)++;
|
(*n)++;
|
||||||
}
|
}
|
||||||
|
@ -368,7 +368,7 @@ PRIVATE int dump_regions(int slot)
|
|||||||
(vri[i].vri_prot & PROT_READ) ? 'r' : '-',
|
(vri[i].vri_prot & PROT_READ) ? 'r' : '-',
|
||||||
(vri[i].vri_prot & PROT_WRITE) ? 'w' : '-',
|
(vri[i].vri_prot & PROT_WRITE) ? 'w' : '-',
|
||||||
(vri[i].vri_prot & PROT_EXEC) ? 'x' : '-',
|
(vri[i].vri_prot & PROT_EXEC) ? 'x' : '-',
|
||||||
(vri[i].vri_flags & MAP_SHARED) ? 's' : 'p');
|
(vri[i].vri_flags & MAP_IPC_SHARED) ? 's' : 'p');
|
||||||
|
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,14 @@ PUBLIC int do_mmap(message *m)
|
|||||||
if(m->VMM_FLAGS & MAP_LOWER16M) vrflags |= VR_LOWER16MB;
|
if(m->VMM_FLAGS & MAP_LOWER16M) vrflags |= VR_LOWER16MB;
|
||||||
if(m->VMM_FLAGS & MAP_LOWER1M) vrflags |= VR_LOWER1MB;
|
if(m->VMM_FLAGS & MAP_LOWER1M) vrflags |= VR_LOWER1MB;
|
||||||
if(m->VMM_FLAGS & MAP_ALIGN64K) vrflags |= VR_PHYS64K;
|
if(m->VMM_FLAGS & MAP_ALIGN64K) vrflags |= VR_PHYS64K;
|
||||||
if(m->VMM_FLAGS & MAP_SHARED) vrflags |= VR_SHARED;
|
if(m->VMM_FLAGS & MAP_IPC_SHARED) {
|
||||||
|
vrflags |= VR_SHARED;
|
||||||
|
/* Shared memory has to be preallocated. */
|
||||||
|
if(m->VMM_FLAGS & (MAP_PREALLOC|MAP_ANON) !=
|
||||||
|
(MAP_PREALLOC|MAP_ANON)) {
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
if(m->VMM_FLAGS & MAP_CONTIG) vrflags |= VR_CONTIG;
|
if(m->VMM_FLAGS & MAP_CONTIG) vrflags |= VR_CONTIG;
|
||||||
|
|
||||||
if(len % VM_PAGE_SIZE)
|
if(len % VM_PAGE_SIZE)
|
||||||
|
@ -1999,7 +1999,7 @@ PUBLIC int get_region_info(struct vmproc *vmp, struct vm_region_info *vri,
|
|||||||
if (!(vr->flags & VR_WRITABLE))
|
if (!(vr->flags & VR_WRITABLE))
|
||||||
vri->vri_prot &= ~PROT_WRITE;
|
vri->vri_prot &= ~PROT_WRITE;
|
||||||
|
|
||||||
vri->vri_flags = (vr->flags & VR_SHARED) ? MAP_SHARED : 0;
|
vri->vri_flags = (vr->flags & VR_SHARED) ? MAP_IPC_SHARED : 0;
|
||||||
|
|
||||||
next = vr->vaddr + vr->length;
|
next = vr->vaddr + vr->length;
|
||||||
region_incr_iter(&v_iter);
|
region_incr_iter(&v_iter);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user