diff options
Diffstat (limited to 'sys/uvm')
-rw-r--r-- | sys/uvm/uvm_extern.h | 35 | ||||
-rw-r--r-- | sys/uvm/uvm_fault.c | 4 | ||||
-rw-r--r-- | sys/uvm/uvm_init.c | 6 | ||||
-rw-r--r-- | sys/uvm/uvm_km.c | 22 | ||||
-rw-r--r-- | sys/uvm/uvm_mmap.c | 9 | ||||
-rw-r--r-- | sys/uvm/uvm_unix.c | 4 |
6 files changed, 42 insertions, 38 deletions
diff --git a/sys/uvm/uvm_extern.h b/sys/uvm/uvm_extern.h index 8656b4cdad4..75fe80365b8 100644 --- a/sys/uvm/uvm_extern.h +++ b/sys/uvm/uvm_extern.h @@ -1,4 +1,4 @@ -/* $OpenBSD: uvm_extern.h,v 1.125 2014/12/05 04:12:48 uebayasi Exp $ */ +/* $OpenBSD: uvm_extern.h,v 1.126 2014/12/15 02:24:23 guenther Exp $ */ /* $NetBSD: uvm_extern.h,v 1.57 2001/03/09 01:02:12 chs Exp $ */ /* @@ -80,24 +80,29 @@ typedef struct vm_map *vm_map_t; struct vm_page; typedef struct vm_page *vm_page_t; +/* + * Bit assignments assigned by UVM_MAPFLAG() and extracted by + * UVM_{PROTECTION,INHERIT,MAXPROTECTION,ADVICE}(): + * bits 0-2 protection + * bit 3 unused + * bits 4-5 inheritance + * bits 6-7 unused + * bits 8-10 max protection + * bit 11 unused + * bits 12-14 advice + * bit 15 unused + * bits 16-N flags + */ + /* protections bits */ #define PROT_MASK (PROT_READ | PROT_WRITE | PROT_EXEC) -/* 0x08: not used */ /* inherit codes */ -#define UVM_INH_MASK 0x30 /* inherit mask */ -#define UVM_INH_SHARE 0x00 /* "share" */ -#define UVM_INH_COPY 0x10 /* "copy" */ -#define UVM_INH_NONE 0x20 /* "none" */ -#define UVM_INH_ZERO 0x30 /* "zero" */ - -/* 0x40, 0x80: not used */ -/* bits 0x700: max protection, 0x800: not used */ -/* bits 0x7000: advice, 0x8000: not used */ +#define MAP_INHERIT_MASK 0x3 /* inherit mask */ typedef int vm_prot_t; -#define UVM_ADV_MASK 0x7 /* mask */ +#define MADV_MASK 0x7 /* mask */ /* mapping flags */ #define UVM_FLAG_FIXED 0x0010000 /* find space */ @@ -112,12 +117,12 @@ typedef int vm_prot_t; /* macros to extract info */ #define UVM_PROTECTION(X) ((X) & PROT_MASK) -#define UVM_INHERIT(X) (((X) & UVM_INH_MASK) >> 4) +#define UVM_INHERIT(X) (((X) >> 4) & MAP_INHERIT_MASK) #define UVM_MAXPROTECTION(X) (((X) >> 8) & PROT_MASK) -#define UVM_ADVICE(X) (((X) >> 12) & UVM_ADV_MASK) +#define UVM_ADVICE(X) (((X) >> 12) & MADV_MASK) #define UVM_MAPFLAG(prot, maxprot, inh, advice, flags) \ - (((maxprot) << 8) | (prot) | (inh) | ((advice) << 12) | (flags)) + ((prot) | ((maxprot) << 8) | ((inh) << 4) | ((advice) << 12) | (flags)) /* magic offset value */ #define UVM_UNKNOWN_OFFSET ((voff_t) -1) diff --git a/sys/uvm/uvm_fault.c b/sys/uvm/uvm_fault.c index 4c7cf86f945..fb6179393c1 100644 --- a/sys/uvm/uvm_fault.c +++ b/sys/uvm/uvm_fault.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uvm_fault.c,v 1.79 2014/11/16 12:31:00 deraadt Exp $ */ +/* $OpenBSD: uvm_fault.c,v 1.80 2014/12/15 02:24:23 guenther Exp $ */ /* $NetBSD: uvm_fault.c,v 1.51 2000/08/06 00:22:53 thorpej Exp $ */ /* @@ -151,7 +151,7 @@ struct uvm_advice { /* * page range array: set up in uvmfault_init(). */ -static struct uvm_advice uvmadvice[UVM_ADV_MASK + 1]; +static struct uvm_advice uvmadvice[MADV_MASK + 1]; #define UVM_MAXRANGE 16 /* must be max() of nback+nforw+1 */ diff --git a/sys/uvm/uvm_init.c b/sys/uvm/uvm_init.c index b6120802173..6efe21078e8 100644 --- a/sys/uvm/uvm_init.c +++ b/sys/uvm/uvm_init.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uvm_init.c,v 1.35 2014/11/16 12:31:00 deraadt Exp $ */ +/* $OpenBSD: uvm_init.c,v 1.36 2014/12/15 02:24:23 guenther Exp $ */ /* $NetBSD: uvm_init.c,v 1.14 2000/06/27 17:29:23 mrg Exp $ */ /* @@ -148,14 +148,14 @@ uvm_init(void) kvm_start = trunc_page(DEADBEEF0) - PAGE_SIZE; if (uvm_map(kernel_map, &kvm_start, 3 * PAGE_SIZE, NULL, UVM_UNKNOWN_OFFSET, 0, UVM_MAPFLAG(PROT_NONE, - PROT_NONE, UVM_INH_NONE, POSIX_MADV_RANDOM, UVM_FLAG_FIXED))) + PROT_NONE, MAP_INHERIT_NONE, POSIX_MADV_RANDOM, UVM_FLAG_FIXED))) panic("uvm_init: cannot reserve dead beef @0x%x", DEADBEEF0); #endif #ifdef DEADBEEF1 kvm_start = trunc_page(DEADBEEF1) - PAGE_SIZE; if (uvm_map(kernel_map, &kvm_start, 3 * PAGE_SIZE, NULL, UVM_UNKNOWN_OFFSET, 0, UVM_MAPFLAG(PROT_NONE, - PROT_NONE, UVM_INH_NONE, POSIX_MADV_RANDOM, UVM_FLAG_FIXED))) + PROT_NONE, MAP_INHERIT_NONE, POSIX_MADV_RANDOM, UVM_FLAG_FIXED))) panic("uvm_init: cannot reserve dead beef @0x%x", DEADBEEF1); #endif /* diff --git a/sys/uvm/uvm_km.c b/sys/uvm/uvm_km.c index d0f21231d5c..53ddeef501c 100644 --- a/sys/uvm/uvm_km.c +++ b/sys/uvm/uvm_km.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uvm_km.c,v 1.121 2014/11/27 21:40:52 kettenis Exp $ */ +/* $OpenBSD: uvm_km.c,v 1.122 2014/12/15 02:24:23 guenther Exp $ */ /* $NetBSD: uvm_km.c,v 1.42 2001/01/14 02:10:01 thorpej Exp $ */ /* @@ -184,7 +184,7 @@ uvm_km_init(vaddr_t start, vaddr_t end) if (base != start && uvm_map(&kernel_map_store, &base, start - base, NULL, UVM_UNKNOWN_OFFSET, 0, UVM_MAPFLAG(PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE, - UVM_INH_NONE, POSIX_MADV_RANDOM, UVM_FLAG_FIXED)) != 0) + MAP_INHERIT_NONE, POSIX_MADV_RANDOM, UVM_FLAG_FIXED)) != 0) panic("uvm_km_init: could not reserve space for kernel"); kernel_map = &kernel_map_store; @@ -211,7 +211,7 @@ uvm_km_suballoc(struct vm_map *map, vaddr_t *min, vaddr_t *max, vsize_t size, /* first allocate a blank spot in the parent map */ if (uvm_map(map, min, size, NULL, UVM_UNKNOWN_OFFSET, 0, UVM_MAPFLAG(PROT_READ | PROT_WRITE, - PROT_READ | PROT_WRITE, UVM_INH_NONE, + PROT_READ | PROT_WRITE, MAP_INHERIT_NONE, POSIX_MADV_RANDOM, mapflags)) != 0) { panic("uvm_km_suballoc: unable to allocate space in parent map"); } @@ -341,7 +341,7 @@ uvm_km_kmemalloc_pla(struct vm_map *map, struct uvm_object *obj, vsize_t size, /* allocate some virtual space */ if (__predict_false(uvm_map(map, &kva, size, obj, UVM_UNKNOWN_OFFSET, valign, UVM_MAPFLAG(PROT_READ | PROT_WRITE, - PROT_READ | PROT_WRITE, UVM_INH_NONE, + PROT_READ | PROT_WRITE, MAP_INHERIT_NONE, POSIX_MADV_RANDOM, (flags & UVM_KMF_TRYLOCK))) != 0)) { return(0); } @@ -460,7 +460,7 @@ uvm_km_alloc1(struct vm_map *map, vsize_t size, vsize_t align, boolean_t zeroit) UVM_UNKNOWN_OFFSET, align, UVM_MAPFLAG(PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE | PROT_EXEC, - UVM_INH_NONE, POSIX_MADV_RANDOM, 0)) != 0)) { + MAP_INHERIT_NONE, POSIX_MADV_RANDOM, 0)) != 0)) { return(0); } @@ -548,7 +548,7 @@ uvm_km_valloc_align(struct vm_map *map, vsize_t size, vsize_t align, int flags) if (__predict_false(uvm_map(map, &kva, size, uvm.kernel_object, UVM_UNKNOWN_OFFSET, align, UVM_MAPFLAG(PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE, - UVM_INH_NONE, POSIX_MADV_RANDOM, flags)) != 0)) { + MAP_INHERIT_NONE, POSIX_MADV_RANDOM, flags)) != 0)) { return(0); } @@ -583,7 +583,7 @@ uvm_km_valloc_prefer_wait(struct vm_map *map, vsize_t size, voff_t prefer) if (__predict_true(uvm_map(map, &kva, size, uvm.kernel_object, prefer, 0, UVM_MAPFLAG(PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE, - UVM_INH_NONE, POSIX_MADV_RANDOM, 0)) == 0)) { + MAP_INHERIT_NONE, POSIX_MADV_RANDOM, 0)) == 0)) { return(kva); } @@ -667,7 +667,7 @@ uvm_km_page_init(void) if (uvm_map(kernel_map, &addr, (vsize_t)bulk << PAGE_SHIFT, NULL, UVM_UNKNOWN_OFFSET, 0, UVM_MAPFLAG(PROT_READ | PROT_WRITE, - PROT_READ | PROT_WRITE, UVM_INH_NONE, + PROT_READ | PROT_WRITE, MAP_INHERIT_NONE, POSIX_MADV_RANDOM, UVM_KMF_TRYLOCK)) != 0) { bulk /= 2; continue; @@ -732,7 +732,7 @@ uvm_km_thread(void *arg) */ flags = UVM_MAPFLAG(PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE, - UVM_INH_NONE, POSIX_MADV_RANDOM, + MAP_INHERIT_NONE, POSIX_MADV_RANDOM, fp != NULL ? UVM_KMF_TRYLOCK : 0); memset(pg, 0, sizeof(pg)); for (i = 0; i < nitems(pg); i++) { @@ -746,7 +746,7 @@ uvm_km_thread(void *arg) /* made progress, so don't sleep for more */ flags = UVM_MAPFLAG(PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE, - UVM_INH_NONE, POSIX_MADV_RANDOM, + MAP_INHERIT_NONE, POSIX_MADV_RANDOM, UVM_KMF_TRYLOCK); } @@ -920,7 +920,7 @@ try_map: map = *kv->kv_map; va = vm_map_min(map); if (uvm_map(map, &va, sz, uobj, kd->kd_prefer, - kv->kv_align, UVM_MAPFLAG(prot, prot, UVM_INH_NONE, + kv->kv_align, UVM_MAPFLAG(prot, prot, MAP_INHERIT_NONE, POSIX_MADV_RANDOM, mapflags))) { if (kv->kv_wait && kd->kd_waitok) { tsleep(map, PVM, "km_allocva", 0); diff --git a/sys/uvm/uvm_mmap.c b/sys/uvm/uvm_mmap.c index 10e92411f0b..860cb79bba0 100644 --- a/sys/uvm/uvm_mmap.c +++ b/sys/uvm/uvm_mmap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uvm_mmap.c,v 1.101 2014/12/09 07:16:41 doug Exp $ */ +/* $OpenBSD: uvm_mmap.c,v 1.102 2014/12/15 02:24:23 guenther Exp $ */ /* $NetBSD: uvm_mmap.c,v 1.49 2001/02/18 21:19:08 chs Exp $ */ /* @@ -892,8 +892,7 @@ sys_munlockall(struct proc *p, void *v, register_t *retval) * uvm_mmap: internal version of mmap * * - used by sys_mmap, exec, and sysv shm - * - handle is a vnode pointer or NULL for MAP_ANON (XXX: not true, - * sysv shm uses "named anonymous memory") + * - handle is a vnode pointer or ignored for MAP_ANON * - caller must page-align the file offset */ int @@ -1010,8 +1009,8 @@ uvm_mmap(vm_map_t map, vaddr_t *addr, vsize_t size, vm_prot_t prot, /* set up mapping flags */ uvmflag = UVM_MAPFLAG(prot, maxprot, - (flags & MAP_SHARED) ? UVM_INH_SHARE : UVM_INH_COPY, - advice, uvmflag); + (flags & MAP_SHARED) ? MAP_INHERIT_SHARE : MAP_INHERIT_COPY, + advice, uvmflag); error = uvm_map(map, addr, size, uobj, foff, align, uvmflag); diff --git a/sys/uvm/uvm_unix.c b/sys/uvm/uvm_unix.c index 424ab04e1db..4e28942df14 100644 --- a/sys/uvm/uvm_unix.c +++ b/sys/uvm/uvm_unix.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uvm_unix.c,v 1.52 2014/11/17 03:15:58 deraadt Exp $ */ +/* $OpenBSD: uvm_unix.c,v 1.53 2014/12/15 02:24:23 guenther Exp $ */ /* $NetBSD: uvm_unix.c,v 1.18 2000/09/13 15:00:25 thorpej Exp $ */ /* @@ -86,7 +86,7 @@ sys_obreak(struct proc *p, void *v, register_t *retval) error = uvm_map(&vm->vm_map, &old, new - old, NULL, UVM_UNKNOWN_OFFSET, 0, UVM_MAPFLAG(PROT_READ | PROT_WRITE, - PROT_READ | PROT_WRITE | PROT_EXEC, UVM_INH_COPY, + PROT_READ | PROT_WRITE | PROT_EXEC, MAP_INHERIT_COPY, POSIX_MADV_NORMAL, UVM_FLAG_AMAPPAD|UVM_FLAG_FIXED| UVM_FLAG_OVERLAY|UVM_FLAG_COPYONW)); if (error) { |