summaryrefslogtreecommitdiff
path: root/vm/vm_map.h
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2013-06-15 17:16:26 +0200
committerRichard Braun <rbraun@sceen.net>2013-06-15 17:16:26 +0200
commit44f8bf7d26bf21cc66d2fc8c14a924ed2e1b4f0f (patch)
tree1e63214f90c0c46140ff0e3c70c24f45052d3b15 /vm/vm_map.h
parentcb92d9b44686dae10f94a410c5cab93ff29f7208 (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.h67
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.