summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorJamie Lokier <jamie@shareable.org>2003-09-04 21:42:15 -0700
committerLinus Torvalds <torvalds@home.osdl.org>2003-09-04 21:42:15 -0700
commitd04668a76d3780540b30bcbc2bc638f3f31d577d (patch)
treef0ed53195dffd315bc5d3817daeb120980f3a2c4 /include/linux
parenta1f6ff2111185f13b8611e3744b8ad272e53e10a (diff)
[PATCH] Common PROT_xxx -> VM_xxx mapping
This moves the mapping of PROT_* bits to VM_* bits from mmap.c to the common header file <linux/mman.h>. The mapping is needed for mprotect too.
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/mman.h29
1 files changed, 29 insertions, 0 deletions
diff --git a/include/linux/mman.h b/include/linux/mman.h
index a8956f6588ad..cfb6ac61bbde 100644
--- a/include/linux/mman.h
+++ b/include/linux/mman.h
@@ -2,6 +2,7 @@
#define _LINUX_MMAN_H
#include <linux/config.h>
+#include <linux/mm.h>
#include <asm/atomic.h>
#include <asm/mman.h>
@@ -27,4 +28,32 @@ static inline void vm_unacct_memory(long pages)
vm_acct_memory(-pages);
}
+/* Optimisation macro. */
+#define _calc_vm_trans(x,bit1,bit2) \
+ ((bit1) <= (bit2) ? ((x) & (bit1)) * ((bit2) / (bit1)) \
+ : ((x) & (bit1)) / ((bit1) / (bit2)))
+
+/*
+ * Combine the mmap "prot" argument into "vm_flags" used internally.
+ */
+static inline unsigned long
+calc_vm_prot_bits(unsigned long prot)
+{
+ return _calc_vm_trans(prot, PROT_READ, VM_READ ) |
+ _calc_vm_trans(prot, PROT_WRITE, VM_WRITE) |
+ _calc_vm_trans(prot, PROT_EXEC, VM_EXEC );
+}
+
+/*
+ * Combine the mmap "flags" argument into "vm_flags" used internally.
+ */
+static inline unsigned long
+calc_vm_flag_bits(unsigned long flags)
+{
+ return _calc_vm_trans(flags, MAP_GROWSDOWN, VM_GROWSDOWN ) |
+ _calc_vm_trans(flags, MAP_DENYWRITE, VM_DENYWRITE ) |
+ _calc_vm_trans(flags, MAP_EXECUTABLE, VM_EXECUTABLE) |
+ _calc_vm_trans(flags, MAP_LOCKED, VM_LOCKED );
+}
+
#endif /* _LINUX_MMAN_H */