mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-05 10:04:12 +08:00
powerpc: Define swapper_pg_dir[] in C
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
This commit is contained in:
parent
45b30fafe5
commit
e72421a085
@ -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)
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user