2022-07-03 14:23:38

by Mike Rapoport

[permalink] [raw]
Subject: [PATCH 00/14] arch: make PxD_ORDER generically available

From: Mike Rapoport <[email protected]>

Hi,

The question what does PxD_ORDER define raises from time to time and
there is still a conflict between MIPS and DAX definitions.

Some time ago Matthew Wilcox suggested to use PMD_TABLE_ORDER to define
the order of page table allocation:

[1] https://lore.kernel.org/linux-arch/[email protected]/

The parisc patch made it in, but mips didn't.
Now mips defines from asm/include/pgtable.h were copied to loongarch which
made it worse.

Let's deal with it once and for all and rename PxD_ORDER defines to
PxD_TABLE_ORDER or just drop them when the only possible order of page
table is 0.

I think the best way to merge this via mm tree with acks from arch
maintainers.

Matthew Wilcox (Oracle) (1):
mips: Rename PMD_ORDER to PMD_TABLE_ORDER

Mike Rapoport (13):
csky: drop definition of PTE_ORDER
csky: drop definition of PGD_ORDER
mips: Rename PUD_ORDER to PUD_TABLE_ORDER
mips: drop definitions of PTE_ORDER
mips: Rename PGD_ORDER to PGD_TABLE_ORDER
nios2: drop definition of PTE_ORDER
nios2: drop definition of PGD_ORDER
loongarch: drop definition of PTE_ORDER
loongarch: drop definition of PMD_ORDER
loongarch: drop definition of PUD_ORDER
loongarch: drop definition of PGD_ORDER
parisc: Rename PGD_ORDER to PGD_TABLE_ORDER
xtensa: drop definition of PGD_ORDER

arch/csky/include/asm/pgalloc.h | 2 +-
arch/csky/include/asm/pgtable.h | 6 +--
arch/loongarch/include/asm/pgalloc.h | 6 +--
arch/loongarch/include/asm/pgtable.h | 27 +++++-------
arch/loongarch/kernel/asm-offsets.c | 5 ---
arch/loongarch/mm/pgtable.c | 2 +-
arch/loongarch/mm/tlbex.S | 6 +--
arch/mips/include/asm/pgalloc.h | 8 ++--
arch/mips/include/asm/pgtable-32.h | 19 ++++-----
arch/mips/include/asm/pgtable-64.h | 61 +++++++++++++---------------
arch/mips/kernel/asm-offsets.c | 5 ---
arch/mips/kvm/mmu.c | 2 +-
arch/mips/mm/pgtable.c | 2 +-
arch/mips/mm/tlbex.c | 14 +++----
arch/nios2/include/asm/pgtable.h | 7 +---
arch/nios2/mm/init.c | 5 +--
arch/nios2/mm/pgtable.c | 2 +-
arch/parisc/include/asm/pgalloc.h | 6 +--
arch/parisc/include/asm/pgtable.h | 8 ++--
arch/xtensa/include/asm/pgalloc.h | 2 +-
arch/xtensa/include/asm/pgtable.h | 1 -
21 files changed, 84 insertions(+), 112 deletions(-)


base-commit: 03c765b0e3b4cb5063276b086c76f7a612856a9a
--
2.34.1


2022-07-03 14:29:30

by Mike Rapoport

[permalink] [raw]
Subject: [PATCH 12/14] loongarch: drop definition of PGD_ORDER

From: Mike Rapoport <[email protected]>

This is the order of the page table allocation, not the order of a PGD.
Since its always hardwired to 0, simply drop it.

Signed-off-by: Mike Rapoport <[email protected]>
---
arch/loongarch/include/asm/pgtable.h | 6 ++----
arch/loongarch/kernel/asm-offsets.c | 1 -
arch/loongarch/mm/pgtable.c | 2 +-
3 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/include/asm/pgtable.h
index a97996fefaed..e03443abaf7d 100644
--- a/arch/loongarch/include/asm/pgtable.h
+++ b/arch/loongarch/include/asm/pgtable.h
@@ -21,8 +21,6 @@
#include <asm-generic/pgtable-nop4d.h>
#endif

-#define PGD_ORDER 0
-
#if CONFIG_PGTABLE_LEVELS == 2
#define PGDIR_SHIFT (PAGE_SHIFT + (PAGE_SHIFT - 3))
#elif CONFIG_PGTABLE_LEVELS == 3
@@ -43,9 +41,9 @@
#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
#define PGDIR_MASK (~(PGDIR_SIZE-1))

-#define VA_BITS (PGDIR_SHIFT + (PAGE_SHIFT + PGD_ORDER - 3))
+#define VA_BITS (PGDIR_SHIFT + (PAGE_SHIFT - 3))

