| The #ifdef around pud_clear() is very weird, but needed to |
| compile bootstrapping arch/x86/boot/compressed/error.c, |
| which arch/x86/boot/compressed/misc.h does |
| #undef CONFIG_PARAVIRT |
| and codepath inside arch/x86/include/asm/pgtable.h |
| goes into generally unused codepath, which does |
| #ifndef __PAGETABLE_PMD_FOLDED /* never defined */ |
| #define pud_clear(pud) native_pud_clear(pud) |
| #endif |
| which will duplicate define pud_clear(). |
| |
| |
| |
| diff -up ./arch/x86/include/asm/pgtable-3level.h.pud ./arch/x86/include/asm/pgtable-3level.h |
| |
| |
| @@ -129,12 +129,11 @@ static inline void native_pmd_clear(pmd_ |
| *(tmp + 1) = 0; |
| } |
| |
| -#ifndef CONFIG_SMP |
| static inline void native_pud_clear(pud_t *pudp) |
| { |
| } |
| -#endif |
| |
| +#if /*defined(__PAGETABLE_PMD_FOLDED) &&*/ defined(CONFIG_PARAVIRT) |
| static inline void pud_clear(pud_t *pudp) |
| { |
| mm_track_pud(pudp); |
| @@ -151,6 +150,7 @@ static inline void pud_clear(pud_t *pudp |
| * pud_clear_bad()), so we don't need TLB flush here. |
| */ |
| } |
| +#endif |
| |
| #ifdef CONFIG_SMP |
| static inline pte_t native_ptep_get_and_clear(pte_t *ptep) |