mm/core, x86/mm/pkeys: Differentiate instruction fetches
[linux-2.6-block.git] / include / linux / mm.h
index 4c7317828fdafbad55538f722653701702b6b567..7955c3eb83dbf663f9aa8ebe2c719e9267b79425 100644 (file)
@@ -170,8 +170,26 @@ extern unsigned int kobjsize(const void *objp);
 #define VM_NOHUGEPAGE  0x40000000      /* MADV_NOHUGEPAGE marked this vma */
 #define VM_MERGEABLE   0x80000000      /* KSM may merge identical pages */
 
+#ifdef CONFIG_ARCH_USES_HIGH_VMA_FLAGS
+#define VM_HIGH_ARCH_BIT_0     32      /* bit only usable on 64-bit architectures */
+#define VM_HIGH_ARCH_BIT_1     33      /* bit only usable on 64-bit architectures */
+#define VM_HIGH_ARCH_BIT_2     34      /* bit only usable on 64-bit architectures */
+#define VM_HIGH_ARCH_BIT_3     35      /* bit only usable on 64-bit architectures */
+#define VM_HIGH_ARCH_0 BIT(VM_HIGH_ARCH_BIT_0)
+#define VM_HIGH_ARCH_1 BIT(VM_HIGH_ARCH_BIT_1)
+#define VM_HIGH_ARCH_2 BIT(VM_HIGH_ARCH_BIT_2)
+#define VM_HIGH_ARCH_3 BIT(VM_HIGH_ARCH_BIT_3)
+#endif /* CONFIG_ARCH_USES_HIGH_VMA_FLAGS */
+
 #if defined(CONFIG_X86)
 # define VM_PAT                VM_ARCH_1       /* PAT reserves whole VMA at once (x86) */
+#if defined (CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS)
+# define VM_PKEY_SHIFT VM_HIGH_ARCH_BIT_0
+# define VM_PKEY_BIT0  VM_HIGH_ARCH_0  /* A protection key is a 4-bit value */
+# define VM_PKEY_BIT1  VM_HIGH_ARCH_1
+# define VM_PKEY_BIT2  VM_HIGH_ARCH_2
+# define VM_PKEY_BIT3  VM_HIGH_ARCH_3
+#endif
 #elif defined(CONFIG_PPC)
 # define VM_SAO                VM_ARCH_1       /* Strong Access Ordering (powerpc) */
 #elif defined(CONFIG_PARISC)
@@ -233,6 +251,8 @@ extern pgprot_t protection_map[16];
 #define FAULT_FLAG_KILLABLE    0x10    /* The fault task is in SIGKILL killable region */
 #define FAULT_FLAG_TRIED       0x20    /* Second try */
 #define FAULT_FLAG_USER                0x40    /* The fault originated in userspace */
+#define FAULT_FLAG_REMOTE      0x80    /* faulting for non current tsk/mm */
+#define FAULT_FLAG_INSTRUCTION  0x100  /* The fault was during an instruction fetch */
 
 /*
  * vm_fault is filled by the the pagefault handler and passed to the vma's