[PATCH 03 of 10] x86/pgtable: unify pagetable accessors

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: Ingo Molnar <mingo@...>
Cc: LKML <linux-kernel@...>, Andi Kleen <ak@...>, Glauber de Oliveira Costa <glommer@...>, Jan Beulich <jbeulich@...>
Date: Tuesday, January 8, 2008 - 6:00 pm

Unify functions to test and set bits in pagetable entries.

Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com>

---
 include/asm-x86/pgtable.h    |   28 ++++++++++++++++++++++++++++
 include/asm-x86/pgtable_32.h |   25 -------------------------
 include/asm-x86/pgtable_64.h |   26 --------------------------
 3 files changed, 28 insertions(+), 51 deletions(-)

diff --git a/include/asm-x86/pgtable.h b/include/asm-x86/pgtable.h
--- a/include/asm-x86/pgtable.h
+++ b/include/asm-x86/pgtable.h
@@ -109,6 +109,34 @@ extern unsigned long long __PAGE_KERNEL,
 #define __S110	PAGE_SHARED_EXEC
 #define __S111	PAGE_SHARED_EXEC
 
+#ifndef __ASSEMBLER__
+/*
+ * The following only work if pte_present() is true.
+ * Undefined behaviour if not..
+ */
+static inline int pte_dirty(pte_t pte)		{ return pte_val(pte) & _PAGE_DIRTY; }
+static inline int pte_young(pte_t pte)		{ return pte_val(pte) & _PAGE_ACCESSED; }
+static inline int pte_write(pte_t pte)		{ return pte_val(pte) & _PAGE_RW; }
+static inline int pte_file(pte_t pte)		{ return pte_val(pte) & _PAGE_FILE; }
+static inline int pte_huge(pte_t pte)		{ return pte_val(pte) & _PAGE_PSE; }
+
+static inline int pmd_large(pmd_t pte) {
+	return (pmd_val(pte) & (_PAGE_PSE|_PAGE_PRESENT)) ==
+		(_PAGE_PSE|_PAGE_PRESENT);
+}
+
+static inline pte_t pte_mkclean(pte_t pte)	{ return __pte(pte_val(pte) & ~_PAGE_DIRTY); }
+static inline pte_t pte_mkold(pte_t pte)	{ return __pte(pte_val(pte) & ~_PAGE_ACCESSED); }
+static inline pte_t pte_wrprotect(pte_t pte)	{ return __pte(pte_val(pte) & ~_PAGE_RW); }
+static inline pte_t pte_mkexec(pte_t pte)	{ return __pte(pte_val(pte) & ~_PAGE_NX); }
+static inline pte_t pte_mkdirty(pte_t pte)	{ return __pte(pte_val(pte) | _PAGE_DIRTY); }
+static inline pte_t pte_mkyoung(pte_t pte)	{ return __pte(pte_val(pte) | _PAGE_ACCESSED); }
+static inline pte_t pte_mkwrite(pte_t pte)	{ return __pte(pte_val(pte) | _PAGE_RW); }
+static inline pte_t pte_mkhuge(pte_t pte)	{ return __pte(pte_val(pte) | _PAGE_PSE); }
+static inline pte_t pte_clrhuge(pte_t pte)	{ return __pte(pte_val(pte) & ~_PAGE_PSE); }
+
+#endif	/* __ASSEMBLER__ */
+
 #ifdef CONFIG_X86_32
 # include "pgtable_32.h"
 #else
diff --git a/include/asm-x86/pgtable_32.h b/include/asm-x86/pgtable_32.h
--- a/include/asm-x86/pgtable_32.h
+++ b/include/asm-x86/pgtable_32.h
@@ -100,28 +100,6 @@ extern unsigned long pg0[];
 
 
 #define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT))
