powerpc/mm: Implement helpers for pagetable fragment support at PMD level
[linux-2.6-block.git] / arch / powerpc / include / asm / book3s / 64 / pgtable.h
index a6b9f1d746002cd3479686603c76322d52676db9..c9db19512b3cbe17cc57cb7b0591ab68068e93e1 100644 (file)
 /* Max physical address bit as per radix table */
 #define _RPAGE_PA_MAX          57
 
-#ifdef CONFIG_PPC_MEM_KEYS
-#ifdef CONFIG_PPC_64K_PAGES
-#define H_PTE_PKEY_BIT0        _RPAGE_RSV1
-#define H_PTE_PKEY_BIT1        _RPAGE_RSV2
-#else /* CONFIG_PPC_64K_PAGES */
-#define H_PTE_PKEY_BIT0        0 /* _RPAGE_RSV1 is not available */
-#define H_PTE_PKEY_BIT1        0 /* _RPAGE_RSV2 is not available */
-#endif /* CONFIG_PPC_64K_PAGES */
-#define H_PTE_PKEY_BIT2        _RPAGE_RSV3
-#define H_PTE_PKEY_BIT3        _RPAGE_RSV4
-#define H_PTE_PKEY_BIT4        _RPAGE_RSV5
-#else /*  CONFIG_PPC_MEM_KEYS */
-#define H_PTE_PKEY_BIT0        0
-#define H_PTE_PKEY_BIT1        0
-#define H_PTE_PKEY_BIT2        0
-#define H_PTE_PKEY_BIT3        0
-#define H_PTE_PKEY_BIT4        0
-#endif /*  CONFIG_PPC_MEM_KEYS */
-
 /*
  * Max physical address bit we will use for now.
  *
@@ -265,6 +246,12 @@ extern unsigned long __pte_frag_size_shift;
 #define PTE_FRAG_SIZE_SHIFT __pte_frag_size_shift
 #define PTE_FRAG_SIZE (1UL << PTE_FRAG_SIZE_SHIFT)
 
+extern unsigned long __pmd_frag_nr;
+#define PMD_FRAG_NR __pmd_frag_nr
+extern unsigned long __pmd_frag_size_shift;
+#define PMD_FRAG_SIZE_SHIFT __pmd_frag_size_shift
+#define PMD_FRAG_SIZE (1UL << PMD_FRAG_SIZE_SHIFT)
+
 #define PTRS_PER_PTE   (1 << PTE_INDEX_SIZE)
 #define PTRS_PER_PMD   (1 << PMD_INDEX_SIZE)
 #define PTRS_PER_PUD   (1 << PUD_INDEX_SIZE)
@@ -292,6 +279,16 @@ extern unsigned long __pte_frag_size_shift;
 /* Bits to mask out from a PGD to get to the PUD page */
 #define PGD_MASKED_BITS                0xc0000000000000ffUL
 
+/*
+ * Used as an indicator for rcu callback functions
+ */
+enum pgtable_index {
+       PTE_INDEX = 0,
+       PMD_INDEX,
+       PUD_INDEX,
+       PGD_INDEX,
+};
+
 extern unsigned long __vmalloc_start;
 extern unsigned long __vmalloc_end;
 #define VMALLOC_START  __vmalloc_start