aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy@goop.org>2008-06-25 00:19:06 -0400
committerIngo Molnar <mingo@elte.hu>2008-07-08 07:10:30 -0400
commitfb15a9b3047a245a30a51696e4d8e29b1175a598 (patch)
tree422a2347cc8f819bddcc0d55e671ad612565fefa
parente7a9b0b3c32aa13f4c766eb6a4e7038260718d4c (diff)
x86: unify pgd_index
pgd_index is common for 32 and 64-bit, so move it to a common place. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Cc: xen-devel <xen-devel@lists.xensource.com> Cc: Stephen Tweedie <sct@redhat.com> Cc: Eduardo Habkost <ehabkost@redhat.com> Cc: Mark McLoughlin <markmc@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--include/asm-x86/pgtable.h20
-rw-r--r--include/asm-x86/pgtable_32.h20
-rw-r--r--include/asm-x86/pgtable_64.h3
3 files changed, 20 insertions, 23 deletions
diff --git a/include/asm-x86/pgtable.h b/include/asm-x86/pgtable.h
index 1330e7487da1..85f851a0b998 100644
--- a/include/asm-x86/pgtable.h
+++ b/include/asm-x86/pgtable.h
@@ -357,6 +357,26 @@ void set_pte_vaddr(unsigned long vaddr, pte_t pte);
357# include "pgtable_64.h" 357# include "pgtable_64.h"
358#endif 358#endif
359 359
360/*
361 * the pgd page can be thought of an array like this: pgd_t[PTRS_PER_PGD]
362 *
363 * this macro returns the index of the entry in the pgd page which would
364 * control the given virtual address
365 */
366#define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1))
367
368/*
369 * pgd_offset() returns a (pgd_t *)
370 * pgd_index() is used get the offset into the pgd page's array of pgd_t's;
371 */
372#define pgd_offset(mm, address) ((mm)->pgd + pgd_index((address)))
373/*
374 * a shortcut which implies the use of the kernel's pgd, instead
375 * of a process's
376 */
377#define pgd_offset_k(address) pgd_offset(&init_mm, (address))
378
379
360#define KERNEL_PGD_BOUNDARY pgd_index(PAGE_OFFSET) 380#define KERNEL_PGD_BOUNDARY pgd_index(PAGE_OFFSET)
361#define KERNEL_PGD_PTRS (PTRS_PER_PGD - KERNEL_PGD_BOUNDARY) 381#define KERNEL_PGD_PTRS (PTRS_PER_PGD - KERNEL_PGD_BOUNDARY)
362 382
diff --git a/include/asm-x86/pgtable_32.h b/include/asm-x86/pgtable_32.h
index 32ca03109a4c..ec871c420d7e 100644
--- a/include/asm-x86/pgtable_32.h
+++ b/include/asm-x86/pgtable_32.h
@@ -113,26 +113,6 @@ extern unsigned long pg0[];
113 */ 113 */
114#define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot)) 114#define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), (pgprot))
115 115
116/*
117 * the pgd page can be thought of an array like this: pgd_t[PTRS_PER_PGD]
118 *
119 * this macro returns the index of the entry in the pgd page which would
120 * control the given virtual address
121 */
122#define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1))
123#define pgd_index_k(addr) pgd_index((addr))
124
125/*
126 * pgd_offset() returns a (pgd_t *)
127 * pgd_index() is used get the offset into the pgd page's array of pgd_t's;
128 */
129#define pgd_offset(mm, address) ((mm)->pgd + pgd_index((address)))
130
131/*
132 * a shortcut which implies the use of the kernel's pgd, instead
133 * of a process's
134 */
135#define pgd_offset_k(address) pgd_offset(&init_mm, (address))
136 116
137static inline int pud_large(pud_t pud) { return 0; } 117static inline int pud_large(pud_t pud) { return 0; }
138 118
diff --git a/include/asm-x86/pgtable_64.h b/include/asm-x86/pgtable_64.h
index 23f35fff5fca..9a9350abe4ef 100644
--- a/include/asm-x86/pgtable_64.h
+++ b/include/asm-x86/pgtable_64.h
@@ -190,9 +190,6 @@ static inline int pmd_bad(pmd_t pmd)
190#define pgd_page_vaddr(pgd) \ 190#define pgd_page_vaddr(pgd) \
191 ((unsigned long)__va((unsigned long)pgd_val((pgd)) & PTE_MASK)) 191 ((unsigned long)__va((unsigned long)pgd_val((pgd)) & PTE_MASK))
192#define pgd_page(pgd) (pfn_to_page(pgd_val((pgd)) >> PAGE_SHIFT)) 192#define pgd_page(pgd) (pfn_to_page(pgd_val((pgd)) >> PAGE_SHIFT))
193#define pgd_index(address) (((address) >> PGDIR_SHIFT) & (PTRS_PER_PGD - 1))
194#define pgd_offset(mm, address) ((mm)->pgd + pgd_index((address)))
195#define pgd_offset_k(address) (init_level4_pgt + pgd_index((address)))
196#define pgd_present(pgd) (pgd_val(pgd) & _PAGE_PRESENT) 193#define pgd_present(pgd) (pgd_val(pgd) & _PAGE_PRESENT)
197static inline int pgd_large(pgd_t pgd) { return 0; } 194static inline int pgd_large(pgd_t pgd) { return 0; }
198#define mk_kernel_pgd(address) __pgd((address) | _KERNPG_TABLE) 195#define mk_kernel_pgd(address) __pgd((address) | _KERNPG_TABLE)