-#define PTRS_PER_PGD ((PAGE_SIZE << PGD_ORDER) >> 3)
+#define PTRS_PER_PGD (PAGE_SIZE >> 3)
#if CONFIG_PGTABLE_LEVELS > 3
#define PTRS_PER_PUD (PAGE_SIZE >> 3)
#endif
diff --git a/arch/loongarch/kernel/asm-offsets.c b/arch/loongarch/kernel/asm-offsets.c
index aa4ef42d759f..72f431a7289d 100644
--- a/arch/loongarch/kernel/asm-offsets.c
+++ b/arch/loongarch/kernel/asm-offsets.c
@@ -190,7 +190,6 @@ void output_mm_defines(void)
#endif
DEFINE(_PTE_T_LOG2, PTE_T_LOG2);
BLANK();
- DEFINE(_PGD_ORDER, PGD_ORDER);
BLANK();
DEFINE(_PMD_SHIFT, PMD_SHIFT);
DEFINE(_PGDIR_SHIFT, PGDIR_SHIFT);
diff --git a/arch/loongarch/mm/pgtable.c b/arch/loongarch/mm/pgtable.c
index 0569647152e9..ee179ccd3e3f 100644
--- a/arch/loongarch/mm/pgtable.c
+++ b/arch/loongarch/mm/pgtable.c
@@ -13,7 +13,7 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
{
pgd_t *ret, *init;

- ret = (pgd_t *) __get_free_pages(GFP_KERNEL, PGD_ORDER);
+ ret = (pgd_t *) __get_free_page(GFP_KERNEL);
if (ret) {
init = pgd_offset(&init_mm, 0UL);
pgd_init((unsigned long)ret);
--
2.34.1

2022-07-03 14:29:50

by Mike Rapoport

[permalink] [raw]
Subject: [PATCH 04/14] mips: Rename PUD_ORDER to PUD_TABLE_ORDER

From: Mike Rapoport <[email protected]>

This is the order of the page table allocation, not the order of a PUD.

Signed-off-by: Mike Rapoport <[email protected]>
---
arch/mips/include/asm/pgalloc.h | 2 +-
arch/mips/include/asm/pgtable-32.h | 2 +-
arch/mips/include/asm/pgtable-64.h | 16 ++++++++--------
3 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/arch/mips/include/asm/pgalloc.h b/arch/mips/include/asm/pgalloc.h
index 0ef245cfcae9..1ef8e86ae565 100644
--- a/arch/mips/include/asm/pgalloc.h
+++ b/arch/mips/include/asm/pgalloc.h
@@ -91,7 +91,7 @@ static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address)
{
pud_t *pud;

- pud = (pud_t *) __get_free_pages(GFP_KERNEL, PUD_ORDER);
+ pud = (pud_t *) __get_free_pages(GFP_KERNEL, PUD_TABLE_ORDER);
if (pud)
pud_init((unsigned long)pud, (unsigned long)invalid_pmd_table);
return pud;
diff --git a/arch/mips/include/asm/pgtable-32.h b/arch/mips/include/asm/pgtable-32.h
index 8d57bd5b0b94..d9ae244a4fce 100644
--- a/arch/mips/include/asm/pgtable-32.h
+++ b/arch/mips/include/asm/pgtable-32.h
@@ -81,7 +81,7 @@ extern int add_temporary_entry(unsigned long entrylo0, unsigned long entrylo1,
#endif

#define PGD_ORDER (__PGD_ORDER >= 0 ? __PGD_ORDER : 0)
-#define PUD_ORDER aieeee_attempt_to_allocate_pud
+#define PUD_TABLE_ORDER aieeee_attempt_to_allocate_pud
#define PMD_TABLE_ORDER aieeee_attempt_to_allocate_pmd
#define PTE_ORDER 0

diff --git a/arch/mips/include/asm/pgtable-64.h b/arch/mips/include/asm/pgtable-64.h
index ae0d5a09064d..7daf9a6509d8 100644
--- a/arch/mips/include/asm/pgtable-64.h
+++ b/arch/mips/include/asm/pgtable-64.h
@@ -59,7 +59,7 @@
#define PUD_SHIFT (PMD_SHIFT + (PAGE_SHIFT + PMD_TABLE_ORDER - 3))
#define PUD_SIZE (1UL << PUD_SHIFT)
#define PUD_MASK (~(PUD_SIZE-1))
-#define PGDIR_SHIFT (PUD_SHIFT + (PAGE_SHIFT + PUD_ORDER - 3))
+#define PGDIR_SHIFT (PUD_SHIFT + (PAGE_SHIFT + PUD_TABLE_ORDER - 3))
#endif

#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
@@ -86,17 +86,17 @@
#ifdef CONFIG_PAGE_SIZE_4KB
# ifdef CONFIG_MIPS_VA_BITS_48
# define PGD_ORDER 0
-# define PUD_ORDER 0
+# define PUD_TABLE_ORDER 0
# else
# define PGD_ORDER 1
-# define PUD_ORDER aieeee_attempt_to_allocate_pud
+# define PUD_TABLE_ORDER aieeee_attempt_to_allocate_pud
# endif
#define PMD_TABLE_ORDER 0
#define PTE_ORDER 0
#endif
#ifdef CONFIG_PAGE_SIZE_8KB
#define PGD_ORDER 0
-#define PUD_ORDER aieeee_attempt_to_allocate_pud
+#define PUD_TABLE_ORDER aieeee_attempt_to_allocate_pud
#define PMD_TABLE_ORDER 0
#define PTE_ORDER 0
#endif
@@ -106,19 +106,19 @@
#else
#define PGD_ORDER 0
#endif
-#define PUD_ORDER aieeee_attempt_to_allocate_pud
+#define PUD_TABLE_ORDER aieeee_attempt_to_allocate_pud
#define PMD_TABLE_ORDER 0
#define PTE_ORDER 0
#endif
#ifdef CONFIG_PAGE_SIZE_32KB
#define PGD_ORDER 0
-#define PUD_ORDER aieeee_attempt_to_allocate_pud
+#define PUD_TABLE_ORDER aieeee_attempt_to_allocate_pud
#define PMD_TABLE_ORDER 0
#define PTE_ORDER 0
#endif
#ifdef CONFIG_PAGE_SIZE_64KB
#define PGD_ORDER 0
-#define PUD_ORDER aieeee_attempt_to_allocate_pud
+#define PUD_TABLE_ORDER aieeee_attempt_to_allocate_pud
#ifdef CONFIG_MIPS_VA_BITS_48
#define PMD_TABLE_ORDER 0
#else
@@ -129,7 +129,7 @@

#define PTRS_PER_PGD ((PAGE_SIZE << PGD_ORDER) / sizeof(pgd_t))
#ifndef __PAGETABLE_PUD_FOLDED
-#define PTRS_PER_PUD ((PAGE_SIZE << PUD_ORDER) / sizeof(pud_t))
+#define PTRS_PER_PUD ((PAGE_SIZE << PUD_TABLE_ORDER) / sizeof(pud_t))
#endif
#ifndef __PAGETABLE_PMD_FOLDED
#define PTRS_PER_PMD ((PAGE_SIZE << PMD_TABLE_ORDER) / sizeof(pmd_t))
--
2.34.1

2022-07-03 14:31:44

by Mike Rapoport

[permalink] [raw]
Subject: [PATCH 10/14] loongarch: drop definition of PMD_ORDER

From: Mike Rapoport <[email protected]>

This is the order of the page table allocation, not the order of a PMD.
Since its always hardwired to 0, simply drop it.

Signed-off-by: Mike Rapoport <[email protected]>
---
arch/loongarch/include/asm/pgalloc.h | 4 ++--
arch/loongarch/include/asm/pgtable.h | 7 +++----
arch/loongarch/kernel/asm-offsets.c | 3 ---
3 files changed, 5 insertions(+), 9 deletions(-)

diff --git a/arch/loongarch/include/asm/pgalloc.h b/arch/loongarch/include/asm/pgalloc.h
index b0a57b25c131..93e785f46639 100644
--- a/arch/loongarch/include/asm/pgalloc.h
+++ b/arch/loongarch/include/asm/pgalloc.h
@@ -66,12 +66,12 @@ static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
pmd_t *pmd;
struct page *pg;

- pg = alloc_pages(GFP_KERNEL_ACCOUNT, PMD_ORDER);
+ pg = alloc_page(GFP_KERNEL_ACCOUNT);
if (!pg)
return NULL;

if (!pgtable_pmd_page_ctor(pg)) {
- __free_pages(pg, PMD_ORDER);
+ __free_page(pg);
return NULL;
}

diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/include/asm/pgtable.h
index e0bbfc31fe72..f926537d2233 100644
--- a/arch/loongarch/include/asm/pgtable.h
+++ b/arch/loongarch/include/asm/pgtable.h
@@ -23,7 +23,6 @@

#define PGD_ORDER 0
#define PUD_ORDER 0
-#define PMD_ORDER 0

#if CONFIG_PGTABLE_LEVELS == 2
#define PGDIR_SHIFT (PAGE_SHIFT + (PAGE_SHIFT - 3))
@@ -31,12 +30,12 @@
#define PMD_SHIFT (PAGE_SHIFT + (PAGE_SHIFT - 3))
#define PMD_SIZE (1UL << PMD_SHIFT)
#define PMD_MASK (~(PMD_SIZE-1))
-#define PGDIR_SHIFT (PMD_SHIFT + (PAGE_SHIFT + PMD_ORDER - 3))
+#define PGDIR_SHIFT (PMD_SHIFT + (PAGE_SHIFT - 3))
#elif CONFIG_PGTABLE_LEVELS == 4
#define PMD_SHIFT (PAGE_SHIFT + (PAGE_SHIFT - 3))
#define PMD_SIZE (1UL << PMD_SHIFT)
#define PMD_MASK (~(PMD_SIZE-1))
-#define PUD_SHIFT (PMD_SHIFT + (PAGE_SHIFT + PMD_ORDER - 3))
+#define PUD_SHIFT (PMD_SHIFT + (PAGE_SHIFT - 3))
#define PUD_SIZE (1UL << PUD_SHIFT)
#define PUD_MASK (~(PUD_SIZE-1))
#define PGDIR_SHIFT (PUD_SHIFT + (PAGE_SHIFT + PUD_ORDER - 3))
@@ -52,7 +51,7 @@
#define PTRS_PER_PUD ((PAGE_SIZE << PUD_ORDER) >> 3)
#endif
#if CONFIG_PGTABLE_LEVELS > 2
-#define PTRS_PER_PMD ((PAGE_SIZE << PMD_ORDER) >> 3)
+#define PTRS_PER_PMD (PAGE_SIZE >> 3)
#endif
#define PTRS_PER_PTE (PAGE_SIZE >> 3)

diff --git a/arch/loongarch/kernel/asm-offsets.c b/arch/loongarch/kernel/asm-offsets.c
index 1a1166a7e61c..aa4ef42d759f 100644
--- a/arch/loongarch/kernel/asm-offsets.c
+++ b/arch/loongarch/kernel/asm-offsets.c
@@ -191,9 +191,6 @@ void output_mm_defines(void)
DEFINE(_PTE_T_LOG2, PTE_T_LOG2);
BLANK();
DEFINE(_PGD_ORDER, PGD_ORDER);
-#ifndef __PAGETABLE_PMD_FOLDED
- DEFINE(_PMD_ORDER, PMD_ORDER);
-#endif
BLANK();
DEFINE(_PMD_SHIFT, PMD_SHIFT);
DEFINE(_PGDIR_SHIFT, PGDIR_SHIFT);
--
2.34.1

2022-07-03 14:33:09

by Helge Deller

[permalink] [raw]
Subject: Re: [PATCH 00/14] arch: make PxD_ORDER generically available

On 7/3/22 16:11, Mike Rapoport wrote:
> From: Mike Rapoport <[email protected]>
>
> Hi,
>
> The question what does PxD_ORDER define raises from time to time and
> there is still a conflict between MIPS and DAX definitions.
>
> Some time ago Matthew Wilcox suggested to use PMD_TABLE_ORDER to define
> the order of page table allocation:
>
> [1] https://lore.kernel.org/linux-arch/[email protected]/
>
> The parisc patch made it in, but mips didn't.
> Now mips defines from asm/include/pgtable.h were copied to loongarch which
> made it worse.
>
> Let's deal with it once and for all and rename PxD_ORDER defines to
> PxD_TABLE_ORDER or just drop them when the only possible order of page
> table is 0.
>
> I think the best way to merge this via mm tree with acks from arch
> maintainers.

That's fine for me.

Acked-by: Helge Deller <[email protected]> # parisc

Thanks!
Helge



> Matthew Wilcox (Oracle) (1):
> mips: Rename PMD_ORDER to PMD_TABLE_ORDER
>
> Mike Rapoport (13):
> csky: drop definition of PTE_ORDER
> csky: drop definition of PGD_ORDER
> mips: Rename PUD_ORDER to PUD_TABLE_ORDER
> mips: drop definitions of PTE_ORDER
> mips: Rename PGD_ORDER to PGD_TABLE_ORDER
> nios2: drop definition of PTE_ORDER
> nios2: drop definition of PGD_ORDER
> loongarch: drop definition of PTE_ORDER
> loongarch: drop definition of PMD_ORDER
> loongarch: drop definition of PUD_ORDER
> loongarch: drop definition of PGD_ORDER
> parisc: Rename PGD_ORDER to PGD_TABLE_ORDER
> xtensa: drop definition of PGD_ORDER
>
> arch/csky/include/asm/pgalloc.h | 2 +-
> arch/csky/include/asm/pgtable.h | 6 +--
> arch/loongarch/include/asm/pgalloc.h | 6 +--
> arch/loongarch/include/asm/pgtable.h | 27 +++++-------
> arch/loongarch/kernel/asm-offsets.c | 5 ---
> arch/loongarch/mm/pgtable.c | 2 +-
> arch/loongarch/mm/tlbex.S | 6 +--
> arch/mips/include/asm/pgalloc.h | 8 ++--
> arch/mips/include/asm/pgtable-32.h | 19 ++++-----
> arch/mips/include/asm/pgtable-64.h | 61 +++++++++++++---------------
> arch/mips/kernel/asm-offsets.c | 5 ---
> arch/mips/kvm/mmu.c | 2 +-
> arch/mips/mm/pgtable.c | 2 +-
> arch/mips/mm/tlbex.c | 14 +++----
> arch/nios2/include/asm/pgtable.h | 7 +---
> arch/nios2/mm/init.c | 5 +--
> arch/nios2/mm/pgtable.c | 2 +-
> arch/parisc/include/asm/pgalloc.h | 6 +--
> arch/parisc/include/asm/pgtable.h | 8 ++--
> arch/xtensa/include/asm/pgalloc.h | 2 +-
> arch/xtensa/include/asm/pgtable.h | 1 -
> 21 files changed, 84 insertions(+), 112 deletions(-)
>
>
> base-commit: 03c765b0e3b4cb5063276b086c76f7a612856a9a

2022-07-03 14:49:10

by Mike Rapoport

[permalink] [raw]
Subject: [PATCH 11/14] loongarch: drop definition of PUD_ORDER

From: Mike Rapoport <[email protected]>

This is the order of the page table allocation, not the order of a PUD.
Since its always hardwired to 0, simply drop it.

Signed-off-by: Mike Rapoport <[email protected]>
---
arch/loongarch/include/asm/pgalloc.h | 2 +-
arch/loongarch/include/asm/pgtable.h | 5 ++---
2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/arch/loongarch/include/asm/pgalloc.h b/arch/loongarch/include/asm/pgalloc.h
index 93e785f46639..4bfeb3c9c9ac 100644
--- a/arch/loongarch/include/asm/pgalloc.h
+++ b/arch/loongarch/include/asm/pgalloc.h
@@ -90,7 +90,7 @@ static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address)
{
pud_t *pud;

- pud = (pud_t *) __get_free_pages(GFP_KERNEL, PUD_ORDER);
+ pud = (pud_t *) __get_free_page(GFP_KERNEL);
if (pud)
pud_init((unsigned long)pud, (unsigned long)invalid_pmd_table);
return pud;
diff --git a/arch/loongarch/include/asm/pgtable.h b/arch/loongarch/include/asm/pgtable.h
index f926537d2233..a97996fefaed 100644
--- a/arch/loongarch/include/asm/pgtable.h
+++ b/arch/loongarch/include/asm/pgtable.h
@@ -22,7 +22,6 @@
#endif

#define PGD_ORDER 0
-#define PUD_ORDER 0

#if CONFIG_PGTABLE_LEVELS == 2
#define PGDIR_SHIFT (PAGE_SHIFT + (PAGE_SHIFT - 3))
@@ -38,7 +37,7 @@
#define PUD_SHIFT (PMD_SHIFT + (PAGE_SHIFT - 3))
#define PUD_SIZE (1UL << PUD_SHIFT)
#define PUD_MASK (~(PUD_SIZE-1))
-#define PGDIR_SHIFT (PUD_SHIFT + (PAGE_SHIFT + PUD_ORDER - 3))
+#define PGDIR_SHIFT (PUD_SHIFT + (PAGE_SHIFT - 3))
#endif

#define PGDIR_SIZE (1UL << PGDIR_SHIFT)
@@ -48,7 +47,7 @@

#define PTRS_PER_PGD ((PAGE_SIZE << PGD_ORDER) >> 3)
#if CONFIG_PGTABLE_LEVELS > 3
-#define PTRS_PER_PUD ((PAGE_SIZE << PUD_ORDER) >> 3)
+#define PTRS_PER_PUD (PAGE_SIZE >> 3)
#endif
#if CONFIG_PGTABLE_LEVELS > 2
#define PTRS_PER_PMD (PAGE_SIZE >> 3)
--
2.34.1

2022-07-03 14:53:46

by Mike Rapoport

[permalink] [raw]
Subject: [PATCH 01/14] csky: drop definition of PTE_ORDER

From: Mike Rapoport <[email protected]>

This is the order of the page table allocation, not the order of a PTE.
Since its always hardwired to 0, simply drop it.

Signed-off-by: Mike Rapoport <[email protected]>
---
arch/csky/include/asm/pgtable.h | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/arch/csky/include/asm/pgtable.h b/arch/csky/include/asm/pgtable.h
index bbe245117777..f8bb1e12334b 100644
--- a/arch/csky/include/asm/pgtable.h
+++ b/arch/csky/include/asm/pgtable.h
@@ -19,11 +19,10 @@
* C-SKY is two-level paging structure:
*/
#define PGD_ORDER 0
-#define PTE_ORDER 0

#define PTRS_PER_PGD ((PAGE_SIZE << PGD_ORDER) / sizeof(pgd_t))
#define PTRS_PER_PMD 1
-#define PTRS_PER_PTE ((PAGE_SIZE << PTE_ORDER) / sizeof(pte_t))
+#define PTRS_PER_PTE (PAGE_SIZE / sizeof(pte_t))

#define pte_ERROR(e) \
pr_err("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, (e).pte_low)
--
2.34.1

2022-07-03 14:55:20

by Mike Rapoport

[permalink] [raw]
Subject: [PATCH 07/14] nios2: drop definition of PTE_ORDER

From: Mike Rapoport <[email protected]>

This is the order of the page table allocation, not the order of a PTE.
Since its always hardwired to 0, simply drop it.

Signed-off-by: Mike Rapoport <[email protected]>
---
arch/nios2/include/asm/pgtable.h | 3 +--
arch/nios2/mm/init.c | 2 +-
2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/arch/nios2/include/asm/pgtable.h b/arch/nios2/include/asm/pgtable.h
index 262d0609268c..eaf8f28baa8b 100644
--- a/arch/nios2/include/asm/pgtable.h
+++ b/arch/nios2/include/asm/pgtable.h
@@ -69,10 +69,9 @@ struct mm_struct;
#define PAGE_COPY MKP(0, 0, 1)

#define PGD_ORDER 0
-#define PTE_ORDER 0

#define PTRS_PER_PGD ((PAGE_SIZE << PGD_ORDER) / sizeof(pgd_t))
-#define PTRS_PER_PTE ((PAGE_SIZE << PTE_ORDER) / sizeof(pte_t))
+#define PTRS_PER_PTE (PAGE_SIZE / sizeof(pte_t))

#define USER_PTRS_PER_PGD \
(CONFIG_NIOS2_KERNEL_MMU_REGION_BASE / PGDIR_SIZE)
diff --git a/arch/nios2/mm/init.c b/arch/nios2/mm/init.c
index 613fcaa5988a..2d6dbf7701f6 100644
--- a/arch/nios2/mm/init.c
+++ b/arch/nios2/mm/init.c
@@ -80,7 +80,7 @@ void __init mmu_init(void)

#define __page_aligned(order) __aligned(PAGE_SIZE << (order))
pgd_t swapper_pg_dir[PTRS_PER_PGD] __page_aligned(PGD_ORDER);
-pte_t invalid_pte_table[PTRS_PER_PTE] __page_aligned(PTE_ORDER);
+pte_t invalid_pte_table[PTRS_PER_PTE] __aligned(PAGE_SIZE);
static struct page *kuser_page[1];

static int alloc_kuser_page(void)
--
2.34.1

2022-07-03 14:55:39

by Mike Rapoport

[permalink] [raw]
Subject: [PATCH 14/14] xtensa: drop definition of PGD_ORDER

From: Mike Rapoport <[email protected]>

This is the order of the page table allocation, not the order of a PGD.
Since its always hardwired to 0, simply drop it.

Signed-off-by: Mike Rapoport <[email protected]>
---
arch/xtensa/include/asm/pgalloc.h | 2 +-
arch/xtensa/include/asm/pgtable.h | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/arch/xtensa/include/asm/pgalloc.h b/arch/xtensa/include/asm/pgalloc.h
index eeb2de3a89e5..7fc0f9126dd3 100644
--- a/arch/xtensa/include/asm/pgalloc.h
+++ b/arch/xtensa/include/asm/pgalloc.h
@@ -29,7 +29,7 @@
static inline pgd_t*
pgd_alloc(struct mm_struct *mm)
{
- return (pgd_t*) __get_free_pages(GFP_KERNEL | __GFP_ZERO, PGD_ORDER);
+ return (pgd_t*) __get_free_page(GFP_KERNEL | __GFP_ZERO);
}

static inline void ptes_clear(pte_t *ptep)
diff --git a/arch/xtensa/include/asm/pgtable.h b/arch/xtensa/include/asm/pgtable.h
index 0a91376131c5..4bd77d2b6715 100644
--- a/arch/xtensa/include/asm/pgtable.h
+++ b/arch/xtensa/include/asm/pgtable.h
@@ -57,7 +57,6 @@
#define PTRS_PER_PTE 1024
#define PTRS_PER_PTE_SHIFT 10
#define PTRS_PER_PGD 1024
-#define PGD_ORDER 0
#define USER_PTRS_PER_PGD (TASK_SIZE/PGDIR_SIZE)
#define FIRST_USER_PGD_NR (FIRST_USER_ADDRESS >> PGDIR_SHIFT)

--
2.34.1

2022-07-03 14:56:49

by Mike Rapoport

[permalink] [raw]
Subject: [PATCH 02/14] csky: drop definition of PGD_ORDER

From: Mike Rapoport <[email protected]>

This is the order of the page table allocation, not the order of a PGD.
Since its always hardwired to 0, simply drop it.

Signed-off-by: Mike Rapoport <[email protected]>
---
arch/csky/include/asm/pgalloc.h | 2 +-
arch/csky/include/asm/pgtable.h | 3 +--
2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/arch/csky/include/asm/pgalloc.h b/arch/csky/include/asm/pgalloc.h
index bbbd0698b397..7d57e5da0914 100644
--- a/arch/csky/include/asm/pgalloc.h
+++ b/arch/csky/include/asm/pgalloc.h
@@ -44,7 +44,7 @@ static inline pgd_t *pgd_alloc(struct mm_struct *mm)
pgd_t *ret;
pgd_t *init;

- ret = (pgd_t *) __get_free_pages(GFP_KERNEL, PGD_ORDER);
+ ret = (pgd_t *) __get_free_page(GFP_KERNEL);
if (ret) {
init = pgd_offset(&init_mm, 0UL);
pgd_init((unsigned long *)ret);
diff --git a/arch/csky/include/asm/pgtable.h b/arch/csky/include/asm/pgtable.h
index f8bb1e12334b..0f1e2eda1601 100644
--- a/arch/csky/include/asm/pgtable.h
+++ b/arch/csky/include/asm/pgtable.h
@@ -18,9 +18,8 @@
/*
* C-SKY is two-level paging structure:
*/
-#define PGD_ORDER 0

-#define PTRS_PER_PGD ((PAGE_SIZE << PGD_ORDER) / sizeof(pgd_t))
+#define PTRS_PER_PGD (PAGE_SIZE / sizeof(pgd_t))
#define PTRS_PER_PMD 1
#define PTRS_PER_PTE (PAGE_SIZE / sizeof(pte_t))

--
2.34.1

2022-07-03 21:17:43

by Matthew Wilcox

[permalink] [raw]
Subject: Re: [PATCH 12/14] loongarch: drop definition of PGD_ORDER

On Sun, Jul 03, 2022 at 05:12:01PM +0300, Mike Rapoport wrote:
> +++ b/arch/loongarch/kernel/asm-offsets.c
> @@ -190,7 +190,6 @@ void output_mm_defines(void)
> #endif
> DEFINE(_PTE_T_LOG2, PTE_T_LOG2);
> BLANK();
> - DEFINE(_PGD_ORDER, PGD_ORDER);
> BLANK();
> DEFINE(_PMD_SHIFT, PMD_SHIFT);
> DEFINE(_PGDIR_SHIFT, PGDIR_SHIFT);

Should probably also drop one of these BLANK() lines too?

2022-07-03 21:27:01

by Matthew Wilcox

[permalink] [raw]
Subject: [PATCH 15/14] arm: Rename PMD_ORDER to PMD_BITS

This is the number of bits used by a PMD entry, not the order of a PMD.

Signed-off-by: Matthew Wilcox (Oracle) <[email protected]>
---
arch/arm/kernel/head.S | 34 +++++++++++++++++-----------------
1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S
index 500612d3da2e..d16159ced58f 100644
--- a/arch/arm/kernel/head.S
+++ b/arch/arm/kernel/head.S
@@ -38,10 +38,10 @@
#ifdef CONFIG_ARM_LPAE
/* LPAE requires an additional page for the PGD */
#define PG_DIR_SIZE 0x5000
-#define PMD_ORDER 3
+#define PMD_BITS 3
#else
#define PG_DIR_SIZE 0x4000
-#define PMD_ORDER 2
+#define PMD_BITS 2
#endif

.globl swapper_pg_dir
@@ -240,7 +240,7 @@ __create_page_tables:
mov r6, r6, lsr #SECTION_SHIFT

1: orr r3, r7, r5, lsl #SECTION_SHIFT @ flags + kernel base
- str r3, [r4, r5, lsl #PMD_ORDER] @ identity mapping
+ str r3, [r4, r5, lsl #PMD_BITS] @ identity mapping
cmp r5, r6
addlo r5, r5, #1 @ next section
blo 1b
@@ -250,7 +250,7 @@ __create_page_tables:
* set two variables to indicate the physical start and end of the
* kernel.
*/
- add r0, r4, #KERNEL_OFFSET >> (SECTION_SHIFT - PMD_ORDER)
+ add r0, r4, #KERNEL_OFFSET >> (SECTION_SHIFT - PMD_BITS)
ldr r6, =(_end - 1)
adr_l r5, kernel_sec_start @ _pa(kernel_sec_start)
#if defined CONFIG_CPU_ENDIAN_BE8 || defined CONFIG_CPU_ENDIAN_BE32
@@ -259,8 +259,8 @@ __create_page_tables:
str r8, [r5] @ Save physical start of kernel (LE)
#endif
orr r3, r8, r7 @ Add the MMU flags
- add r6, r4, r6, lsr #(SECTION_SHIFT - PMD_ORDER)
-1: str r3, [r0], #1 << PMD_ORDER
+ add r6, r4, r6, lsr #(SECTION_SHIFT - PMD_BITS)
+1: str r3, [r0], #1 << PMD_BITS
add r3, r3, #1 << SECTION_SHIFT
cmp r0, r6
bls 1b
@@ -280,14 +280,14 @@ __create_page_tables:
mov r3, pc
mov r3, r3, lsr #SECTION_SHIFT
orr r3, r7, r3, lsl #SECTION_SHIFT
- add r0, r4, #(XIP_START & 0xff000000) >> (SECTION_SHIFT - PMD_ORDER)
- str r3, [r0, #((XIP_START & 0x00f00000) >> SECTION_SHIFT) << PMD_ORDER]!
+ add r0, r4, #(XIP_START & 0xff000000) >> (SECTION_SHIFT - PMD_BITS)
+ str r3, [r0, #((XIP_START & 0x00f00000) >> SECTION_SHIFT) << PMD_BITS]!
ldr r6, =(_edata_loc - 1)
- add r0, r0, #1 << PMD_ORDER
- add r6, r4, r6, lsr #(SECTION_SHIFT - PMD_ORDER)
+ add r0, r0, #1 << PMD_BITS
+ add r6, r4, r6, lsr #(SECTION_SHIFT - PMD_BITS)
1: cmp r0, r6
add r3, r3, #1 << SECTION_SHIFT
- strls r3, [r0], #1 << PMD_ORDER
+ strls r3, [r0], #1 << PMD_BITS
bls 1b
#endif

@@ -297,10 +297,10 @@ __create_page_tables:
*/
mov r0, r2, lsr #SECTION_SHIFT
cmp r2, #0
- ldrne r3, =FDT_FIXED_BASE >> (SECTION_SHIFT - PMD_ORDER)
+ ldrne r3, =FDT_FIXED_BASE >> (SECTION_SHIFT - PMD_BITS)
addne r3, r3, r4
orrne r6, r7, r0, lsl #SECTION_SHIFT
- strne r6, [r3], #1 << PMD_ORDER
+ strne r6, [r3], #1 << PMD_BITS
addne r6, r6, #1 << SECTION_SHIFT
strne r6, [r3]

@@ -319,7 +319,7 @@ __create_page_tables:
addruart r7, r3, r0

mov r3, r3, lsr #SECTION_SHIFT
- mov r3, r3, lsl #PMD_ORDER
+ mov r3, r3, lsl #PMD_BITS

add r0, r4, r3
mov r3, r7, lsr #SECTION_SHIFT
@@ -349,7 +349,7 @@ __create_page_tables:
* If we're using the NetWinder or CATS, we also need to map
* in the 16550-type serial port for the debug messages
*/
- add r0, r4, #0xff000000 >> (SECTION_SHIFT - PMD_ORDER)
+ add r0, r4, #0xff000000 >> (SECTION_SHIFT - PMD_BITS)
orr r3, r7, #0x7c000000
str r3, [r0]
#endif
@@ -359,10 +359,10 @@ __create_page_tables:
* Similar reasons here - for debug. This is
* only for Acorn RiscPC architectures.
*/
- add r0, r4, #0x02000000 >> (SECTION_SHIFT - PMD_ORDER)
+ add r0, r4, #0x02000000 >> (SECTION_SHIFT - PMD_BITS)
orr r3, r7, #0x02000000
str r3, [r0]
- add r0, r4, #0xd8000000 >> (SECTION_SHIFT - PMD_ORDER)
+ add r0, r4, #0xd8000000 >> (SECTION_SHIFT - PMD_BITS)
str r3, [r0]
#endif
#endif
--
2.35.1

2022-07-04 01:01:59

by Huacai Chen

[permalink] [raw]
Subject: Re: [PATCH 00/14] arch: make PxD_ORDER generically available

Acked-by: Huacai Chen <[email protected]> # LoongArch

On Sun, Jul 3, 2022 at 10:28 PM Helge Deller <[email protected]> wrote:
>
> On 7/3/22 16:11, Mike Rapoport wrote:
> > From: Mike Rapoport <[email protected]>
> >
> > Hi,
> >
> > The question what does PxD_ORDER define raises from time to time and
> > there is still a conflict between MIPS and DAX definitions.
> >
> > Some time ago Matthew Wilcox suggested to use PMD_TABLE_ORDER to define
> > the order of page table allocation:
> >
> > [1] https://lore.kernel.org/linux-arch/[email protected]/
> >
> > The parisc patch made it in, but mips didn't.
> > Now mips defines from asm/include/pgtable.h were copied to loongarch which
> > made it worse.
> >
> > Let's deal with it once and for all and rename PxD_ORDER defines to
> > PxD_TABLE_ORDER or just drop them when the only possible order of page
> > table is 0.
> >
> > I think the best way to merge this via mm tree with acks from arch
> > maintainers.
>
> That's fine for me.
>
> Acked-by: Helge Deller <[email protected]> # parisc
>
> Thanks!
> Helge
>
>
>
> > Matthew Wilcox (Oracle) (1):
> > mips: Rename PMD_ORDER to PMD_TABLE_ORDER
> >
> > Mike Rapoport (13):
> > csky: drop definition of PTE_ORDER
> > csky: drop definition of PGD_ORDER
> > mips: Rename PUD_ORDER to PUD_TABLE_ORDER
> > mips: drop definitions of PTE_ORDER
> > mips: Rename PGD_ORDER to PGD_TABLE_ORDER
> > nios2: drop definition of PTE_ORDER
> > nios2: drop definition of PGD_ORDER
> > loongarch: drop definition of PTE_ORDER
> > loongarch: drop definition of PMD_ORDER
> > loongarch: drop definition of PUD_ORDER
> > loongarch: drop definition of PGD_ORDER
> > parisc: Rename PGD_ORDER to PGD_TABLE_ORDER
> > xtensa: drop definition of PGD_ORDER
> >
> > arch/csky/include/asm/pgalloc.h | 2 +-
> > arch/csky/include/asm/pgtable.h | 6 +--
> > arch/loongarch/include/asm/pgalloc.h | 6 +--
> > arch/loongarch/include/asm/pgtable.h | 27 +++++-------
> > arch/loongarch/kernel/asm-offsets.c | 5 ---
> > arch/loongarch/mm/pgtable.c | 2 +-
> > arch/loongarch/mm/tlbex.S | 6 +--
> > arch/mips/include/asm/pgalloc.h | 8 ++--
> > arch/mips/include/asm/pgtable-32.h | 19 ++++-----
> > arch/mips/include/asm/pgtable-64.h | 61 +++++++++++++---------------
> > arch/mips/kernel/asm-offsets.c | 5 ---
> > arch/mips/kvm/mmu.c | 2 +-
> > arch/mips/mm/pgtable.c | 2 +-
> > arch/mips/mm/tlbex.c | 14 +++----
> > arch/nios2/include/asm/pgtable.h | 7 +---
> > arch/nios2/mm/init.c | 5 +--
> > arch/nios2/mm/pgtable.c | 2 +-
> > arch/parisc/include/asm/pgalloc.h | 6 +--
> > arch/parisc/include/asm/pgtable.h | 8 ++--
> > arch/xtensa/include/asm/pgalloc.h | 2 +-
> > arch/xtensa/include/asm/pgtable.h | 1 -
> > 21 files changed, 84 insertions(+), 112 deletions(-)
> >
> >
> > base-commit: 03c765b0e3b4cb5063276b086c76f7a612856a9a
>

2022-07-04 02:03:23

by Guo Ren

[permalink] [raw]
Subject: Re: [PATCH 00/14] arch: make PxD_ORDER generically available

For csky part.

Acked-by: Guo Ren <[email protected]>

On Mon, Jul 4, 2022 at 8:40 AM Huacai Chen <[email protected]> wrote:
>
> Acked-by: Huacai Chen <[email protected]> # LoongArch
>
> On Sun, Jul 3, 2022 at 10:28 PM Helge Deller <[email protected]> wrote:
> >
> > On 7/3/22 16:11, Mike Rapoport wrote:
> > > From: Mike Rapoport <[email protected]>
> > >
> > > Hi,
> > >
> > > The question what does PxD_ORDER define raises from time to time and
> > > there is still a conflict between MIPS and DAX definitions.
> > >
> > > Some time ago Matthew Wilcox suggested to use PMD_TABLE_ORDER to define
> > > the order of page table allocation:
> > >
> > > [1] https://lore.kernel.org/linux-arch/[email protected]/
> > >
> > > The parisc patch made it in, but mips didn't.
> > > Now mips defines from asm/include/pgtable.h were copied to loongarch which
> > > made it worse.
> > >
> > > Let's deal with it once and for all and rename PxD_ORDER defines to
> > > PxD_TABLE_ORDER or just drop them when the only possible order of page
> > > table is 0.
> > >
> > > I think the best way to merge this via mm tree with acks from arch
> > > maintainers.
> >
> > That's fine for me.
> >
> > Acked-by: Helge Deller <[email protected]> # parisc
> >
> > Thanks!
> > Helge
> >
> >
> >
> > > Matthew Wilcox (Oracle) (1):
> > > mips: Rename PMD_ORDER to PMD_TABLE_ORDER
> > >
> > > Mike Rapoport (13):
> > > csky: drop definition of PTE_ORDER
> > > csky: drop definition of PGD_ORDER
> > > mips: Rename PUD_ORDER to PUD_TABLE_ORDER
> > > mips: drop definitions of PTE_ORDER
> > > mips: Rename PGD_ORDER to PGD_TABLE_ORDER
> > > nios2: drop definition of PTE_ORDER
> > > nios2: drop definition of PGD_ORDER
> > > loongarch: drop definition of PTE_ORDER
> > > loongarch: drop definition of PMD_ORDER
> > > loongarch: drop definition of PUD_ORDER
> > > loongarch: drop definition of PGD_ORDER
> > > parisc: Rename PGD_ORDER to PGD_TABLE_ORDER
> > > xtensa: drop definition of PGD_ORDER
> > >
> > > arch/csky/include/asm/pgalloc.h | 2 +-
> > > arch/csky/include/asm/pgtable.h | 6 +--
> > > arch/loongarch/include/asm/pgalloc.h | 6 +--
> > > arch/loongarch/include/asm/pgtable.h | 27 +++++-------
> > > arch/loongarch/kernel/asm-offsets.c | 5 ---
> > > arch/loongarch/mm/pgtable.c | 2 +-
> > > arch/loongarch/mm/tlbex.S | 6 +--
> > > arch/mips/include/asm/pgalloc.h | 8 ++--
> > > arch/mips/include/asm/pgtable-32.h | 19 ++++-----
> > > arch/mips/include/asm/pgtable-64.h | 61 +++++++++++++---------------
> > > arch/mips/kernel/asm-offsets.c | 5 ---
> > > arch/mips/kvm/mmu.c | 2 +-
> > > arch/mips/mm/pgtable.c | 2 +-
> > > arch/mips/mm/tlbex.c | 14 +++----
> > > arch/nios2/include/asm/pgtable.h | 7 +---
> > > arch/nios2/mm/init.c | 5 +--
> > > arch/nios2/mm/pgtable.c | 2 +-
> > > arch/parisc/include/asm/pgalloc.h | 6 +--
> > > arch/parisc/include/asm/pgtable.h | 8 ++--
> > > arch/xtensa/include/asm/pgalloc.h | 2 +-
> > > arch/xtensa/include/asm/pgtable.h | 1 -
> > > 21 files changed, 84 insertions(+), 112 deletions(-)
> > >
> > >
> > > base-commit: 03c765b0e3b4cb5063276b086c76f7a612856a9a
> >



--
Best Regards
Guo Ren

ML: https://lore.kernel.org/linux-csky/

2022-07-04 04:07:38

by WANG Xuerui

[permalink] [raw]
Subject: Re: [PATCH 12/14] loongarch: drop definition of PGD_ORDER


On 2022/7/4 04:50, Matthew Wilcox wrote:
> On Sun, Jul 03, 2022 at 05:12:01PM +0300, Mike Rapoport wrote:
>> +++ b/arch/loongarch/kernel/asm-offsets.c
>> @@ -190,7 +190,6 @@ void output_mm_defines(void)
>> #endif
>> DEFINE(_PTE_T_LOG2, PTE_T_LOG2);
>> BLANK();
>> - DEFINE(_PGD_ORDER, PGD_ORDER);
>> BLANK();
>> DEFINE(_PMD_SHIFT, PMD_SHIFT);
>> DEFINE(_PGDIR_SHIFT, PGDIR_SHIFT);
> Should probably also drop one of these BLANK() lines too?
>
Agreed; IMO the blank lines can and should be removed because the
surrounding lines are also mm definitions.

2022-07-04 06:41:56

by Mike Rapoport

[permalink] [raw]
Subject: Re: [PATCH 12/14] loongarch: drop definition of PGD_ORDER

On Mon, Jul 04, 2022 at 11:57:28AM +0800, WANG Xuerui wrote:
>
> On 2022/7/4 04:50, Matthew Wilcox wrote:
> > On Sun, Jul 03, 2022 at 05:12:01PM +0300, Mike Rapoport wrote:
> > > +++ b/arch/loongarch/kernel/asm-offsets.c
> > > @@ -190,7 +190,6 @@ void output_mm_defines(void)
> > > #endif
> > > DEFINE(_PTE_T_LOG2, PTE_T_LOG2);
> > > BLANK();
> > > - DEFINE(_PGD_ORDER, PGD_ORDER);
> > > BLANK();
> > > DEFINE(_PMD_SHIFT, PMD_SHIFT);
> > > DEFINE(_PGDIR_SHIFT, PGDIR_SHIFT);
> > Should probably also drop one of these BLANK() lines too?
> >
> Agreed; IMO the blank lines can and should be removed because the
> surrounding lines are also mm definitions.

They are mm definitions, but still they are separated by blanks to have
nice grouping in the generated asm-offsets.h.

I suspect that there are more unused definitions in asm-offsets.c, worth
taking a look.

--
Sincerely yours,
Mike.