Trivial pgtable.h __ASSEMBLY__ move
PATCH 1/4 Trivial pgtable.h __ASSEMBLY__ move
[ Set of trivial cleanups taken from paravirt_ops work, please merge ]
Parsing generic pgtable.h in assembler is simply crazy. None of this file is needed in assembler code, and C inline functions and structures routine break one or more different compiles.
include/asm-generic/pgtable.h +2 -1
@@ -1,6 +1,8 @@#ifndef _ASM_GENERIC_PGTABLE_H#define _ASM_GENERIC_PGTABLE_H +#ifndef __ASSEMBLY__ +#ifndef __HAVE_ARCH_PTEP_ESTABLISH/* * Establish a new mapping:
@@ -188,7 +190,6 @@ static inline void ptep_set_wrprotect(st })#endif -#ifndef __ASSEMBLY__/* * When walking page tables, we usually want to skip any p?d_none entries; * and any p?d_bad entries - reporting the error before resetting to none.
Signature · 1 line
Help! Save Australia from the worst of the DMCA: http://linux.org.au/law
PATCH 2/4 Trivial move of __HAVE macros in i386 pagetable headers
Move the __HAVE_ARCH_PTEP defines to accompany the function definitions. Anything else is just a complete nightmare to track through the 2/3-level paging code, and this caused duplicate definitions to be needed (pte_same), which could have easily been taken care of with the asm-generic pgtable functions.
include/asm-i386/pgtable-2level.h +2 -1
@@ -21,8 +21,9 @@#define pte_clear (mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0)#define pmd_clear (xp) do { set_pmd(xp, __pmd(0)); } while (0) +#define __HAVE_ARCH_PTEP_GET_AND_CLEAR#define ptep_get_and_clear (mm,addr,xp) __pte(xchg(&(xp)->pte_low, 0)) -#define pte_same (a, b) ((a).pte_low == (b).pte_low) +#define pte_page (x) pfn_to_page(pte_pfn(x))#define pte_none (x) (!(x).pte_low)#define pte_pfn (x) ((unsigned long)(((x).pte_low >> PAGE_SHIFT)))
include/asm-i386/pgtable-3level.h +2 -0
@@ -105,6 +105,7 @@ static inline void pmd_clear(pmd_t *pmd) *(tmp +1 ) =0 ; } +#define __HAVE_ARCH_PTEP_GET_AND_CLEARstatic inline pte_t ptep_get_and_clear (struct mm_struct *mm,unsigned long addr,pte_t *ptep) {pte_t res;
@@ -117,6 +118,7 @@ static inline pte_t ptep_get_and_clear(sreturn res; } +#define __HAVE_ARCH_PTE_SAMEstatic inline int pte_same (pte_t a,pte_t b) {return a.pte_low == b.pte_low && a.pte_high == b.pte_high;
include/asm-i386/pgtable.h +4 -6
@@ -246,6 +246,7 @@ static inline pte_t pte_mkhuge(pte_t pte# include <asm/pgtable-2level.h> #endif +#define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTYstatic inline int ptep_test_and_clear_dirty (struct vm_area_struct *vma,unsigned long addr,pte_t *ptep) {if (!pte_dirty (*ptep))
@@ -253,6 +254,7 @@ static inline int ptep_test_and_clear_direturn test_and_clear_bit (_PAGE_BIT_DIRTY, &ptep->pte_low); } +#define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNGstatic inline int ptep_test_and_clear_young (struct vm_area_struct *vma,unsigned long addr,pte_t *ptep) {if (!pte_young (*ptep))
@@ -260,6 +262,7 @@ static inline int ptep_test_and_clear_yoreturn test_and_clear_bit (_PAGE_BIT_ACCESSED, &ptep->pte_low); } +#define __HAVE_ARCH_PTEP_GET_AND_CLEAR_FULLstatic inline pte_t ptep_get_and_clear_full (struct mm_struct *mm,unsigned long addr,pte_t *ptep,int full) {pte_t pte;
@@ -272,6 +275,7 @@ static inline pte_t ptep_get_and_clear_freturn pte; } +#define __HAVE_ARCH_PTEP_SET_WRPROTECTstatic inline void ptep_set_wrprotect (struct mm_struct *mm,unsigned long addr,pte_t *ptep) {clear_bit (_PAGE_BIT_RW, &ptep->pte_low);
@@ -441,12 +445,6 @@ extern void noexec_setup(const char *str#define GET_IOSPACE (pfn) 0#define GET_PFN (pfn) (pfn) -#define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG -#define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTY -#define __HAVE_ARCH_PTEP_GET_AND_CLEAR -#define __HAVE_ARCH_PTEP_GET_AND_CLEAR_FULL -#define __HAVE_ARCH_PTEP_SET_WRPROTECT -#define __HAVE_ARCH_PTE_SAME#include <asm-generic/pgtable.h> #endif /* _I386_PGTABLE_H */
Signature · 1 line
Help! Save Australia from the worst of the DMCA: http://linux.org.au/law
PATCH 3/4 Trivial move of ptep_set_access_flags
Move ptep_set_access_flags to be closer to the other ptep accessors, and make the indentation standard.
include/asm-i386/pgtable.h +16 -15
@@ -246,6 +246,22 @@ static inline pte_t pte_mkhuge(pte_t pte# include <asm/pgtable-2level.h> #endif +/* +* We only update the dirty/accessed state if we set +* the dirty bit by hand in the kernel, since the hardware +* will do the accessed bit for us, and we don't want to +* race with other CPU's that might be updating the dirty +* bit at the same time. +*/ +#define __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS +#define ptep_set_access_flags (vma, address, ptep, entry, dirty) \ +do { \ + if (dirty) { \ + (ptep)->pte_low = (entry).pte_low; \ + flush_tlb_page(vma, address); \ + } \ +} while (0) +#define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_DIRTYstatic inline int ptep_test_and_clear_dirty (struct vm_area_struct *vma,unsigned long addr,pte_t *ptep) {
@@ -415,23 +431,8 @@ extern void noexec_setup(const char *str/* * The i386 doesn't have any external MMU info: the kernel page * tables contain all the necessary information. -* -* Also, we only update the dirty/accessed state if we set -* the dirty bit by hand in the kernel, since the hardware -* will do the accessed bit for us, and we don't want to -* race with other CPU's that might be updating the dirty -* bit at the same time. */ #define update_mmu_cache (vma,address,pte) do { } while (0) -#define __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS -#define ptep_set_access_flags (__vma, __address, __ptep, __entry, __dirty) \ - do { \ - if (__dirty) { \ - (__ptep)->pte_low = (__entry).pte_low; \ - flush_tlb_page(__vma, __address); \ - } \ - } while (0) -#endif /* !__ASSEMBLY__ */ #ifdef CONFIG_FLATMEM
Signature · 1 line
Help! Save Australia from the worst of the DMCA: http://linux.org.au/law
PATCH 4/4 Remove unused include from efi_stub.S
Remove unnecessary include from efi_stub.S
arch/i386/kernel/efi_stub.S +0 -1
@@ -7,7 +7,6 @@ #include <linux/linkage.h> #include <asm/page.h> -#include <asm/pgtable.h> /* * efi_call_phys(void *, ...) is a function with variable parameters.
Signature · 1 line
Help! Save Australia from the worst of the DMCA: http://linux.org.au/law