-
-/*
- * The following only work if pte_present() is true.
- * Undefined behaviour if not..
- */
-static inline int pte_dirty(pte_t pte)		{ return (pte).pte_low & _PAGE_DIRTY; }
-static inline int pte_young(pte_t pte)		{ return (pte).pte_low & _PAGE_ACCESSED; }
-static inline int pte_write(pte_t pte)		{ return (pte).pte_low & _PAGE_RW; }
-static inline int pte_huge(pte_t pte)		{ return (pte).pte_low & _PAGE_PSE; }
-
-/*
- * The following only works if pte_present() is not true.
- */
-static inline int pte_file(pte_t pte)		{ return (pte).pte_low & _PAGE_FILE; }
-
-static inline pte_t pte_mkclean(pte_t pte)	{ (pte).pte_low &= ~_PAGE_DIRTY; return pte; }
-static inline pte_t pte_mkold(pte_t pte)	{ (pte).pte_low &= ~_PAGE_ACCESSED; return pte; }
-static inline pte_t pte_wrprotect(pte_t pte)	{ (pte).pte_low &= ~_PAGE_RW; return pte; }
-static inline pte_t pte_mkdirty(pte_t pte)	{ (pte).pte_low |= _PAGE_DIRTY; return pte; }
-static inline pte_t pte_mkyoung(pte_t pte)	{ (pte).pte_low |= _PAGE_ACCESSED; return pte; }
-static inline pte_t pte_mkwrite(pte_t pte)	{ (pte).pte_low |= _PAGE_RW; return pte; }
-static inline pte_t pte_mkhuge(pte_t pte)	{ (pte).pte_low |= _PAGE_PSE; return pte; }
 
 #ifdef CONFIG_X86_PAE
 # include <asm/pgtable-3level.h>
@@ -273,9 +251,6 @@ static inline pte_t pte_modify(pte_t pte
 	return pte;
 }
 
-#define pmd_large(pmd) \
-((pmd_val(pmd) & (_PAGE_PSE|_PAGE_PRESENT)) == (_PAGE_PSE|_PAGE_PRESENT))
-
 /*
  * the pgd page can be thought of an array like this: pgd_t[PTRS_PER_PGD]
  *
diff --git a/include/asm-x86/pgtable_64.h b/include/asm-x86/pgtable_64.h
--- a/include/asm-x86/pgtable_64.h
+++ b/include/asm-x86/pgtable_64.h
@@ -173,28 +173,6 @@ static inline pte_t pfn_pte(unsigned lon
 	pte_val(pte) &= __supported_pte_mask;
 	return pte;
 }
-
-/*
- * The following only work if pte_present() is true.
- * Undefined behaviour if not..
- */
-#define __LARGE_PTE (_PAGE_PSE|_PAGE_PRESENT)
-static inline int pte_dirty(pte_t pte)		{ return pte_val(pte) & _PAGE_DIRTY; }
-static inline int pte_young(pte_t pte)		{ return pte_val(pte) & _PAGE_ACCESSED; }
-static inline int pte_write(pte_t pte)		{ return pte_val(pte) & _PAGE_RW; }
-static inline int pte_file(pte_t pte)		{ return pte_val(pte) & _PAGE_FILE; }
-static inline int pte_huge(pte_t pte)		{ return pte_val(pte) & _PAGE_PSE; }
-
-static inline pte_t pte_mkclean(pte_t pte)	{ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_DIRTY)); return pte; }
-static inline pte_t pte_mkold(pte_t pte)	{ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_ACCESSED)); return pte; }
-static inline pte_t pte_wrprotect(pte_t pte)	{ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_RW)); return pte; }
-static inline pte_t pte_mkexec(pte_t pte)	{ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_NX)); return pte; }
-static inline pte_t pte_mkdirty(pte_t pte)	{ set_pte(&pte, __pte(pte_val(pte) | _PAGE_DIRTY)); return pte; }
-static inline pte_t pte_mkyoung(pte_t pte)	{ set_pte(&pte, __pte(pte_val(pte) | _PAGE_ACCESSED)); return pte; }
-static inline pte_t pte_mkwrite(pte_t pte)	{ set_pte(&pte, __pte(pte_val(pte) | _PAGE_RW)); return pte; }
-static inline pte_t pte_mkhuge(pte_t pte)	{ set_pte(&pte, __pte(pte_val(pte) | _PAGE_PSE)); return pte; }
-static inline pte_t pte_clrhuge(pte_t pte)	{ set_pte(&pte, __pte(pte_val(pte) & ~_PAGE_PSE)); return pte; }
-
 struct vm_area_struct;
 
 static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned long addr, pte_t *ptep)
