]> git.baikalelectronics.ru Git - kernel.git/commitdiff
powerpc: Define swapper_pg_dir[] in C
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Mon, 7 Jun 2021 10:56:05 +0000 (10:56 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 16 Jun 2021 14:09:10 +0000 (00:09 +1000)
Don't duplicate swapper_pg_dir[] in each platform's head.S

Define it in mm/pgtable.c

Define MAX_PTRS_PER_PGD because on book3s/64 PTRS_PER_PGD is
not a constant.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/5e3f1b8a4695c33ccc80aa3870e016bef32b85e1.1623063174.git.christophe.leroy@csgroup.eu
arch/powerpc/include/asm/book3s/64/pgtable.h
arch/powerpc/include/asm/pgtable.h
arch/powerpc/kernel/asm-offsets.c
arch/powerpc/kernel/head_40x.S
arch/powerpc/kernel/head_44x.S
arch/powerpc/kernel/head_64.S
arch/powerpc/kernel/head_8xx.S
arch/powerpc/kernel/head_book3s_32.S
arch/powerpc/kernel/head_fsl_booke.S
arch/powerpc/mm/pgtable.c

index a666d561b44d2825e079dd7efa7f37b7b9f4f136..4d9941b2fe517e9a1dd6fc9f939ba23687809dcc 100644 (file)
@@ -232,6 +232,9 @@ extern unsigned long __pmd_frag_size_shift;
 #define PTRS_PER_PUD   (1 << PUD_INDEX_SIZE)
 #define PTRS_PER_PGD   (1 << PGD_INDEX_SIZE)
 
+#define MAX_PTRS_PER_PGD       (1 << (H_PGD_INDEX_SIZE > RADIX_PGD_INDEX_SIZE ? \
+                                      H_PGD_INDEX_SIZE : RADIX_PGD_INDEX_SIZE))
+
 /* PMD_SHIFT determines what a second-level page table entry can map */
 #define PMD_SHIFT      (PAGE_SHIFT + PTE_INDEX_SIZE)
 #define PMD_SIZE       (1UL << PMD_SHIFT)
index c6a676714f04099b6fecd66cf0c1bf034d83daa2..b9c8641654f430b1ab6afb8b66c3dd12f47c2640 100644 (file)
@@ -41,6 +41,10 @@ struct mm_struct;
 
 #ifndef __ASSEMBLY__
 
+#ifndef MAX_PTRS_PER_PGD
+#define MAX_PTRS_PER_PGD PTRS_PER_PGD
+#endif
+
 /* Keep these as a macros to avoid include dependency mess */
 #define pte_page(x)            pfn_to_page(pte_pfn(x))
 #define mk_pte(page, pgprot)   pfn_pte(page_to_pfn(page), (pgprot))
index 672e7e2b234325549b86770a0eac8aad61f65b4f..c46685c9b2c644cd92baaddec0f4439450ed2b59 100644 (file)
@@ -354,11 +354,6 @@ int main(void)
        DEFINE(BUG_ENTRY_SIZE, sizeof(struct bug_entry));
 #endif
 
-#ifdef CONFIG_PPC_BOOK3S_64
-       DEFINE(PGD_TABLE_SIZE, (sizeof(pgd_t) << max(RADIX_PGD_INDEX_SIZE, H_PGD_INDEX_SIZE)));
-#else
-       DEFINE(PGD_TABLE_SIZE, PGD_TABLE_SIZE);
-#endif
        DEFINE(PTE_SIZE, sizeof(pte_t));
 
 #ifdef CONFIG_KVM
index 92b6c735616198e10913548f8cb9992bfc05cbc0..7d72ee5ab387c04623ea26537af8d970d263dd21 100644 (file)
@@ -701,14 +701,3 @@ _GLOBAL(abort)
         mfspr   r13,SPRN_DBCR0
         oris    r13,r13,DBCR0_RST_SYSTEM@h
         mtspr   SPRN_DBCR0,r13
