Message ID | 1571822941-29776-5-git-send-email-rppt@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mm: remove __ARCH_HAS_4LEVEL_HACK | expand |
Hi Mike, On 23/10/19 7:28 pm, Mike Rapoport wrote: > From: Mike Rapoport <rppt@linux.ibm.com> > > The generic nommu implementation of page table manipulation takes care of > folding of the upper levels and does not require fixups. > > Simply replace of include/asm-generic/4level-fixup.h with > include/asm-generic/pgtable-nopud.h. > > Signed-off-by: Mike Rapoport <rppt@linux.ibm.com> > --- > arch/m68k/include/asm/pgtable_no.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/m68k/include/asm/pgtable_no.h b/arch/m68k/include/asm/pgtable_no.h > index c18165b..ccc4568 100644 > --- a/arch/m68k/include/asm/pgtable_no.h > +++ b/arch/m68k/include/asm/pgtable_no.h > @@ -2,7 +2,7 @@ > #ifndef _M68KNOMMU_PGTABLE_H > #define _M68KNOMMU_PGTABLE_H > > -#include <asm-generic/4level-fixup.h> > +#include <asm-generic/pgtable-nopud.h> > > /* > * (C) Copyright 2000-2002, Greg Ungerer <gerg@snapgear.com> This fails to compile for me (targeting m5208evb_defconfig): CC init/main.o In file included from ./arch/m68k/include/asm/pgtable_no.h:56:0, from ./arch/m68k/include/asm/pgtable.h:3, from ./include/linux/mm.h:99, from ./include/linux/ring_buffer.h:5, from ./include/linux/trace_events.h:6, from ./include/trace/syscall.h:7, from ./include/linux/syscalls.h:85, from init/main.c:21: ./include/asm-generic/pgtable.h:738:34: error: unknown type name ‘pmd_t’ static inline int pmd_soft_dirty(pmd_t pmd) ^ ./include/asm-generic/pgtable.h:748:15: error: unknown type name ‘pmd_t’ static inline pmd_t pmd_mksoft_dirty(pmd_t pmd) ^ ./include/asm-generic/pgtable.h:748:38: error: unknown type name ‘pmd_t’ static inline pmd_t pmd_mksoft_dirty(pmd_t pmd) ^ ./include/asm-generic/pgtable.h:758:15: error: unknown type name ‘pmd_t’ static inline pmd_t pmd_clear_soft_dirty(pmd_t pmd) ^ ./include/asm-generic/pgtable.h:758:42: error: unknown type name ‘pmd_t’ static inline pmd_t pmd_clear_soft_dirty(pmd_t pmd) ^ ./include/asm-generic/pgtable.h:778:15: error: unknown type name ‘pmd_t’ static inline pmd_t pmd_swp_mksoft_dirty(pmd_t pmd) ^ ./include/asm-generic/pgtable.h:778:42: error: unknown type name ‘pmd_t’ static inline pmd_t pmd_swp_mksoft_dirty(pmd_t pmd) ^ ./include/asm-generic/pgtable.h:783:38: error: unknown type name ‘pmd_t’ static inline int pmd_swp_soft_dirty(pmd_t pmd) ^ ./include/asm-generic/pgtable.h:788:15: error: unknown type name ‘pmd_t’ static inline pmd_t pmd_swp_clear_soft_dirty(pmd_t pmd) ^ ./include/asm-generic/pgtable.h:788:46: error: unknown type name ‘pmd_t’ static inline pmd_t pmd_swp_clear_soft_dirty(pmd_t pmd) ^ ./include/asm-generic/pgtable.h:1071:32: error: unknown type name ‘pmd_t’ static inline int pmd_set_huge(pmd_t *pmd, phys_addr_t addr, pgprot_t prot) ^ ./include/asm-generic/pgtable.h:1083:34: error: unknown type name ‘pmd_t’ static inline int pmd_clear_huge(pmd_t *pmd) ^ ./include/asm-generic/pgtable.h:1095:37: error: unknown type name ‘pmd_t’ static inline int pmd_free_pte_page(pmd_t *pmd, unsigned long addr) ^ In file included from ./include/linux/ring_buffer.h:5:0, from ./include/linux/trace_events.h:6, from ./include/trace/syscall.h:7, from ./include/linux/syscalls.h:85, from init/main.c:21: ./include/linux/mm.h:423:2: error: unknown type name ‘pmd_t’ pmd_t *pmd; /* Pointer to pmd entry matching ^ ./include/linux/mm.h:568:30: error: unknown type name ‘pmd_t’ static inline int pmd_devmap(pmd_t pmd) ^ In file included from ./include/linux/mm.h:587:0, from ./include/linux/ring_buffer.h:5, from ./include/linux/trace_events.h:6, from ./include/trace/syscall.h:7, from ./include/linux/syscalls.h:85, from init/main.c:21: ./include/linux/huge_mm.h:12:5: error: unknown type name ‘pmd_t’ pmd_t *dst_pmd, pmd_t *src_pmd, unsigned long addr, ^ ./include/linux/huge_mm.h:12:21: error: unknown type name ‘pmd_t’ pmd_t *dst_pmd, pmd_t *src_pmd, unsigned long addr, ^ ./include/linux/huge_mm.h:14:57: error: unknown type name ‘pmd_t’ extern void huge_pmd_set_accessed(struct vm_fault *vmf, pmd_t orig_pmd); ^ ./include/linux/huge_mm.h:27:61: error: unknown type name ‘pmd_t’ extern vm_fault_t do_huge_pmd_wp_page(struct vm_fault *vmf, pmd_t orig_pmd); ^ ./include/linux/huge_mm.h:30:8: error: unknown type name ‘pmd_t’ pmd_t *pmd, ^ ./include/linux/huge_mm.h:34:4: error: unknown type name ‘pmd_t’ pmd_t *pmd, unsigned long addr, unsigned long next); ^ ./include/linux/huge_mm.h:37:4: error: unknown type name ‘pmd_t’ pmd_t *pmd, unsigned long addr); ^ ./include/linux/huge_mm.h:41:57: error: unknown type name ‘pmd_t’ extern int mincore_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd, ^ ./include/linux/huge_mm.h:46:5: error: unknown type name ‘pmd_t’ pmd_t *old_pmd, pmd_t *new_pmd); ^ ./include/linux/huge_mm.h:46:21: error: unknown type name ‘pmd_t’ pmd_t *old_pmd, pmd_t *new_pmd); ^ ./include/linux/huge_mm.h:47:56: error: unknown type name ‘pmd_t’ extern int change_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd, ^ ./include/linux/huge_mm.h:336:65: error: unknown type name ‘pmd_t’ static inline void __split_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd, ^ ./include/linux/huge_mm.h:356:31: error: unknown type name ‘pmd_t’ static inline int is_swap_pmd(pmd_t pmd) ^ ./include/linux/huge_mm.h:360:47: error: unknown type name ‘pmd_t’ static inline spinlock_t *pmd_trans_huge_lock(pmd_t *pmd, ^ ./include/linux/huge_mm.h:372:3: error: unknown type name ‘pmd_t’ pmd_t orig_pmd) ^ ./include/linux/huge_mm.h:393:22: error: unknown type name ‘pmd_t’ unsigned long addr, pmd_t *pmd, int flags, struct dev_pagemap **pgmap) ^ In file included from ./include/linux/ring_buffer.h:5:0, from ./include/linux/trace_events.h:6, from ./include/trace/syscall.h:7, from ./include/linux/syscalls.h:85, from init/main.c:21: ./include/linux/mm.h:1447:5: error: unknown type name ‘pmd_t’ pmd_t pmd); ^ ./include/linux/mm.h:1464:21: error: unknown type name ‘pmd_t’ pte_t **ptepp, pmd_t **pmdpp, spinlock_t **ptlp); ^ ./include/linux/mm.h:1850:39: error: unknown type name ‘pmd_t’ int __pte_alloc(struct mm_struct *mm, pmd_t *pmd); ^ ./include/linux/mm.h:1851:24: error: unknown type name ‘pmd_t’ int __pte_alloc_kernel(pmd_t *pmd); ^ ./include/linux/mm.h:1937:61: error: unknown type name ‘pmd_t’ static inline spinlock_t *pte_lockptr(struct mm_struct *mm, pmd_t *pmd) ^ ./include/linux/mm.h:2028:61: error: unknown type name ‘pmd_t’ static inline spinlock_t *pmd_lockptr(struct mm_struct *mm, pmd_t *pmd) ^ ./include/linux/mm.h:2040:58: error: unknown type name ‘pmd_t’ static inline spinlock_t *pmd_lock(struct mm_struct *mm, pmd_t *pmd) ^ In file included from ./include/linux/ring_buffer.h:5:0, from ./include/linux/trace_events.h:6, from ./include/trace/syscall.h:7, from ./include/linux/syscalls.h:85, from init/main.c:21: ./include/linux/mm.h:2755:1: error: unknown type name ‘pmd_t’ pmd_t *vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node); ^ ./include/linux/mm.h:2756:29: error: unknown type name ‘pmd_t’ pte_t *vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node); ^ scripts/Makefile.build:265: recipe for target 'init/main.o' failed make[1]: *** [init/main.o] Error 1 Makefile:1649: recipe for target 'init' failed make: *** [init] Error 2 Regards Greg
Hi Greg, On Thu, Oct 24, 2019 at 02:09:01PM +1000, Greg Ungerer wrote: > Hi Mike, > > On 23/10/19 7:28 pm, Mike Rapoport wrote: > >From: Mike Rapoport <rppt@linux.ibm.com> > > > >The generic nommu implementation of page table manipulation takes care of > >folding of the upper levels and does not require fixups. > > > >Simply replace of include/asm-generic/4level-fixup.h with > >include/asm-generic/pgtable-nopud.h. > > > >Signed-off-by: Mike Rapoport <rppt@linux.ibm.com> > >--- > > arch/m68k/include/asm/pgtable_no.h | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > >diff --git a/arch/m68k/include/asm/pgtable_no.h b/arch/m68k/include/asm/pgtable_no.h > >index c18165b..ccc4568 100644 > >--- a/arch/m68k/include/asm/pgtable_no.h > >+++ b/arch/m68k/include/asm/pgtable_no.h > >@@ -2,7 +2,7 @@ > > #ifndef _M68KNOMMU_PGTABLE_H > > #define _M68KNOMMU_PGTABLE_H > >-#include <asm-generic/4level-fixup.h> > >+#include <asm-generic/pgtable-nopud.h> > > /* > > * (C) Copyright 2000-2002, Greg Ungerer <gerg@snapgear.com> > > This fails to compile for me (targeting m5208evb_defconfig): > > CC init/main.o > In file included from ./arch/m68k/include/asm/pgtable_no.h:56:0, > from ./arch/m68k/include/asm/pgtable.h:3, > from ./include/linux/mm.h:99, > from ./include/linux/ring_buffer.h:5, > from ./include/linux/trace_events.h:6, > from ./include/trace/syscall.h:7, > from ./include/linux/syscalls.h:85, > from init/main.c:21: > ./include/asm-generic/pgtable.h:738:34: error: unknown type name ‘pmd_t’ > static inline int pmd_soft_dirty(pmd_t pmd) > ^ ... > scripts/Makefile.build:265: recipe for target 'init/main.o' failed > make[1]: *** [init/main.o] Error 1 > Makefile:1649: recipe for target 'init' failed > make: *** [init] Error 2 The hunk below fixes the build. diff --git a/arch/m68k/include/asm/page.h b/arch/m68k/include/asm/page.h index c00b67a..05e1e1e 100644 --- a/arch/m68k/include/asm/page.h +++ b/arch/m68k/include/asm/page.h @@ -21,7 +21,7 @@ /* * These are used to make use of C type-checking.. */ -#if CONFIG_PGTABLE_LEVELS == 3 +#if !defined(CONFIG_MMU) || CONFIG_PGTABLE_LEVELS == 3 typedef struct { unsigned long pmd[16]; } pmd_t; #define pmd_val(x) ((&x)->pmd[0]) #define __pmd(x) ((pmd_t) { { (x) }, }) > Regards > Greg >
Hi Mike, On 24/10/19 3:35 pm, Mike Rapoport wrote: > Hi Greg, > > On Thu, Oct 24, 2019 at 02:09:01PM +1000, Greg Ungerer wrote: >> Hi Mike, >> >> On 23/10/19 7:28 pm, Mike Rapoport wrote: >>> From: Mike Rapoport <rppt@linux.ibm.com> >>> >>> The generic nommu implementation of page table manipulation takes care of >>> folding of the upper levels and does not require fixups. >>> >>> Simply replace of include/asm-generic/4level-fixup.h with >>> include/asm-generic/pgtable-nopud.h. >>> >>> Signed-off-by: Mike Rapoport <rppt@linux.ibm.com> >>> --- >>> arch/m68k/include/asm/pgtable_no.h | 2 +- >>> 1 file changed, 1 insertion(+), 1 deletion(-) >>> >>> diff --git a/arch/m68k/include/asm/pgtable_no.h b/arch/m68k/include/asm/pgtable_no.h >>> index c18165b..ccc4568 100644 >>> --- a/arch/m68k/include/asm/pgtable_no.h >>> +++ b/arch/m68k/include/asm/pgtable_no.h >>> @@ -2,7 +2,7 @@ >>> #ifndef _M68KNOMMU_PGTABLE_H >>> #define _M68KNOMMU_PGTABLE_H >>> -#include <asm-generic/4level-fixup.h> >>> +#include <asm-generic/pgtable-nopud.h> >>> /* >>> * (C) Copyright 2000-2002, Greg Ungerer <gerg@snapgear.com> >> >> This fails to compile for me (targeting m5208evb_defconfig): >> >> CC init/main.o >> In file included from ./arch/m68k/include/asm/pgtable_no.h:56:0, >> from ./arch/m68k/include/asm/pgtable.h:3, >> from ./include/linux/mm.h:99, >> from ./include/linux/ring_buffer.h:5, >> from ./include/linux/trace_events.h:6, >> from ./include/trace/syscall.h:7, >> from ./include/linux/syscalls.h:85, >> from init/main.c:21: >> ./include/asm-generic/pgtable.h:738:34: error: unknown type name ‘pmd_t’ >> static inline int pmd_soft_dirty(pmd_t pmd) >> ^ > > ... > >> scripts/Makefile.build:265: recipe for target 'init/main.o' failed >> make[1]: *** [init/main.o] Error 1 >> Makefile:1649: recipe for target 'init' failed >> make: *** [init] Error 2 > > The hunk below fixes the build. > > diff --git a/arch/m68k/include/asm/page.h b/arch/m68k/include/asm/page.h > index c00b67a..05e1e1e 100644 > --- a/arch/m68k/include/asm/page.h > +++ b/arch/m68k/include/asm/page.h > @@ -21,7 +21,7 @@ > /* > * These are used to make use of C type-checking.. > */ > -#if CONFIG_PGTABLE_LEVELS == 3 > +#if !defined(CONFIG_MMU) || CONFIG_PGTABLE_LEVELS == 3 > typedef struct { unsigned long pmd[16]; } pmd_t; > #define pmd_val(x) ((&x)->pmd[0]) > #define __pmd(x) ((pmd_t) { { (x) }, }) That looks better. Thanks. Tested and working on m68knommu. For the combined patches: Acked-by: Greg Ungerer <gerg@linux-m68k.org> Regards Greg
diff --git a/arch/m68k/include/asm/pgtable_no.h b/arch/m68k/include/asm/pgtable_no.h index c18165b..ccc4568 100644 --- a/arch/m68k/include/asm/pgtable_no.h +++ b/arch/m68k/include/asm/pgtable_no.h @@ -2,7 +2,7 @@ #ifndef _M68KNOMMU_PGTABLE_H #define _M68KNOMMU_PGTABLE_H -#include <asm-generic/4level-fixup.h> +#include <asm-generic/pgtable-nopud.h> /* * (C) Copyright 2000-2002, Greg Ungerer <gerg@snapgear.com>