]> Zhao Yanbai Git Server - minix.git/commitdiff
rename mmap MAP_SHARED to MAP_IPC_SHARED
authorBen Gras <ben@minix3.org>
Fri, 15 Jul 2011 16:10:50 +0000 (18:10 +0200)
committerBen Gras <ben@minix3.org>
Fri, 15 Jul 2011 16:10:50 +0000 (18:10 +0200)
. 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

include/sys/mman.h
nbsd_include/sys/mman.h
servers/ipc/shm.c
servers/is/dmp_vm.c
servers/procfs/pid.c
servers/vm/mmap.c
servers/vm/region.c

index 3bfa64c7ded59dead47702d9ee473aedea3ecc87..5040ff7e4d4cdfd73e4284863931abdd25d12748 100644 (file)
@@ -13,7 +13,6 @@
 #define PROT_EXEC       0x04    /* pages can be executed */
 
 /* flags argument for mmap()  */
-#define MAP_SHARED      0x0001          /* share changes */
 #define MAP_PRIVATE     0x0002          /* changes are private */
 #define MAP_ANON       0x0004          /* anonymous memory */
 #define MAP_PREALLOC   0x0008          /* not on-demand */
@@ -21,6 +20,7 @@
 #define MAP_LOWER16M   0x0020          /* physically below 16MB */
 #define MAP_ALIGN64K   0x0040          /* physically aligned at 64kB */
 #define MAP_LOWER1M    0x0080          /* physically below 16MB */
+#define MAP_IPC_SHARED  0x0100          /* used to implement shared memory */
 
 /* mmap() error return */
 #define MAP_FAILED      ((void *)-1)
index 75860eaa471ddc6ded4a735e3eef07d4f8f79d64..8a03de7d084f9b07aa62bf20a00cdca22d56207f 100644 (file)
@@ -35,7 +35,9 @@ typedef       __off_t         off_t;          /* file offset */
  * Flags contain sharing type and options.
  * Sharing types; choose one.
  */
+#ifndef __minix
 #define        MAP_SHARED      0x0001  /* share changes */
+#endif
 #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_LOWER1M    0x0080          /* physically below 16MB */
 #define        MAP_ALIGNMENT_64KB      MAP_ALIGN64K
+#define        MAP_IPC_SHARED  0x0100  /* share changes */
 
 /*
  * Error indicator returned by mmap(2)
index d94d641b39ff1aa8c51eebc369b8023c11ba36bf..b90bf73cb50a40ca40988d86b2523c002296af1b 100644 (file)
@@ -74,7 +74,7 @@ PUBLIC int do_shmget(message *m)
                memset(shm, 0, sizeof(struct shm_struct));
                shm->page = (vir_bytes) mmap(0, size,
                                        PROT_READ|PROT_WRITE,
-                                       MAP_CONTIG|MAP_PREALLOC|MAP_ANON|MAP_SHARED,
+                                       MAP_CONTIG|MAP_PREALLOC|MAP_ANON|MAP_IPC_SHARED,
                                        -1, 0);
                if (shm->page == (vir_bytes) MAP_FAILED)
                        return ENOMEM;
index 02f02ac0b3bc037c397de65467f47d69577824f6..13ef4ca87284a60f5ab9071e96074f93bc279aa2 100644 (file)
@@ -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_WRITE) ? 'w' : '-',
        (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);
   (*n)++;
 }
index 58176867834d9aa6bea97f1746f35ea9a6b5a83a..e460c105819ca2188a4d30870b2b48096ab09f81 100644 (file)
@@ -368,7 +368,7 @@ PRIVATE int dump_regions(int slot)
                                (vri[i].vri_prot & PROT_READ) ? 'r' : '-',
                                (vri[i].vri_prot & PROT_WRITE) ? 'w' : '-',
                                (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++;
                }
index 4c67ed989664ce0170eae7065ce6a5fe6f9b6271..ce238887e3fe1324a45cd284d93acf5c16040b29 100644 (file)
@@ -68,7 +68,14 @@ PUBLIC int do_mmap(message *m)
                if(m->VMM_FLAGS & MAP_LOWER16M) vrflags |= VR_LOWER16MB;
                if(m->VMM_FLAGS & MAP_LOWER1M)  vrflags |= VR_LOWER1MB;
                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(len % VM_PAGE_SIZE)
index 081ab1ca42cc9fdfad9ce15d500ca00f5b55cc83..c44062f85feb8181245df4fea7c873742910c818 100644 (file)
@@ -1999,7 +1999,7 @@ PUBLIC int get_region_info(struct vmproc *vmp, struct vm_region_info *vri,
                if (!(vr->flags & VR_WRITABLE))
                        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;
                region_incr_iter(&v_iter);