-
-/* We put a few things here that have to be page-aligned. This stuff
- * goes at the beginning of the data segment, which is page-aligned.
- */
-       .data
-       .align  12
-       .globl  sdata
-sdata:
-       .globl  swapper_pg_dir
-swapper_pg_dir:
-       .space  PGD_TABLE_SIZE
index e037eb6157579e0bd4e506c4d59edb153f72718a..ddc978a2d3819384ae0935bb41bcb18a94351e88 100644 (file)
@@ -1233,23 +1233,8 @@ head_start_common:
        isync
        blr
 
-/*
- * We put a few things here that have to be page-aligned. This stuff
- * goes at the beginning of the data segment, which is page-aligned.
- */
-       .data
-       .align  PAGE_SHIFT
-       .globl  sdata
-sdata:
-
-/*
- * To support >32-bit physical addresses, we use an 8KB pgdir.
- */
-       .globl  swapper_pg_dir
-swapper_pg_dir:
-       .space  PGD_TABLE_SIZE
-
 #ifdef CONFIG_SMP
+       .data
        .align  12
 temp_boot_stack:
        .space  1024
index 730838c7ca39a0e8970509c2dfde8fa236c90724..79f2d1e61abd7311041583ce0271e7b15868d7c2 100644 (file)
@@ -997,18 +997,3 @@ start_here_common:
 0:     trap
        EMIT_BUG_ENTRY 0b, __FILE__, __LINE__, 0
        .previous
-
-/*
- * We put a few things here that have to be page-aligned.
- * This stuff goes at the beginning of the bss, which is page-aligned.
- */
-       .section ".bss"
-/*
- * pgd dir should be aligned to PGD_TABLE_SIZE which is 64K.
- * We will need to find a better way to fix this
- */
-       .align  16
-
-       .globl  swapper_pg_dir
-swapper_pg_dir:
-       .space  PGD_TABLE_SIZE
index 5ce42dfac061ec70eb23e8f5054fb79f6f8e927c..9bdb95f5694f7e8c81a25be374b8fc49293be09a 100644 (file)
@@ -786,15 +786,3 @@ _GLOBAL(mmu_pin_tlb)
        mtspr   SPRN_SRR1, r10
        mtspr   SPRN_SRR0, r11
        rfi
-
-/*
- * We put a few things here that have to be page-aligned.
- * This stuff goes at the beginning of the data segment,
- * which is page-aligned.
- */
-       .data
-       .globl  sdata
-sdata:
-       .globl  swapper_pg_dir
-swapper_pg_dir:
-       .space  PGD_TABLE_SIZE
index 59ddd68d60bfe51a951b76eed69b9e7ac89e8c1c..e8d861e48c25aa5cc699faa0be0449a5bc456e91 100644 (file)
@@ -1208,14 +1208,4 @@ setup_usbgecko_bat:
        blr
 #endif
 
-/*
- * We put a few things here that have to be page-aligned.
- * This stuff goes at the beginning of the data segment,
- * which is page-aligned.
- */
        .data
-       .globl  sdata
-sdata:
-       .globl  swapper_pg_dir
-swapper_pg_dir:
-       .space  PGD_TABLE_SIZE
index f33bc5a8e73ea3ae993e3a7a0448866c2af7451c..0f9642f36b4900dee70507359451f93f57a7d4f2 100644 (file)
@@ -1212,15 +1212,3 @@ _GLOBAL(restore_to_as0)
        */
 3:     mr      r3,r5
        bl      _start
-
-/*
- * We put a few things here that have to be page-aligned. This stuff
- * goes at the beginning of the data segment, which is page-aligned.
- */
-       .data
-       .align  12
-       .globl  sdata
-sdata:
-       .globl  swapper_pg_dir
-swapper_pg_dir:
-       .space  PGD_TABLE_SIZE
index 3546119401183ed02cc09b77b5fec21d4902fad9..1707ab580ee25d87226790da22b479a14d613936 100644 (file)
@@ -28,6 +28,8 @@
 #include <asm/hugetlb.h>
 #include <asm/pte-walk.h>
 
+pgd_t swapper_pg_dir[MAX_PTRS_PER_PGD] __page_aligned_bss;
+
 static inline int is_exec_fault(void)
 {
        return current->thread.regs && TRAP(current->thread.regs) == 0x400;