Skip to content

Commit 3ed6751

Browse files
rpptpaulburton
authored andcommitted
mips: fix build when "48 bits virtual memory" is enabled
With CONFIG_MIPS_VA_BITS_48=y the build fails miserably: CC arch/mips/kernel/asm-offsets.s In file included from arch/mips/include/asm/pgtable.h:644, from include/linux/mm.h:99, from arch/mips/kernel/asm-offsets.c:15: include/asm-generic/pgtable.h:16:2: error: #error CONFIG_PGTABLE_LEVELS is not consistent with __PAGETABLE_{P4D,PUD,PMD}_FOLDED #error CONFIG_PGTABLE_LEVELS is not consistent with __PAGETABLE_{P4D,PUD,PMD}_FOLDED ^~~~~ include/asm-generic/pgtable.h:390:28: error: unknown type name 'p4d_t'; did you mean 'pmd_t'? static inline int p4d_same(p4d_t p4d_a, p4d_t p4d_b) ^~~~~ pmd_t [ ... more such errors ... ] scripts/Makefile.build:99: recipe for target 'arch/mips/kernel/asm-offsets.s' failed make[2]: *** [arch/mips/kernel/asm-offsets.s] Error 1 This happens because when CONFIG_MIPS_VA_BITS_48 enables 4th level of the page tables, but neither pgtable-nop4d.h nor 5level-fixup.h are included to cope with the 5th level. Replace #ifdef conditions around includes of the pgtable-nop{m,u}d.h with explicit CONFIG_PGTABLE_LEVELS and add include of 5level-fixup.h for the case when CONFIG_PGTABLE_LEVELS==4 Signed-off-by: Mike Rapoport <[email protected]> Signed-off-by: Paul Burton <[email protected]> Cc: Ralf Baechle <[email protected]> Cc: James Hogan <[email protected]> Cc: [email protected] Cc: [email protected] Cc: [email protected] Cc: Mike Rapoport <[email protected]>
1 parent 7d73d57 commit 3ed6751

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

arch/mips/include/asm/pgtable-64.h

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@
1818
#include <asm/fixmap.h>
1919

2020
#define __ARCH_USE_5LEVEL_HACK
21-
#if defined(CONFIG_PAGE_SIZE_64KB) && !defined(CONFIG_MIPS_VA_BITS_48)
21+
#if CONFIG_PGTABLE_LEVELS == 2
2222
#include <asm-generic/pgtable-nopmd.h>
23-
#elif !(defined(CONFIG_PAGE_SIZE_4KB) && defined(CONFIG_MIPS_VA_BITS_48))
23+
#elif CONFIG_PGTABLE_LEVELS == 3
2424
#include <asm-generic/pgtable-nopud.h>
25+
#else
26+
#include <asm-generic/5level-fixup.h>
2527
#endif
2628

2729
/*
@@ -216,6 +218,9 @@ static inline unsigned long pgd_page_vaddr(pgd_t pgd)
216218
return pgd_val(pgd);
217219
}
218220

221+
#define pgd_phys(pgd) virt_to_phys((void *)pgd_val(pgd))
222+
#define pgd_page(pgd) (pfn_to_page(pgd_phys(pgd) >> PAGE_SHIFT))
223+
219224
static inline pud_t *pud_offset(pgd_t *pgd, unsigned long address)
220225
{
221226
return (pud_t *)pgd_page_vaddr(*pgd) + pud_index(address);

0 commit comments

Comments
 (0)