2019-10-23 09:31:05

by Mike Rapoport

[permalink] [raw]
Subject: [PATCH 04/12] m68k: nommu: use pgtable-nopud instead of 4level-fixup

From: Mike Rapoport <[email protected]>

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 <[email protected]>
---
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 <[email protected]>
--
2.7.4


2019-10-24 19:55:26

by Greg Ungerer

[permalink] [raw]
Subject: Re: [PATCH 04/12] m68k: nommu: use pgtable-nopud instead of 4level-fixup

Hi Mike,

On 23/10/19 7:28 pm, Mike Rapoport wrote:
> From: Mike Rapoport <[email protected]>
>
> 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 <[email protected]>
> ---
> 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 <[email protected]>

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

2019-10-24 20:30:15

by Mike Rapoport

[permalink] [raw]
Subject: Re: [PATCH 04/12] m68k: nommu: use pgtable-nopud instead of 4level-fixup

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 <[email protected]>
> >
> >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 <[email protected]>
> >---
> > 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 <[email protected]>
>
> 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
>

--
Sincerely yours,
Mike.

2019-10-24 20:40:46

by Greg Ungerer

[permalink] [raw]
Subject: Re: [PATCH 04/12] m68k: nommu: use pgtable-nopud instead of 4level-fixup

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 <[email protected]>
>>>
>>> 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 <[email protected]>
>>> ---
>>> 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 <[email protected]>
>>
>> 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 <[email protected]>

Regards
Greg