diff options
author | Richard Braun <rbraun@sceen.net> | 2013-06-15 17:16:26 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2013-06-15 17:16:26 +0200 |
commit | 44f8bf7d26bf21cc66d2fc8c14a924ed2e1b4f0f (patch) | |
tree | 1e63214f90c0c46140ff0e3c70c24f45052d3b15 /vm/vm_map.h | |
parent | cb92d9b44686dae10f94a410c5cab93ff29f7208 (diff) |
vm/vm_map: rework flags
Add vm/vm_adv.h for VM_ADV_xxx advice macros, and directly use
VM_{ADV,INHERIT,PROT}_xxx macros in the "packed" format used for mapping
requests and in map entries. This allows simpler comparisons between
stored flags and user provided values.
Diffstat (limited to 'vm/vm_map.h')
-rw-r--r-- | vm/vm_map.h | 67 |
1 files changed, 24 insertions, 43 deletions
diff --git a/vm/vm_map.h b/vm/vm_map.h index 3847001c..c68072d7 100644 --- a/vm/vm_map.h +++ b/vm/vm_map.h @@ -26,58 +26,39 @@ #include <kern/rbtree.h> #include <kern/stdint.h> #include <machine/pmap.h> +#include <vm/vm_adv.h> +#include <vm/vm_inherit.h> +#include <vm/vm_prot.h> /* - * Mapping flags and masks. + * Mapping flags. * - * All these flags can be used when creating a mapping. Most of them are - * also used as map entry flags. + * Unless otherwise mentioned, these can also be used as map entry flags. */ -#define VM_MAP_PROT_READ 0x00001 -#define VM_MAP_PROT_WRITE 0x00002 -#define VM_MAP_PROT_EXEC 0x00004 -#define VM_MAP_PROT_ALL (VM_MAP_PROT_READ \ - | VM_MAP_PROT_WRITE \ - | VM_MAP_PROT_EXEC) -#define VM_MAP_PROT_MASK VM_MAP_PROT_ALL +#define VM_MAP_NOMERGE 0x10000 +#define VM_MAP_FIXED 0x20000 /* Not an entry flag */ -#define VM_MAP_MAX_PROT_READ (VM_MAP_PROT_READ << 4) -#define VM_MAP_MAX_PROT_WRITE (VM_MAP_PROT_WRITE << 4) -#define VM_MAP_MAX_PROT_EXEC (VM_MAP_PROT_EXEC << 4) -#define VM_MAP_MAX_PROT_ALL (VM_MAP_MAX_PROT_READ \ - | VM_MAP_MAX_PROT_WRITE \ - | VM_MAP_MAX_PROT_EXEC) -#define VM_MAP_MAX_PROT_MASK VM_MAP_MAX_PROT_ALL - -#define VM_MAP_INHERIT_SHARE 0x00100 -#define VM_MAP_INHERIT_COPY 0x00200 -#define VM_MAP_INHERIT_NONE 0x00400 -#define VM_MAP_INHERIT_MASK (VM_MAP_INHERIT_SHARE \ - | VM_MAP_INHERIT_COPY \ - | VM_MAP_INHERIT_NONE) - -#define VM_MAP_ADV_NORMAL 0x01000 -#define VM_MAP_ADV_RAND 0x02000 -#define VM_MAP_ADV_SEQUENTIAL 0x04000 -#define VM_MAP_ADV_WILLNEED 0x08000 -#define VM_MAP_ADV_DONTNEED 0x10000 -#define VM_MAP_ADV_MASK (VM_MAP_ADV_NORMAL \ - | VM_MAP_ADV_RAND \ - | VM_MAP_ADV_SEQUENTIAL \ - | VM_MAP_ADV_WILLNEED \ - | VM_MAP_ADV_DONTNEED) +/* + * Macro used to forge "packed" flags. + */ +#define VM_MAP_FLAGS(prot, maxprot, inherit, advice, mapflags) \ + ((prot) | ((maxprot) << 4) | ((inherit) << 8) | ((advice) << 12) \ + | (mapflags)) -#define VM_MAP_NOMERGE 0x20000 -#define VM_MAP_FIXED 0x40000 /* Not an entry flag */ +/* + * Flags usable as map entry flags. + * + * Map entry flags also use the packed format. + */ +#define VM_MAP_ENTRY_MASK (VM_MAP_NOMERGE | 0xffff) /* - * Flags that can be used as map entry flags. + * Macros used to extract specific properties out of packed flags. */ -#define VM_MAP_ENTRY_MASK (VM_MAP_PROT_MASK \ - | VM_MAP_MAX_PROT_MASK \ - | VM_MAP_INHERIT_MASK \ - | VM_MAP_ADV_MASK \ - | VM_MAP_NOMERGE) +#define VM_MAP_PROT(flags) ((flags) & 0xf) +#define VM_MAP_MAXPROT(flags) (((flags) & 0xf0) >> 4) +#define VM_MAP_INHERIT(flags) (((flags) & 0xf00) >> 8) +#define VM_MAP_ADVICE(flags) (((flags) & 0xf000) >> 12) /* * Memory range descriptor. |