@@ -213,10 +191,6 @@ static inline void ptep_set_wrprotect(st
  * Macro to mark a page protection value as "uncacheable".
  */
 #define pgprot_noncached(prot)	(__pgprot(pgprot_val(prot) | _PAGE_PCD | _PAGE_PWT))
-
-static inline int pmd_large(pmd_t pte) { 
-	return (pmd_val(pte) & __LARGE_PTE) == __LARGE_PTE; 
-} 	
 
 
 /*


--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 00 of 10] x86: unify asm/pgtable.h, Jeremy Fitzhardinge, (Tue Jan 8, 6:00 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 6:42 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 7:12 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Jeremy Fitzhardinge, (Tue Jan 8, 7:23 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 7:28 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Jeremy Fitzhardinge, (Tue Jan 8, 8:07 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 7:44 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 8:01 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Jeremy Fitzhardinge, (Tue Jan 8, 8:13 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 8:20 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 8:28 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 8:30 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Jeremy Fitzhardinge, (Tue Jan 8, 8:53 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Andi Kleen, (Tue Jan 8, 9:11 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 8:59 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Jeremy Fitzhardinge, (Tue Jan 8, 9:07 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Andi Kleen, (Tue Jan 8, 9:12 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Jeremy Fitzhardinge, (Tue Jan 8, 9:35 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Jan Beulich, (Wed Jan 9, 5:37 am)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Andi Kleen, (Tue Jan 8, 9:42 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Jeremy Fitzhardinge, (Tue Jan 8, 9:56 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Andi Kleen, (Tue Jan 8, 10:11 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Wed Jan 9, 6:47 am)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Andi Kleen, (Wed Jan 9, 10:26 am)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Jeremy Fitzhardinge, (Tue Jan 8, 11:22 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Wed Jan 9, 6:48 am)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 9:20 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 8:43 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Jeremy Fitzhardinge, (Tue Jan 8, 9:09 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 9:16 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Jeremy Fitzhardinge, (Tue Jan 8, 9:21 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 9:37 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Andi Kleen, (Tue Jan 8, 9:18 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 9:22 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Andi Kleen, (Tue Jan 8, 9:37 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Jeremy Fitzhardinge, (Tue Jan 8, 8:55 pm)
Re: [PATCH 00 of 10] x86: unify asm/pgtable.h, Ingo Molnar, (Tue Jan 8, 7:51 pm)
[PATCH 05 of 10] x86: page.h: make pte_t a union to always i..., Jeremy Fitzhardinge, (Tue Jan 8, 6:00 pm)
[PATCH 02 of 10] x86: avoid name conflict for Voyager leave_mm, Jeremy Fitzhardinge, (Tue Jan 8, 6:00 pm)
[PATCH 09 of 10] x86: unify paravirt pagetable accessors, Jeremy Fitzhardinge, (Tue Jan 8, 6:00 pm)
[PATCH 10 of 10] xen: mask out PWT too, Jeremy Fitzhardinge, (Tue Jan 8, 6:00 pm)
Re: [PATCH 10 of 10] xen: mask out PWT too, Jan Beulich, (Wed Jan 9, 5:17 am)
Re: [PATCH 10 of 10] xen: mask out PWT too, Jeremy Fitzhardinge, (Wed Jan 9, 3:04 pm)
[PATCH 08 of 10] x86: unify zero_page definition, Jeremy Fitzhardinge, (Tue Jan 8, 6:00 pm)
[PATCH 06 of 10] x86/vmi: fix compilation as a result of pte..., Jeremy Fitzhardinge, (Tue Jan 8, 6:00 pm)
[PATCH 04 of 10] x86: unify pgtable accessors which use supp..., Jeremy Fitzhardinge, (Tue Jan 8, 6:00 pm)
[PATCH 07 of 10] x86: pgtable: unify pte accessors, Jeremy Fitzhardinge, (Tue Jan 8, 6:00 pm)
[PATCH 01 of 10] x86: move all asm/pgtable constants into on..., Jeremy Fitzhardinge, (Tue Jan 8, 6:00 pm)
[PATCH 03 of 10] x86/pgtable: unify pagetable accessors, Jeremy Fitzhardinge, (Tue Jan 8, 6:00 pm)