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

From: Greg Ungerer
Date: Thu Oct 24 2019 - 02:23:14 EST


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@xxxxxxxxxxxxx>

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@xxxxxxxxxxxxx>
---
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@xxxxxxxxxxxx>

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@xxxxxxxxxxxxxx>

Regards
Greg