x86/mm: Simplify p[g4um]d_page() macros
Subsystems (2)
PATCH 1/1 x86/mm: Simplify p[g4um]d_page() macros
From: Tom Lendacky <[email protected]>
[backport of fd7e315988b78 from mainline for stable to fix stable crashes suggested by Michael Hocko. Should be applied to 4.9 and 4.4.]
Create a pgd_pfn() macro similar to the p[4um]d_pfn() macros and then use the p[g4um]d_pfn() macros in the p[g4um]d_page() macros instead of duplicating the code.
Signed-off-by Tom Lendacky <[email protected]>
Reviewed-by Thomas Gleixner <[email protected]>
Reviewed-by Borislav Petkov <[email protected]>
Cc Alexander Potapenko <[email protected]>
Cc Andrey Ryabinin <[email protected]>
Cc Andy Lutomirski <[email protected]>
Cc Arnd Bergmann <[email protected]>
Cc Borislav Petkov <[email protected]>
Cc Brijesh Singh <[email protected]>
Cc Dave Young <[email protected]>
Cc Dmitry Vyukov <[email protected]>
Cc Jonathan Corbet <[email protected]>
Cc Konrad Rzeszutek Wilk <[email protected]>
Cc Larry Woodman <[email protected]>
Cc Linus Torvalds <[email protected]>
Cc Matt Fleming <[email protected]>
Cc Michael S. Tsirkin <[email protected]>
Cc Paolo Bonzini <[email protected]>
Cc Peter Zijlstra <[email protected]>
Cc Radim Krčmář <[email protected]>
Cc Rik van Riel <[email protected]>
Cc Toshimitsu Kani <[email protected]>
Link http://lkml.kernel.org/r/e61eb533a6d0aac941db2723d8aa63ef6b882dee.1500319216.git.thomas.lendacky@amd.com open here
[Backported to 4.9 stable by AK, suggested by Michael Hocko]
Signed-off-by Ingo Molnar <[email protected]>
Signed-off-by Andi Kleen <[email protected]>
--- arch/x86/include/asm/pgtable.h | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-)
arch/x86/include/asm/pgtable.h +8 -5
@@ -173,6 +173,11 @@ static inline unsigned long pud_pfn(pud_t pud)return (pfn &pud_pfn_mask (pud)) >>PAGE_SHIFT ; } +static inline unsigned long pgd_pfn (pgd_t pgd) +{ +return (pgd_val (pgd) &PTE_PFN_MASK ) >>PAGE_SHIFT ; +} +#define pte_page (pte) pfn_to_page(pte_pfn(pte))static inline int pmd_large (pmd_t pte)
@@ -578,8 +583,7 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd)* Currently stuck as a macro due to indirect forward reference to * linux/mmzone.h's __section_mem_map_addr() definition: */ -#define pmd_page (pmd) \ - pfn_to_page((pmd_val(pmd) & pmd_pfn_mask(pmd)) >> PAGE_SHIFT) +#define pmd_page (pmd) pfn_to_page(pmd_pfn(pmd))/* * the pmd page can be thought of an array like this: pmd_t[PTRS_PER_PMD]
@@ -647,8 +651,7 @@ static inline unsigned long pud_page_vaddr(pud_t pud)* Currently stuck as a macro due to indirect forward reference to * linux/mmzone.h's __section_mem_map_addr() definition: */ -#define pud_page (pud) \ - pfn_to_page((pud_val(pud) & pud_pfn_mask(pud)) >> PAGE_SHIFT) +#define pud_page (pud) pfn_to_page(pud_pfn(pud))/* Find an entry in the second-level page table.. */ static inline pmd_t *pmd_offset (pud_t *pud,unsigned long address)
@@ -688,7 +691,7 @@ static inline unsigned long pgd_page_vaddr(pgd_t pgd)* Currently stuck as a macro due to indirect forward reference to * linux/mmzone.h's __section_mem_map_addr() definition: */ -#define pgd_page (pgd) pfn_to_page(pgd_val(pgd) >> PAGE_SHIFT) +#define pgd_page (pgd) pfn_to_page(pgd_pfn(pgd))/* to find an entry in a page-table-directory. */ static inline unsigned long pud_index (unsigned long address)
Signature · 1 line
2.17.1