riscv: don't use the symbolic satp name in assembler code
A message that is not in the archive (sent off-list or not yet received): [email protected]
PATCH 1/1 riscv: don't use the symbolic satp name in assembler code
Quoted 3 lines · Christoph Hellwig
The most recent release binutils release (2.29) doesn't know about the satp name yet, so stick to the name from the previous privileged ISA release and comment on the fact.
I think it'd be better to squash these into the previous cleanup you sent, just to make sure the kernel always builds. How do these look?
[PATCH 1/4] riscv: remove the unused current_pgdir function [PATCH 2/4] riscv: don't read back satp in paging_init [PATCH 3/4] riscv: rename sptbr to satp
[PATCH 4/4] riscv: inline set_pgdir into its only caller
PATCH 1/4 riscv: remove the unused current_pgdir function
From: Christoph Hellwig <[email protected]>
--- arch/riscv/include/asm/mmu_context.h | 5 ----- 1 file changed, 5 deletions(-)
arch/riscv/include/asm/mmu_context.h +0 -5
@@ -39,11 +39,6 @@ static inline void destroy_context(struct mm_struct *mm) { } -static inline pgd_t *current_pgdir (void ) -{ -return pfn_to_virt (csr_read (sptbr) &SPTBR_PPN ); -} -static inline void set_pgdir (pgd_t *pgd) {csr_write (sptbr,virt_to_pfn (pgd) |SPTBR_MODE );
Signature · 1 line
2.13.6
PATCH 2/4 riscv: don't read back satp in paging_init
In reply to Palmer DabbeltFrom: Christoph Hellwig <[email protected]>
init_mm.pgd (aka swapped_pgd) gets relocated like all other kernel symbols by the elf loader, so there is no need to reload it from satp.
--- arch/riscv/mm/init.c | 2 -- 1 file changed, 2 deletions(-)
arch/riscv/mm/init.c +0 -2
@@ -39,8 +39,6 @@ void setup_zero_page(void)void __init paging_init (void ) { - init_mm.pgd = (pgd_t *)pfn_to_virt (csr_read (sptbr)); -setup_zero_page ();local_flush_tlb_all ();zone_sizes_init ();
Signature · 1 line
2.13.6
PATCH 3/4 riscv: rename sptbr to satp
In reply to Palmer DabbeltFrom: Christoph Hellwig <[email protected]>
satp is the name used by the current privileged spec 1.10, use it instead of the old name. The most recent release binutils release (2.29) doesn't know about the satp name yet, so stick to the name from the previous privileged ISA release and comment on the fact.
--- arch/riscv/include/asm/csr.h | 14 +++++++------- arch/riscv/include/asm/mmu_context.h | 7 ++++++- arch/riscv/kernel/head.S | 6 +++--- arch/riscv/mm/fault.c | 4 ++++ 4 files changed, 20 insertions(+), 11 deletions(-)
arch/riscv/include/asm/csr.h +7 -7
@@ -40,15 +40,15 @@#define SR_SD _AC(0x8000000000000000, UL)/* FS/XS dirty */ #endif -/* SPTBR flags */ +/* SATP flags */ #if __riscv_xlen ==32 -#define SPTBR_PPN _AC(0x003FFFFF, UL) -#define SPTBR_MODE_32 _AC(0x80000000, UL) -#define SPTBR_MODE SPTBR_MODE_32 +#define SATP_PPN _AC(0x003FFFFF, UL) +#define SATP_MODE_32 _AC(0x80000000, UL) +#define SATP_MODE SATP_MODE_32#else -#define SPTBR_PPN _AC(0x00000FFFFFFFFFFF, UL) -#define SPTBR_MODE_39 _AC(0x8000000000000000, UL) -#define SPTBR_MODE SPTBR_MODE_39 +#define SATP_PPN _AC(0x00000FFFFFFFFFFF, UL) +#define SATP_MODE_39 _AC(0x8000000000000000, UL) +#define SATP_MODE SATP_MODE_39#endif /* Interrupt Enable and Interrupt Pending flags */
arch/riscv/include/asm/mmu_context.h +6 -1
@@ -41,7 +41,12 @@ static inline void destroy_context(struct mm_struct *mm)static inline void set_pgdir (pgd_t *pgd) { -csr_write (sptbr,virt_to_pfn (pgd) |SPTBR_MODE ); +/* +* Use the old spbtr name instead of using the current satp +* name to support binutils 2.29 which doesn't know about the +* privileged ISA 1.10 yet. +*/ +csr_write (sptbr,virt_to_pfn (next->pgd) |SATP_MODE ); }/*
arch/riscv/kernel/head.S +3 -3
@@ -74,15 +74,15 @@ relocate: sub a1, a1, a0 add ra, ra, a1 - /* Point stvec to virtual address of intruction after sptbr write */ + /* Point stvec to virtual address of intruction after satp write */ la a0, 1f add a0, a0, a1 csrw stvec, a0 - /* Compute sptbr for kernel page tables, but don't load it yet */ + /* Compute satp for kernel page tables, but don't load it yet */ la a2, swapper_pg_dir srl a2, a2, PAGE_SHIFT - li a1, SPTBR_MODE + li a1, SATP_MODE or a2, a2, a1 /*
arch/riscv/mm/fault.c +4 -0
@@ -239,6 +239,10 @@ asmlinkage void do_page_fault(struct pt_regs *regs)* Do _not_ use "tsk->active_mm->pgd" here. * We might be inside an interrupt in the middle * of a task switch. +* +* Note: Use the old spbtr name instead of using the current +* satp name to support binutils 2.29 which doesn't know about +* the privileged ISA 1.10 yet. */ index =pgd_index (addr); pgd = (pgd_t *)pfn_to_virt (csr_read (sptbr)) + index;
Signature · 1 line
2.13.6
PATCH 4/4 riscv: inline set_pgdir into its only caller
In reply to Palmer DabbeltFrom: Christoph Hellwig <[email protected]>
--- arch/riscv/include/asm/mmu_context.h | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-)
arch/riscv/include/asm/mmu_context.h +6 -11
@@ -39,16 +39,6 @@ static inline void destroy_context(struct mm_struct *mm) { } -static inline void set_pgdir (pgd_t *pgd) -{ -/* -* Use the old spbtr name instead of using the current satp -* name to support binutils 2.29 which doesn't know about the -* privileged ISA 1.10 yet. -*/ -csr_write (sptbr,virt_to_pfn (next->pgd) |SATP_MODE ); -} -/* * When necessary, performs a deferred icache flush for the given MM context, * on the local CPU. RISC-V has no direct mechanism for instruction cache
@@ -93,7 +83,12 @@ static inline void switch_mm(struct mm_struct *prev,cpumask_clear_cpu (cpu,mm_cpumask (prev));cpumask_set_cpu (cpu,mm_cpumask (next)); -set_pgdir (next->pgd); +/* +* Use the old spbtr name instead of using the current satp +* name to support binutils 2.29 which doesn't know about the +* privileged ISA 1.10 yet. +*/ +csr_write (sptbr,virt_to_pfn (next->pgd) |SATP_MODE );local_flush_tlb_all ();flush_icache_deferred (next);
Signature · 1 line
2.13.6
PATCH 1/1 riscv: don't use the symbolic satp name in assembler code
In reply to Palmer DabbeltQuoted 7 lines · Palmer Dabbelt
Quoted 3 lines · Christoph Hellwig
The most recent release binutils release (2.29) doesn't know about the satp name yet, so stick to the name from the previous privileged ISA release and comment on the fact.
I think it'd be better to squash these into the previous cleanup you sent, just to make sure the kernel always builds. How do these look?
Sure, fine with me. Thanks for doing the work, next time I'd be happy to resend as well.