From 8176dc8af924dba98504ddc2441255ba074369f5 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 1 Feb 2025 17:18:26 +0100 Subject: [PATCH] drop all riscv patches from 5.4.y queue --- ...-avoid-dereferening-null-regs-in-die.patch | 57 - ...t-enable-all-interrupts-in-trap_init.patch | 44 - ...ut-csr-names-for-supervisor-vs-machi.patch | 1043 ----------------- ...scv-avoid-enabling-interrupts-in-die.patch | 61 - ...x-sleeping-in-invalid-context-in-die.patch | 79 -- ...q_-macro-names-with-an-rv_-namespace.patch | 99 -- ...emove-unused-handle_exception-symbol.patch | 37 - queue-5.4/series | 7 - 8 files changed, 1427 deletions(-) delete mode 100644 queue-5.4/risc-v-avoid-dereferening-null-regs-in-die.patch delete mode 100644 queue-5.4/risc-v-don-t-enable-all-interrupts-in-trap_init.patch delete mode 100644 queue-5.4/riscv-abstract-out-csr-names-for-supervisor-vs-machi.patch delete mode 100644 queue-5.4/riscv-avoid-enabling-interrupts-in-die.patch delete mode 100644 queue-5.4/riscv-fix-sleeping-in-invalid-context-in-die.patch delete mode 100644 queue-5.4/riscv-prefix-irq_-macro-names-with-an-rv_-namespace.patch delete mode 100644 queue-5.4/riscv-remove-unused-handle_exception-symbol.patch diff --git a/queue-5.4/risc-v-avoid-dereferening-null-regs-in-die.patch b/queue-5.4/risc-v-avoid-dereferening-null-regs-in-die.patch deleted file mode 100644 index 43218de775a..00000000000 --- a/queue-5.4/risc-v-avoid-dereferening-null-regs-in-die.patch +++ /dev/null @@ -1,57 +0,0 @@ -From eac738bfdeefbeef3dff1f5931a2340351292544 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 20 Sep 2022 13:00:37 -0700 -Subject: RISC-V: Avoid dereferening NULL regs in die() - -From: Palmer Dabbelt - -[ Upstream commit f2913d006fcdb61719635e093d1b5dd0dafecac7 ] - -I don't think we can actually die() without a regs pointer, but the -compiler was warning about a NULL check after a dereference. It seems -prudent to just avoid the possibly-NULL dereference, given that when -die()ing the system is already toast so who knows how we got there. - -Reported-by: kernel test robot -Reported-by: Dan Carpenter -Reviewed-by: Conor Dooley -Link: https://lore.kernel.org/r/20220920200037.6727-1-palmer@rivosinc.com -Signed-off-by: Palmer Dabbelt -Stable-dep-of: 6a97f4118ac0 ("riscv: Fix sleeping in invalid context in die()") -Signed-off-by: Sasha Levin ---- - arch/riscv/kernel/traps.c | 9 ++++++--- - 1 file changed, 6 insertions(+), 3 deletions(-) - -diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c -index 184f7b82c5ae..533087439e80 100644 ---- a/arch/riscv/kernel/traps.c -+++ b/arch/riscv/kernel/traps.c -@@ -29,6 +29,7 @@ void die(struct pt_regs *regs, const char *str) - { - static int die_counter; - int ret; -+ long cause; - - oops_enter(); - -@@ -38,11 +39,13 @@ void die(struct pt_regs *regs, const char *str) - - pr_emerg("%s [#%d]\n", str, ++die_counter); - print_modules(); -- show_regs(regs); -+ if (regs) -+ show_regs(regs); - -- ret = notify_die(DIE_OOPS, str, regs, 0, regs->cause, SIGSEGV); -+ cause = regs ? regs->cause : -1; -+ ret = notify_die(DIE_OOPS, str, regs, 0, cause, SIGSEGV); - -- if (regs && kexec_should_crash(current)) -+ if (kexec_should_crash(current)) - crash_kexec(regs); - - bust_spinlocks(0); --- -2.39.5 - diff --git a/queue-5.4/risc-v-don-t-enable-all-interrupts-in-trap_init.patch b/queue-5.4/risc-v-don-t-enable-all-interrupts-in-trap_init.patch deleted file mode 100644 index 54334629b98..00000000000 --- a/queue-5.4/risc-v-don-t-enable-all-interrupts-in-trap_init.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 6a1ce99dc4bde564e4a072936f9d41f4a439140e Mon Sep 17 00:00:00 2001 -From: Anup Patel -Date: Sun, 2 Feb 2020 16:32:02 +0530 -Subject: RISC-V: Don't enable all interrupts in trap_init() - -From: Anup Patel - -commit 6a1ce99dc4bde564e4a072936f9d41f4a439140e upstream. - -Historically, we have been enabling all interrupts for each -HART in trap_init(). Ideally, we should only enable M-mode -interrupts for M-mode kernel and S-mode interrupts for S-mode -kernel in trap_init(). - -Currently, we get suprious S-mode interrupts on Kendryte K210 -board running M-mode NO-MMU kernel because we are enabling all -interrupts in trap_init(). To fix this, we only enable software -and external interrupt in trap_init(). In future, trap_init() -will only enable software interrupt and PLIC driver will enable -external interrupt using CPU notifiers. - -Fixes: a4c3733d32a7 ("riscv: abstract out CSR names for supervisor vs machine mode") -Signed-off-by: Anup Patel -Reviewed-by: Atish Patra -Tested-by: Palmer Dabbelt [QMEU virt machine with SMP] -[Palmer: Move the Fixes up to a newer commit] -Reviewed-by: Palmer Dabbelt -Signed-off-by: Palmer Dabbelt -Signed-off-by: Greg Kroah-Hartman ---- - arch/riscv/kernel/traps.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- a/arch/riscv/kernel/traps.c -+++ b/arch/riscv/kernel/traps.c -@@ -162,6 +162,6 @@ void __init trap_init(void) - csr_write(CSR_SCRATCH, 0); - /* Set the exception vector address */ - csr_write(CSR_TVEC, &handle_exception); -- /* Enable all interrupts */ -- csr_write(CSR_IE, -1); -+ /* Enable interrupts */ -+ csr_write(CSR_IE, IE_SIE | IE_EIE); - } diff --git a/queue-5.4/riscv-abstract-out-csr-names-for-supervisor-vs-machi.patch b/queue-5.4/riscv-abstract-out-csr-names-for-supervisor-vs-machi.patch deleted file mode 100644 index 9cb2b215177..00000000000 --- a/queue-5.4/riscv-abstract-out-csr-names-for-supervisor-vs-machi.patch +++ /dev/null @@ -1,1043 +0,0 @@ -From 2366983a55278aafc0677126567c9dc5248f0d79 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 28 Oct 2019 13:10:32 +0100 -Subject: riscv: abstract out CSR names for supervisor vs machine mode - -From: Christoph Hellwig - -[ Upstream commit a4c3733d32a72f11dee86d0731d7565aa6ebe22d ] - -Many of the privileged CSRs exist in a supervisor and machine version -that are used very similarly. Provide versions of the CSR names and -fields that map to either the S-mode or M-mode variant depending on -a new CONFIG_RISCV_M_MODE kconfig symbol. - -Contains contributions from Damien Le Moal -and Paul Walmsley . - -Signed-off-by: Christoph Hellwig -Acked-by: Thomas Gleixner # for drivers/clocksource, drivers/irqchip -[paul.walmsley@sifive.com: updated to apply] -Signed-off-by: Paul Walmsley -Stable-dep-of: 6a97f4118ac0 ("riscv: Fix sleeping in invalid context in die()") -Signed-off-by: Sasha Levin ---- - arch/riscv/Kconfig | 4 ++ - arch/riscv/include/asm/csr.h | 72 +++++++++++++++++++++++++---- - arch/riscv/include/asm/irqflags.h | 12 ++--- - arch/riscv/include/asm/processor.h | 2 +- - arch/riscv/include/asm/ptrace.h | 16 +++---- - arch/riscv/include/asm/switch_to.h | 10 ++-- - arch/riscv/kernel/asm-offsets.c | 8 ++-- - arch/riscv/kernel/entry.S | 74 +++++++++++++++++------------- - arch/riscv/kernel/fpu.S | 8 ++-- - arch/riscv/kernel/head.S | 12 ++--- - arch/riscv/kernel/irq.c | 17 ++----- - arch/riscv/kernel/perf_callchain.c | 2 +- - arch/riscv/kernel/process.c | 17 +++---- - arch/riscv/kernel/signal.c | 21 ++++----- - arch/riscv/kernel/smp.c | 2 +- - arch/riscv/kernel/traps.c | 16 +++---- - arch/riscv/lib/uaccess.S | 12 ++--- - arch/riscv/mm/extable.c | 4 +- - arch/riscv/mm/fault.c | 6 +-- - drivers/clocksource/timer-riscv.c | 8 ++-- - drivers/irqchip/irq-sifive-plic.c | 11 +++-- - 21 files changed, 199 insertions(+), 135 deletions(-) - -diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig -index 42138882667d..e3dad60b8d47 100644 ---- a/arch/riscv/Kconfig -+++ b/arch/riscv/Kconfig -@@ -72,6 +72,10 @@ config ARCH_MMAP_RND_BITS_MAX - default 24 if 64BIT # SV39 based - default 17 - -+# set if we run in machine mode, cleared if we run in supervisor mode -+config RISCV_M_MODE -+ bool -+ - config MMU - def_bool y - -diff --git a/arch/riscv/include/asm/csr.h b/arch/riscv/include/asm/csr.h -index a18923fa23c8..0ab642811028 100644 ---- a/arch/riscv/include/asm/csr.h -+++ b/arch/riscv/include/asm/csr.h -@@ -11,8 +11,11 @@ - - /* Status register flags */ - #define SR_SIE _AC(0x00000002, UL) /* Supervisor Interrupt Enable */ -+#define SR_MIE _AC(0x00000008, UL) /* Machine Interrupt Enable */ - #define SR_SPIE _AC(0x00000020, UL) /* Previous Supervisor IE */ -+#define SR_MPIE _AC(0x00000080, UL) /* Previous Machine IE */ - #define SR_SPP _AC(0x00000100, UL) /* Previously Supervisor */ -+#define SR_MPP _AC(0x00001800, UL) /* Previously Machine */ - #define SR_SUM _AC(0x00040000, UL) /* Supervisor User Memory Access */ - - #define SR_FS _AC(0x00006000, UL) /* Floating-point Status */ -@@ -44,9 +47,10 @@ - #define SATP_MODE SATP_MODE_39 - #endif - --/* SCAUSE */ --#define SCAUSE_IRQ_FLAG (_AC(1, UL) << (__riscv_xlen - 1)) -+/* Exception cause high bit - is an interrupt if set */ -+#define CAUSE_IRQ_FLAG (_AC(1, UL) << (__riscv_xlen - 1)) - -+/* Interrupt causes (minus the high bit) */ - #define IRQ_U_SOFT 0 - #define IRQ_S_SOFT 1 - #define IRQ_M_SOFT 3 -@@ -57,6 +61,7 @@ - #define IRQ_S_EXT 9 - #define IRQ_M_EXT 11 - -+/* Exception causes */ - #define EXC_INST_MISALIGNED 0 - #define EXC_INST_ACCESS 1 - #define EXC_BREAKPOINT 3 -@@ -67,14 +72,14 @@ - #define EXC_LOAD_PAGE_FAULT 13 - #define EXC_STORE_PAGE_FAULT 15 - --/* SIE (Interrupt Enable) and SIP (Interrupt Pending) flags */ --#define SIE_SSIE (_AC(0x1, UL) << IRQ_S_SOFT) --#define SIE_STIE (_AC(0x1, UL) << IRQ_S_TIMER) --#define SIE_SEIE (_AC(0x1, UL) << IRQ_S_EXT) -- -+/* symbolic CSR names: */ - #define CSR_CYCLE 0xc00 - #define CSR_TIME 0xc01 - #define CSR_INSTRET 0xc02 -+#define CSR_CYCLEH 0xc80 -+#define CSR_TIMEH 0xc81 -+#define CSR_INSTRETH 0xc82 -+ - #define CSR_SSTATUS 0x100 - #define CSR_SIE 0x104 - #define CSR_STVEC 0x105 -@@ -85,9 +90,56 @@ - #define CSR_STVAL 0x143 - #define CSR_SIP 0x144 - #define CSR_SATP 0x180 --#define CSR_CYCLEH 0xc80 --#define CSR_TIMEH 0xc81 --#define CSR_INSTRETH 0xc82 -+ -+#define CSR_MSTATUS 0x300 -+#define CSR_MIE 0x304 -+#define CSR_MTVEC 0x305 -+#define CSR_MSCRATCH 0x340 -+#define CSR_MEPC 0x341 -+#define CSR_MCAUSE 0x342 -+#define CSR_MTVAL 0x343 -+#define CSR_MIP 0x344 -+ -+#ifdef CONFIG_RISCV_M_MODE -+# define CSR_STATUS CSR_MSTATUS -+# define CSR_IE CSR_MIE -+# define CSR_TVEC CSR_MTVEC -+# define CSR_SCRATCH CSR_MSCRATCH -+# define CSR_EPC CSR_MEPC -+# define CSR_CAUSE CSR_MCAUSE -+# define CSR_TVAL CSR_MTVAL -+# define CSR_IP CSR_MIP -+ -+# define SR_IE SR_MIE -+# define SR_PIE SR_MPIE -+# define SR_PP SR_MPP -+ -+# define IRQ_SOFT IRQ_M_SOFT -+# define IRQ_TIMER IRQ_M_TIMER -+# define IRQ_EXT IRQ_M_EXT -+#else /* CONFIG_RISCV_M_MODE */ -+# define CSR_STATUS CSR_SSTATUS -+# define CSR_IE CSR_SIE -+# define CSR_TVEC CSR_STVEC -+# define CSR_SCRATCH CSR_SSCRATCH -+# define CSR_EPC CSR_SEPC -+# define CSR_CAUSE CSR_SCAUSE -+# define CSR_TVAL CSR_STVAL -+# define CSR_IP CSR_SIP -+ -+# define SR_IE SR_SIE -+# define SR_PIE SR_SPIE -+# define SR_PP SR_SPP -+ -+# define IRQ_SOFT IRQ_S_SOFT -+# define IRQ_TIMER IRQ_S_TIMER -+# define IRQ_EXT IRQ_S_EXT -+#endif /* CONFIG_RISCV_M_MODE */ -+ -+/* IE/IP (Supervisor/Machine Interrupt Enable/Pending) flags */ -+#define IE_SIE (_AC(0x1, UL) << IRQ_SOFT) -+#define IE_TIE (_AC(0x1, UL) << IRQ_TIMER) -+#define IE_EIE (_AC(0x1, UL) << IRQ_EXT) - - #ifndef __ASSEMBLY__ - -diff --git a/arch/riscv/include/asm/irqflags.h b/arch/riscv/include/asm/irqflags.h -index e70f647ce3b7..08d4d6a5b7e9 100644 ---- a/arch/riscv/include/asm/irqflags.h -+++ b/arch/riscv/include/asm/irqflags.h -@@ -13,31 +13,31 @@ - /* read interrupt enabled status */ - static inline unsigned long arch_local_save_flags(void) - { -- return csr_read(CSR_SSTATUS); -+ return csr_read(CSR_STATUS); - } - - /* unconditionally enable interrupts */ - static inline void arch_local_irq_enable(void) - { -- csr_set(CSR_SSTATUS, SR_SIE); -+ csr_set(CSR_STATUS, SR_IE); - } - - /* unconditionally disable interrupts */ - static inline void arch_local_irq_disable(void) - { -- csr_clear(CSR_SSTATUS, SR_SIE); -+ csr_clear(CSR_STATUS, SR_IE); - } - - /* get status and disable interrupts */ - static inline unsigned long arch_local_irq_save(void) - { -- return csr_read_clear(CSR_SSTATUS, SR_SIE); -+ return csr_read_clear(CSR_STATUS, SR_IE); - } - - /* test flags */ - static inline int arch_irqs_disabled_flags(unsigned long flags) - { -- return !(flags & SR_SIE); -+ return !(flags & SR_IE); - } - - /* test hardware interrupt enable bit */ -@@ -49,7 +49,7 @@ static inline int arch_irqs_disabled(void) - /* set interrupt enabled status */ - static inline void arch_local_irq_restore(unsigned long flags) - { -- csr_set(CSR_SSTATUS, flags & SR_SIE); -+ csr_set(CSR_STATUS, flags & SR_IE); - } - - #endif /* _ASM_RISCV_IRQFLAGS_H */ -diff --git a/arch/riscv/include/asm/processor.h b/arch/riscv/include/asm/processor.h -index 8c5b11a640dd..60fd02698b77 100644 ---- a/arch/riscv/include/asm/processor.h -+++ b/arch/riscv/include/asm/processor.h -@@ -44,7 +44,7 @@ struct thread_struct { - ((struct pt_regs *)(task_stack_page(tsk) + THREAD_SIZE \ - - ALIGN(sizeof(struct pt_regs), STACK_ALIGN))) - --#define KSTK_EIP(tsk) (task_pt_regs(tsk)->sepc) -+#define KSTK_EIP(tsk) (task_pt_regs(tsk)->epc) - #define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp) - - -diff --git a/arch/riscv/include/asm/ptrace.h b/arch/riscv/include/asm/ptrace.h -index d48d1e13973c..ee49f80c9533 100644 ---- a/arch/riscv/include/asm/ptrace.h -+++ b/arch/riscv/include/asm/ptrace.h -@@ -12,7 +12,7 @@ - #ifndef __ASSEMBLY__ - - struct pt_regs { -- unsigned long sepc; -+ unsigned long epc; - unsigned long ra; - unsigned long sp; - unsigned long gp; -@@ -44,10 +44,10 @@ struct pt_regs { - unsigned long t4; - unsigned long t5; - unsigned long t6; -- /* Supervisor CSRs */ -- unsigned long sstatus; -- unsigned long sbadaddr; -- unsigned long scause; -+ /* Supervisor/Machine CSRs */ -+ unsigned long status; -+ unsigned long badaddr; -+ unsigned long cause; - /* a0 value before the syscall */ - unsigned long orig_a0; - }; -@@ -58,18 +58,18 @@ struct pt_regs { - #define REG_FMT "%08lx" - #endif - --#define user_mode(regs) (((regs)->sstatus & SR_SPP) == 0) -+#define user_mode(regs) (((regs)->status & SR_PP) == 0) - - - /* Helpers for working with the instruction pointer */ - static inline unsigned long instruction_pointer(struct pt_regs *regs) - { -- return regs->sepc; -+ return regs->epc; - } - static inline void instruction_pointer_set(struct pt_regs *regs, - unsigned long val) - { -- regs->sepc = val; -+ regs->epc = val; - } - - #define profile_pc(regs) instruction_pointer(regs) -diff --git a/arch/riscv/include/asm/switch_to.h b/arch/riscv/include/asm/switch_to.h -index ee4f0ac62c9d..407bcc96a710 100644 ---- a/arch/riscv/include/asm/switch_to.h -+++ b/arch/riscv/include/asm/switch_to.h -@@ -17,19 +17,19 @@ extern void __fstate_restore(struct task_struct *restore_from); - - static inline void __fstate_clean(struct pt_regs *regs) - { -- regs->sstatus = (regs->sstatus & ~SR_FS) | SR_FS_CLEAN; -+ regs->status = (regs->status & ~SR_FS) | SR_FS_CLEAN; - } - - static inline void fstate_off(struct task_struct *task, - struct pt_regs *regs) - { -- regs->sstatus = (regs->sstatus & ~SR_FS) | SR_FS_OFF; -+ regs->status = (regs->status & ~SR_FS) | SR_FS_OFF; - } - - static inline void fstate_save(struct task_struct *task, - struct pt_regs *regs) - { -- if ((regs->sstatus & SR_FS) == SR_FS_DIRTY) { -+ if ((regs->status & SR_FS) == SR_FS_DIRTY) { - __fstate_save(task); - __fstate_clean(regs); - } -@@ -38,7 +38,7 @@ static inline void fstate_save(struct task_struct *task, - static inline void fstate_restore(struct task_struct *task, - struct pt_regs *regs) - { -- if ((regs->sstatus & SR_FS) != SR_FS_OFF) { -+ if ((regs->status & SR_FS) != SR_FS_OFF) { - __fstate_restore(task); - __fstate_clean(regs); - } -@@ -50,7 +50,7 @@ static inline void __switch_to_aux(struct task_struct *prev, - struct pt_regs *regs; - - regs = task_pt_regs(prev); -- if (unlikely(regs->sstatus & SR_SD)) -+ if (unlikely(regs->status & SR_SD)) - fstate_save(prev, regs); - fstate_restore(next, task_pt_regs(next)); - } -diff --git a/arch/riscv/kernel/asm-offsets.c b/arch/riscv/kernel/asm-offsets.c -index 42c69d5554e4..8a2614053274 100644 ---- a/arch/riscv/kernel/asm-offsets.c -+++ b/arch/riscv/kernel/asm-offsets.c -@@ -69,7 +69,7 @@ void asm_offsets(void) - OFFSET(TASK_THREAD_FCSR, task_struct, thread.fstate.fcsr); - - DEFINE(PT_SIZE, sizeof(struct pt_regs)); -- OFFSET(PT_SEPC, pt_regs, sepc); -+ OFFSET(PT_EPC, pt_regs, epc); - OFFSET(PT_RA, pt_regs, ra); - OFFSET(PT_FP, pt_regs, s0); - OFFSET(PT_S0, pt_regs, s0); -@@ -103,9 +103,9 @@ void asm_offsets(void) - OFFSET(PT_T6, pt_regs, t6); - OFFSET(PT_GP, pt_regs, gp); - OFFSET(PT_ORIG_A0, pt_regs, orig_a0); -- OFFSET(PT_SSTATUS, pt_regs, sstatus); -- OFFSET(PT_SBADADDR, pt_regs, sbadaddr); -- OFFSET(PT_SCAUSE, pt_regs, scause); -+ OFFSET(PT_STATUS, pt_regs, status); -+ OFFSET(PT_BADADDR, pt_regs, badaddr); -+ OFFSET(PT_CAUSE, pt_regs, cause); - - /* - * THREAD_{F,X}* might be larger than a S-type offset can handle, but -diff --git a/arch/riscv/kernel/entry.S b/arch/riscv/kernel/entry.S -index 9c87ae77ad5d..57b27b8278b1 100644 ---- a/arch/riscv/kernel/entry.S -+++ b/arch/riscv/kernel/entry.S -@@ -26,14 +26,14 @@ - - /* - * If coming from userspace, preserve the user thread pointer and load -- * the kernel thread pointer. If we came from the kernel, sscratch -- * will contain 0, and we should continue on the current TP. -+ * the kernel thread pointer. If we came from the kernel, the scratch -+ * register will contain 0, and we should continue on the current TP. - */ -- csrrw tp, CSR_SSCRATCH, tp -+ csrrw tp, CSR_SCRATCH, tp - bnez tp, _save_context - - _restore_kernel_tpsp: -- csrr tp, CSR_SSCRATCH -+ csrr tp, CSR_SCRATCH - REG_S sp, TASK_TI_KERNEL_SP(tp) - _save_context: - REG_S sp, TASK_TI_USER_SP(tp) -@@ -79,16 +79,16 @@ _save_context: - li t0, SR_SUM | SR_FS - - REG_L s0, TASK_TI_USER_SP(tp) -- csrrc s1, CSR_SSTATUS, t0 -- csrr s2, CSR_SEPC -- csrr s3, CSR_STVAL -- csrr s4, CSR_SCAUSE -- csrr s5, CSR_SSCRATCH -+ csrrc s1, CSR_STATUS, t0 -+ csrr s2, CSR_EPC -+ csrr s3, CSR_TVAL -+ csrr s4, CSR_CAUSE -+ csrr s5, CSR_SCRATCH - REG_S s0, PT_SP(sp) -- REG_S s1, PT_SSTATUS(sp) -- REG_S s2, PT_SEPC(sp) -- REG_S s3, PT_SBADADDR(sp) -- REG_S s4, PT_SCAUSE(sp) -+ REG_S s1, PT_STATUS(sp) -+ REG_S s2, PT_EPC(sp) -+ REG_S s3, PT_BADADDR(sp) -+ REG_S s4, PT_CAUSE(sp) - REG_S s5, PT_TP(sp) - .endm - -@@ -97,7 +97,7 @@ _save_context: - * registers from the stack. - */ - .macro RESTORE_ALL -- REG_L a0, PT_SSTATUS(sp) -+ REG_L a0, PT_STATUS(sp) - /* - * The current load reservation is effectively part of the processor's - * state, in the sense that load reservations cannot be shared between -@@ -115,11 +115,11 @@ _save_context: - * completes, implementations are allowed to expand reservations to be - * arbitrarily large. - */ -- REG_L a2, PT_SEPC(sp) -- REG_SC x0, a2, PT_SEPC(sp) -+ REG_L a2, PT_EPC(sp) -+ REG_SC x0, a2, PT_EPC(sp) - -- csrw CSR_SSTATUS, a0 -- csrw CSR_SEPC, a2 -+ csrw CSR_STATUS, a0 -+ csrw CSR_EPC, a2 - - REG_L x1, PT_RA(sp) - REG_L x3, PT_GP(sp) -@@ -163,10 +163,10 @@ ENTRY(handle_exception) - SAVE_ALL - - /* -- * Set sscratch register to 0, so that if a recursive exception -+ * Set the scratch register to 0, so that if a recursive exception - * occurs, the exception vector knows it came from the kernel - */ -- csrw CSR_SSCRATCH, x0 -+ csrw CSR_SCRATCH, x0 - - /* Load the global pointer */ - .option push -@@ -185,11 +185,13 @@ ENTRY(handle_exception) - move a0, sp /* pt_regs */ - tail do_IRQ - 1: -- /* Exceptions run with interrupts enabled or disabled -- depending on the state of sstatus.SR_SPIE */ -- andi t0, s1, SR_SPIE -+ /* -+ * Exceptions run with interrupts enabled or disabled depending on the -+ * state of SR_PIE in m/sstatus. -+ */ -+ andi t0, s1, SR_PIE - beqz t0, 1f -- csrs CSR_SSTATUS, SR_SIE -+ csrs CSR_STATUS, SR_IE - - 1: - /* Handle syscalls */ -@@ -217,7 +219,7 @@ handle_syscall: - * scall instruction on sret - */ - addi s2, s2, 0x4 -- REG_S s2, PT_SEPC(sp) -+ REG_S s2, PT_EPC(sp) - /* Trace syscalls, but only if requested by the user. */ - REG_L t0, TASK_TI_FLAGS(tp) - andi t0, t0, _TIF_SYSCALL_WORK -@@ -244,9 +246,15 @@ ret_from_syscall: - bnez t0, handle_syscall_trace_exit - - ret_from_exception: -- REG_L s0, PT_SSTATUS(sp) -- csrc CSR_SSTATUS, SR_SIE -+ REG_L s0, PT_STATUS(sp) -+ csrc CSR_STATUS, SR_IE -+#ifdef CONFIG_RISCV_M_MODE -+ /* the MPP value is too large to be used as an immediate arg for addi */ -+ li t0, SR_MPP -+ and s0, s0, t0 -+#else - andi s0, s0, SR_SPP -+#endif - bnez s0, resume_kernel - - resume_userspace: -@@ -260,14 +268,18 @@ resume_userspace: - REG_S s0, TASK_TI_KERNEL_SP(tp) - - /* -- * Save TP into sscratch, so we can find the kernel data structures -- * again. -+ * Save TP into the scratch register , so we can find the kernel data -+ * structures again. - */ -- csrw CSR_SSCRATCH, tp -+ csrw CSR_SCRATCH, tp - - restore_all: - RESTORE_ALL -+#ifdef CONFIG_RISCV_M_MODE -+ mret -+#else - sret -+#endif - - #if IS_ENABLED(CONFIG_PREEMPT) - resume_kernel: -@@ -287,7 +299,7 @@ work_pending: - bnez s1, work_resched - work_notifysig: - /* Handle pending signals and notify-resume requests */ -- csrs CSR_SSTATUS, SR_SIE /* Enable interrupts for do_notify_resume() */ -+ csrs CSR_STATUS, SR_IE /* Enable interrupts for do_notify_resume() */ - move a0, sp /* pt_regs */ - move a1, s0 /* current_thread_info->flags */ - tail do_notify_resume -diff --git a/arch/riscv/kernel/fpu.S b/arch/riscv/kernel/fpu.S -index 631d31540660..dd2205473de7 100644 ---- a/arch/riscv/kernel/fpu.S -+++ b/arch/riscv/kernel/fpu.S -@@ -23,7 +23,7 @@ ENTRY(__fstate_save) - li a2, TASK_THREAD_F0 - add a0, a0, a2 - li t1, SR_FS -- csrs CSR_SSTATUS, t1 -+ csrs CSR_STATUS, t1 - frcsr t0 - fsd f0, TASK_THREAD_F0_F0(a0) - fsd f1, TASK_THREAD_F1_F0(a0) -@@ -58,7 +58,7 @@ ENTRY(__fstate_save) - fsd f30, TASK_THREAD_F30_F0(a0) - fsd f31, TASK_THREAD_F31_F0(a0) - sw t0, TASK_THREAD_FCSR_F0(a0) -- csrc CSR_SSTATUS, t1 -+ csrc CSR_STATUS, t1 - ret - ENDPROC(__fstate_save) - -@@ -67,7 +67,7 @@ ENTRY(__fstate_restore) - add a0, a0, a2 - li t1, SR_FS - lw t0, TASK_THREAD_FCSR_F0(a0) -- csrs CSR_SSTATUS, t1 -+ csrs CSR_STATUS, t1 - fld f0, TASK_THREAD_F0_F0(a0) - fld f1, TASK_THREAD_F1_F0(a0) - fld f2, TASK_THREAD_F2_F0(a0) -@@ -101,6 +101,6 @@ ENTRY(__fstate_restore) - fld f30, TASK_THREAD_F30_F0(a0) - fld f31, TASK_THREAD_F31_F0(a0) - fscsr t0 -- csrc CSR_SSTATUS, t1 -+ csrc CSR_STATUS, t1 - ret - ENDPROC(__fstate_restore) -diff --git a/arch/riscv/kernel/head.S b/arch/riscv/kernel/head.S -index 344793159b97..57817c198774 100644 ---- a/arch/riscv/kernel/head.S -+++ b/arch/riscv/kernel/head.S -@@ -52,8 +52,8 @@ ENTRY(_start) - .global _start_kernel - _start_kernel: - /* Mask all interrupts */ -- csrw CSR_SIE, zero -- csrw CSR_SIP, zero -+ csrw CSR_IE, zero -+ csrw CSR_IP, zero - - /* Load the global pointer */ - .option push -@@ -66,7 +66,7 @@ _start_kernel: - * floating point in kernel space - */ - li t0, SR_FS -- csrc CSR_SSTATUS, t0 -+ csrc CSR_STATUS, t0 - - #ifdef CONFIG_SMP - li t0, CONFIG_NR_CPUS -@@ -121,7 +121,7 @@ relocate: - /* Point stvec to virtual address of intruction after satp write */ - la a2, 1f - add a2, a2, a1 -- csrw CSR_STVEC, a2 -+ csrw CSR_TVEC, a2 - - /* Compute satp for kernel page tables, but don't load it yet */ - srl a2, a0, PAGE_SHIFT -@@ -143,7 +143,7 @@ relocate: - 1: - /* Set trap vector to spin forever to help debug */ - la a0, .Lsecondary_park -- csrw CSR_STVEC, a0 -+ csrw CSR_TVEC, a0 - - /* Reload the global pointer */ - .option push -@@ -166,7 +166,7 @@ relocate: - #ifdef CONFIG_SMP - /* Set trap vector to spin forever to help debug */ - la a3, .Lsecondary_park -- csrw CSR_STVEC, a3 -+ csrw CSR_TVEC, a3 - - slli a3, a0, LGREG - la a1, __cpu_up_stack_pointer -diff --git a/arch/riscv/kernel/irq.c b/arch/riscv/kernel/irq.c -index fffac6ddb0e0..3f07a91d5afb 100644 ---- a/arch/riscv/kernel/irq.c -+++ b/arch/riscv/kernel/irq.c -@@ -11,13 +11,6 @@ - #include - #include - --/* -- * Possible interrupt causes: -- */ --#define INTERRUPT_CAUSE_SOFTWARE IRQ_S_SOFT --#define INTERRUPT_CAUSE_TIMER IRQ_S_TIMER --#define INTERRUPT_CAUSE_EXTERNAL IRQ_S_EXT -- - int arch_show_interrupts(struct seq_file *p, int prec) - { - show_ipi_stats(p, prec); -@@ -29,12 +22,12 @@ asmlinkage __visible void __irq_entry do_IRQ(struct pt_regs *regs) - struct pt_regs *old_regs = set_irq_regs(regs); - - irq_enter(); -- switch (regs->scause & ~SCAUSE_IRQ_FLAG) { -- case INTERRUPT_CAUSE_TIMER: -+ switch (regs->cause & ~CAUSE_IRQ_FLAG) { -+ case IRQ_TIMER: - riscv_timer_interrupt(); - break; - #ifdef CONFIG_SMP -- case INTERRUPT_CAUSE_SOFTWARE: -+ case IRQ_SOFT: - /* - * We only use software interrupts to pass IPIs, so if a non-SMP - * system gets one, then we don't know what to do. -@@ -42,11 +35,11 @@ asmlinkage __visible void __irq_entry do_IRQ(struct pt_regs *regs) - riscv_software_interrupt(); - break; - #endif -- case INTERRUPT_CAUSE_EXTERNAL: -+ case IRQ_EXT: - handle_arch_irq(regs); - break; - default: -- pr_alert("unexpected interrupt cause 0x%lx", regs->scause); -+ pr_alert("unexpected interrupt cause 0x%lx", regs->cause); - BUG(); - } - irq_exit(); -diff --git a/arch/riscv/kernel/perf_callchain.c b/arch/riscv/kernel/perf_callchain.c -index 11541cbe26b3..ed7c8fdde62b 100644 ---- a/arch/riscv/kernel/perf_callchain.c -+++ b/arch/riscv/kernel/perf_callchain.c -@@ -68,7 +68,7 @@ void perf_callchain_user(struct perf_callchain_entry_ctx *entry, - return; - - fp = regs->s0; -- perf_callchain_store(entry, regs->sepc); -+ perf_callchain_store(entry, regs->epc); - - fp = user_backtrace(entry, fp, regs->ra); - while (fp && !(fp & 0x7) && entry->nr < entry->max_stack) -diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c -index 9d4b4098874b..f17e7f4ad3e7 100644 ---- a/arch/riscv/kernel/process.c -+++ b/arch/riscv/kernel/process.c -@@ -35,8 +35,8 @@ void show_regs(struct pt_regs *regs) - { - show_regs_print_info(KERN_DEFAULT); - -- pr_cont("sepc: " REG_FMT " ra : " REG_FMT " sp : " REG_FMT "\n", -- regs->sepc, regs->ra, regs->sp); -+ pr_cont("epc: " REG_FMT " ra : " REG_FMT " sp : " REG_FMT "\n", -+ regs->epc, regs->ra, regs->sp); - pr_cont(" gp : " REG_FMT " tp : " REG_FMT " t0 : " REG_FMT "\n", - regs->gp, regs->tp, regs->t0); - pr_cont(" t1 : " REG_FMT " t2 : " REG_FMT " s0 : " REG_FMT "\n", -@@ -58,23 +58,23 @@ void show_regs(struct pt_regs *regs) - pr_cont(" t5 : " REG_FMT " t6 : " REG_FMT "\n", - regs->t5, regs->t6); - -- pr_cont("sstatus: " REG_FMT " sbadaddr: " REG_FMT " scause: " REG_FMT "\n", -- regs->sstatus, regs->sbadaddr, regs->scause); -+ pr_cont("status: " REG_FMT " badaddr: " REG_FMT " cause: " REG_FMT "\n", -+ regs->status, regs->badaddr, regs->cause); - } - - void start_thread(struct pt_regs *regs, unsigned long pc, - unsigned long sp) - { -- regs->sstatus = SR_SPIE; -+ regs->status = SR_PIE; - if (has_fpu) { -- regs->sstatus |= SR_FS_INITIAL; -+ regs->status |= SR_FS_INITIAL; - /* - * Restore the initial value to the FP register - * before starting the user program. - */ - fstate_restore(current, regs); - } -- regs->sepc = pc; -+ regs->epc = pc; - regs->sp = sp; - set_fs(USER_DS); - } -@@ -112,7 +112,8 @@ int copy_thread_tls(unsigned long clone_flags, unsigned long usp, - const register unsigned long gp __asm__ ("gp"); - memset(childregs, 0, sizeof(struct pt_regs)); - childregs->gp = gp; -- childregs->sstatus = SR_SPP | SR_SPIE; /* Supervisor, irqs on */ -+ /* Supervisor/Machine, irqs on: */ -+ childregs->status = SR_PP | SR_PIE; - - p->thread.ra = (unsigned long)ret_from_kernel_thread; - p->thread.s[0] = usp; /* fn */ -diff --git a/arch/riscv/kernel/signal.c b/arch/riscv/kernel/signal.c -index d0f6f212f5df..b7f9a5565c4b 100644 ---- a/arch/riscv/kernel/signal.c -+++ b/arch/riscv/kernel/signal.c -@@ -124,7 +124,7 @@ SYSCALL_DEFINE0(rt_sigreturn) - pr_info_ratelimited( - "%s[%d]: bad frame in %s: frame=%p pc=%p sp=%p\n", - task->comm, task_pid_nr(task), __func__, -- frame, (void *)regs->sepc, (void *)regs->sp); -+ frame, (void *)regs->epc, (void *)regs->sp); - } - force_sig(SIGSEGV); - return 0; -@@ -199,7 +199,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, - * We always pass siginfo and mcontext, regardless of SA_SIGINFO, - * since some things rely on this (e.g. glibc's debug/segfault.c). - */ -- regs->sepc = (unsigned long)ksig->ka.sa.sa_handler; -+ regs->epc = (unsigned long)ksig->ka.sa.sa_handler; - regs->sp = (unsigned long)frame; - regs->a0 = ksig->sig; /* a0: signal number */ - regs->a1 = (unsigned long)(&frame->info); /* a1: siginfo pointer */ -@@ -208,7 +208,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, - #if DEBUG_SIG - pr_info("SIG deliver (%s:%d): sig=%d pc=%p ra=%p sp=%p\n", - current->comm, task_pid_nr(current), ksig->sig, -- (void *)regs->sepc, (void *)regs->ra, frame); -+ (void *)regs->epc, (void *)regs->ra, frame); - #endif - - return 0; -@@ -220,10 +220,9 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs) - int ret; - - /* Are we from a system call? */ -- if (regs->scause == EXC_SYSCALL) { -+ if (regs->cause == EXC_SYSCALL) { - /* Avoid additional syscall restarting via ret_from_exception */ -- regs->scause = -1UL; -- -+ regs->cause = -1UL; - /* If so, check system call restarting.. */ - switch (regs->a0) { - case -ERESTART_RESTARTBLOCK: -@@ -239,7 +238,7 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs) - /* fallthrough */ - case -ERESTARTNOINTR: - regs->a0 = regs->orig_a0; -- regs->sepc -= 0x4; -+ regs->epc -= 0x4; - break; - } - } -@@ -261,9 +260,9 @@ static void do_signal(struct pt_regs *regs) - } - - /* Did we come from a system call? */ -- if (regs->scause == EXC_SYSCALL) { -+ if (regs->cause == EXC_SYSCALL) { - /* Avoid additional syscall restarting via ret_from_exception */ -- regs->scause = -1UL; -+ regs->cause = -1UL; - - /* Restart the system call - no handlers present */ - switch (regs->a0) { -@@ -271,12 +270,12 @@ static void do_signal(struct pt_regs *regs) - case -ERESTARTSYS: - case -ERESTARTNOINTR: - regs->a0 = regs->orig_a0; -- regs->sepc -= 0x4; -+ regs->epc -= 0x4; - break; - case -ERESTART_RESTARTBLOCK: - regs->a0 = regs->orig_a0; - regs->a7 = __NR_restart_syscall; -- regs->sepc -= 0x4; -+ regs->epc -= 0x4; - break; - } - } -diff --git a/arch/riscv/kernel/smp.c b/arch/riscv/kernel/smp.c -index 098c04adbaaf..d724a7e6f4eb 100644 ---- a/arch/riscv/kernel/smp.c -+++ b/arch/riscv/kernel/smp.c -@@ -108,7 +108,7 @@ static void send_ipi_single(int cpu, enum ipi_message_type op) - - static inline void clear_ipi(void) - { -- csr_clear(CSR_SIP, SIE_SSIE); -+ csr_clear(CSR_IP, IE_SIE); - } - - void riscv_software_interrupt(void) -diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c -index c28d4debf592..030094ac7190 100644 ---- a/arch/riscv/kernel/traps.c -+++ b/arch/riscv/kernel/traps.c -@@ -42,7 +42,7 @@ void die(struct pt_regs *regs, const char *str) - print_modules(); - show_regs(regs); - -- ret = notify_die(DIE_OOPS, str, regs, 0, regs->scause, SIGSEGV); -+ ret = notify_die(DIE_OOPS, str, regs, 0, regs->cause, SIGSEGV); - - if (regs && kexec_should_crash(current)) - crash_kexec(regs); -@@ -90,7 +90,7 @@ static void do_trap_error(struct pt_regs *regs, int signo, int code, - #define DO_ERROR_INFO(name, signo, code, str) \ - asmlinkage __visible void name(struct pt_regs *regs) \ - { \ -- do_trap_error(regs, signo, code, regs->sepc, "Oops - " str); \ -+ do_trap_error(regs, signo, code, regs->epc, "Oops - " str); \ - } - - DO_ERROR_INFO(do_trap_unknown, -@@ -128,9 +128,9 @@ static inline unsigned long get_break_insn_length(unsigned long pc) - asmlinkage __visible void do_trap_break(struct pt_regs *regs) - { - if (user_mode(regs)) -- force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->sepc); -- else if (report_bug(regs->sepc, regs) == BUG_TRAP_TYPE_WARN) -- regs->sepc += get_break_insn_length(regs->sepc); -+ force_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->epc); -+ else if (report_bug(regs->epc, regs) == BUG_TRAP_TYPE_WARN) -+ regs->epc += get_break_insn_length(regs->epc); - else - die(regs, "Kernel BUG"); - } -@@ -157,9 +157,9 @@ void __init trap_init(void) - * Set sup0 scratch register to 0, indicating to exception vector - * that we are presently executing in the kernel - */ -- csr_write(CSR_SSCRATCH, 0); -+ csr_write(CSR_SCRATCH, 0); - /* Set the exception vector address */ -- csr_write(CSR_STVEC, &handle_exception); -+ csr_write(CSR_TVEC, &handle_exception); - /* Enable all interrupts */ -- csr_write(CSR_SIE, -1); -+ csr_write(CSR_IE, -1); - } -diff --git a/arch/riscv/lib/uaccess.S b/arch/riscv/lib/uaccess.S -index ed2696c0143d..fecd65657a6f 100644 ---- a/arch/riscv/lib/uaccess.S -+++ b/arch/riscv/lib/uaccess.S -@@ -18,7 +18,7 @@ ENTRY(__asm_copy_from_user) - - /* Enable access to user memory */ - li t6, SR_SUM -- csrs CSR_SSTATUS, t6 -+ csrs CSR_STATUS, t6 - - add a3, a1, a2 - /* Use word-oriented copy only if low-order bits match */ -@@ -47,7 +47,7 @@ ENTRY(__asm_copy_from_user) - - 3: - /* Disable access to user memory */ -- csrc CSR_SSTATUS, t6 -+ csrc CSR_STATUS, t6 - li a0, 0 - ret - 4: /* Edge case: unalignment */ -@@ -72,7 +72,7 @@ ENTRY(__clear_user) - - /* Enable access to user memory */ - li t6, SR_SUM -- csrs CSR_SSTATUS, t6 -+ csrs CSR_STATUS, t6 - - add a3, a0, a1 - addi t0, a0, SZREG-1 -@@ -94,7 +94,7 @@ ENTRY(__clear_user) - - 3: - /* Disable access to user memory */ -- csrc CSR_SSTATUS, t6 -+ csrc CSR_STATUS, t6 - li a0, 0 - ret - 4: /* Edge case: unalignment */ -@@ -114,11 +114,11 @@ ENDPROC(__clear_user) - /* Fixup code for __copy_user(10) and __clear_user(11) */ - 10: - /* Disable access to user memory */ -- csrs CSR_SSTATUS, t6 -+ csrs CSR_STATUS, t6 - mv a0, a2 - ret - 11: -- csrs CSR_SSTATUS, t6 -+ csrs CSR_STATUS, t6 - mv a0, a1 - ret - .previous -diff --git a/arch/riscv/mm/extable.c b/arch/riscv/mm/extable.c -index 7aed9178d365..2fc729422151 100644 ---- a/arch/riscv/mm/extable.c -+++ b/arch/riscv/mm/extable.c -@@ -15,9 +15,9 @@ int fixup_exception(struct pt_regs *regs) - { - const struct exception_table_entry *fixup; - -- fixup = search_exception_tables(regs->sepc); -+ fixup = search_exception_tables(regs->epc); - if (fixup) { -- regs->sepc = fixup->fixup; -+ regs->epc = fixup->fixup; - return 1; - } - return 0; -diff --git a/arch/riscv/mm/fault.c b/arch/riscv/mm/fault.c -index 1cfce62caa11..55ac8b7bb432 100644 ---- a/arch/riscv/mm/fault.c -+++ b/arch/riscv/mm/fault.c -@@ -34,8 +34,8 @@ asmlinkage void do_page_fault(struct pt_regs *regs) - int code = SEGV_MAPERR; - vm_fault_t fault; - -- cause = regs->scause; -- addr = regs->sbadaddr; -+ cause = regs->cause; -+ addr = regs->badaddr; - - tsk = current; - mm = tsk->mm; -@@ -53,7 +53,7 @@ asmlinkage void do_page_fault(struct pt_regs *regs) - goto vmalloc_fault; - - /* Enable interrupts if they were enabled in the parent context. */ -- if (likely(regs->sstatus & SR_SPIE)) -+ if (likely(regs->status & SR_PIE)) - local_irq_enable(); - - /* -diff --git a/drivers/clocksource/timer-riscv.c b/drivers/clocksource/timer-riscv.c -index 4b04ffbe5e7e..cd8395171849 100644 ---- a/drivers/clocksource/timer-riscv.c -+++ b/drivers/clocksource/timer-riscv.c -@@ -19,7 +19,7 @@ - static int riscv_clock_next_event(unsigned long delta, - struct clock_event_device *ce) - { -- csr_set(sie, SIE_STIE); -+ csr_set(CSR_IE, IE_TIE); - sbi_set_timer(get_cycles64() + delta); - return 0; - } -@@ -61,13 +61,13 @@ static int riscv_timer_starting_cpu(unsigned int cpu) - ce->cpumask = cpumask_of(cpu); - clockevents_config_and_register(ce, riscv_timebase, 100, 0x7fffffff); - -- csr_set(sie, SIE_STIE); -+ csr_set(CSR_IE, IE_TIE); - return 0; - } - - static int riscv_timer_dying_cpu(unsigned int cpu) - { -- csr_clear(sie, SIE_STIE); -+ csr_clear(CSR_IE, IE_TIE); - return 0; - } - -@@ -76,7 +76,7 @@ void riscv_timer_interrupt(void) - { - struct clock_event_device *evdev = this_cpu_ptr(&riscv_clock_event); - -- csr_clear(sie, SIE_STIE); -+ csr_clear(CSR_IE, IE_TIE); - evdev->event_handler(evdev); - } - -diff --git a/drivers/irqchip/irq-sifive-plic.c b/drivers/irqchip/irq-sifive-plic.c -index 9dad45d928bf..2dca689a5cbc 100644 ---- a/drivers/irqchip/irq-sifive-plic.c -+++ b/drivers/irqchip/irq-sifive-plic.c -@@ -187,7 +187,7 @@ static void plic_handle_irq(struct pt_regs *regs) - - WARN_ON_ONCE(!handler->present); - -- csr_clear(sie, SIE_SEIE); -+ csr_clear(CSR_IE, IE_EIE); - while ((hwirq = readl(claim))) { - int irq = irq_find_mapping(plic_irqdomain, hwirq); - -@@ -197,7 +197,7 @@ static void plic_handle_irq(struct pt_regs *regs) - else - generic_handle_irq(irq); - } -- csr_set(sie, SIE_SEIE); -+ csr_set(CSR_IE, IE_EIE); - } - - /* -@@ -258,8 +258,11 @@ static int __init plic_init(struct device_node *node, - continue; - } - -- /* skip contexts other than supervisor external interrupt */ -- if (parent.args[0] != IRQ_S_EXT) -+ /* -+ * Skip contexts other than external interrupts for our -+ * privilege level. -+ */ -+ if (parent.args[0] != IRQ_EXT) - continue; - - hartid = plic_find_hart_id(parent.np); --- -2.39.5 - diff --git a/queue-5.4/riscv-avoid-enabling-interrupts-in-die.patch b/queue-5.4/riscv-avoid-enabling-interrupts-in-die.patch deleted file mode 100644 index b05ff47582e..00000000000 --- a/queue-5.4/riscv-avoid-enabling-interrupts-in-die.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 6b95ce051d8be5637ece3e3f58e8035c8b2309cf Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Wed, 15 Feb 2023 14:48:28 +0000 -Subject: riscv: Avoid enabling interrupts in die() -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -From: Mattias Nissler - -[ Upstream commit 130aee3fd9981297ff9354e5d5609cd59aafbbea ] - -While working on something else, I noticed that the kernel would start -accepting interrupts again after crashing in an interrupt handler. Since -the kernel is already in inconsistent state, enabling interrupts is -dangerous and opens up risk of kernel state deteriorating further. -Interrupts do get enabled via what looks like an unintended side effect of -spin_unlock_irq, so switch to the more cautious -spin_lock_irqsave/spin_unlock_irqrestore instead. - -Fixes: 76d2a0493a17 ("RISC-V: Init and Halt Code") -Signed-off-by: Mattias Nissler -Reviewed-by: Björn Töpel -Link: https://lore.kernel.org/r/20230215144828.3370316-1-mnissler@rivosinc.com -Cc: stable@vger.kernel.org -Signed-off-by: Palmer Dabbelt -Stable-dep-of: 6a97f4118ac0 ("riscv: Fix sleeping in invalid context in die()") -Signed-off-by: Sasha Levin ---- - arch/riscv/kernel/traps.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c -index 533087439e80..d255d88cf522 100644 ---- a/arch/riscv/kernel/traps.c -+++ b/arch/riscv/kernel/traps.c -@@ -30,10 +30,11 @@ void die(struct pt_regs *regs, const char *str) - static int die_counter; - int ret; - long cause; -+ unsigned long flags; - - oops_enter(); - -- spin_lock_irq(&die_lock); -+ spin_lock_irqsave(&die_lock, flags); - console_verbose(); - bust_spinlocks(1); - -@@ -50,7 +51,7 @@ void die(struct pt_regs *regs, const char *str) - - bust_spinlocks(0); - add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE); -- spin_unlock_irq(&die_lock); -+ spin_unlock_irqrestore(&die_lock, flags); - oops_exit(); - - if (in_interrupt()) --- -2.39.5 - diff --git a/queue-5.4/riscv-fix-sleeping-in-invalid-context-in-die.patch b/queue-5.4/riscv-fix-sleeping-in-invalid-context-in-die.patch deleted file mode 100644 index 3a88f97ad26..00000000000 --- a/queue-5.4/riscv-fix-sleeping-in-invalid-context-in-die.patch +++ /dev/null @@ -1,79 +0,0 @@ -From 6d6dbc938ae4e9b400e9410b5cab83c3f488e03a Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 18 Nov 2024 10:13:33 +0100 -Subject: riscv: Fix sleeping in invalid context in die() - -From: Nam Cao - -[ Upstream commit 6a97f4118ac07cfdc316433f385dbdc12af5025e ] - -die() can be called in exception handler, and therefore cannot sleep. -However, die() takes spinlock_t which can sleep with PREEMPT_RT enabled. -That causes the following warning: - -BUG: sleeping function called from invalid context at kernel/locking/spinlock_rt.c:48 -in_atomic(): 1, irqs_disabled(): 1, non_block: 0, pid: 285, name: mutex -preempt_count: 110001, expected: 0 -RCU nest depth: 0, expected: 0 -CPU: 0 UID: 0 PID: 285 Comm: mutex Not tainted 6.12.0-rc7-00022-ge19049cf7d56-dirty #234 -Hardware name: riscv-virtio,qemu (DT) -Call Trace: - dump_backtrace+0x1c/0x24 - show_stack+0x2c/0x38 - dump_stack_lvl+0x5a/0x72 - dump_stack+0x14/0x1c - __might_resched+0x130/0x13a - rt_spin_lock+0x2a/0x5c - die+0x24/0x112 - do_trap_insn_illegal+0xa0/0xea - _new_vmalloc_restore_context_a0+0xcc/0xd8 -Oops - illegal instruction [#1] - -Switch to use raw_spinlock_t, which does not sleep even with PREEMPT_RT -enabled. - -Fixes: 76d2a0493a17 ("RISC-V: Init and Halt Code") -Signed-off-by: Nam Cao -Cc: stable@vger.kernel.org -Reviewed-by: Sebastian Andrzej Siewior -Link: https://lore.kernel.org/r/20241118091333.1185288-1-namcao@linutronix.de -Signed-off-by: Palmer Dabbelt -Signed-off-by: Sasha Levin ---- - arch/riscv/kernel/traps.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c -index d255d88cf522..fbc918f127dc 100644 ---- a/arch/riscv/kernel/traps.c -+++ b/arch/riscv/kernel/traps.c -@@ -23,7 +23,7 @@ - - int show_unhandled_signals = 1; - --static DEFINE_SPINLOCK(die_lock); -+static DEFINE_RAW_SPINLOCK(die_lock); - - void die(struct pt_regs *regs, const char *str) - { -@@ -34,7 +34,7 @@ void die(struct pt_regs *regs, const char *str) - - oops_enter(); - -- spin_lock_irqsave(&die_lock, flags); -+ raw_spin_lock_irqsave(&die_lock, flags); - console_verbose(); - bust_spinlocks(1); - -@@ -51,7 +51,7 @@ void die(struct pt_regs *regs, const char *str) - - bust_spinlocks(0); - add_taint(TAINT_DIE, LOCKDEP_NOW_UNRELIABLE); -- spin_unlock_irqrestore(&die_lock, flags); -+ raw_spin_unlock_irqrestore(&die_lock, flags); - oops_exit(); - - if (in_interrupt()) --- -2.39.5 - diff --git a/queue-5.4/riscv-prefix-irq_-macro-names-with-an-rv_-namespace.patch b/queue-5.4/riscv-prefix-irq_-macro-names-with-an-rv_-namespace.patch deleted file mode 100644 index 84b0b11b0e4..00000000000 --- a/queue-5.4/riscv-prefix-irq_-macro-names-with-an-rv_-namespace.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 2f3035da4019780250658d1ffe486bc324e04805 Mon Sep 17 00:00:00 2001 -From: Paul Walmsley -Date: Fri, 20 Dec 2019 03:09:49 -0800 -Subject: riscv: prefix IRQ_ macro names with an RV_ namespace - -From: Paul Walmsley - -commit 2f3035da4019780250658d1ffe486bc324e04805 upstream. - -"IRQ_TIMER", used in the arch/riscv CSR header file, is a sufficiently -generic macro name that it's used by several source files across the -Linux code base. Some of these other files ultimately include the -arch/riscv CSR include file, causing collisions. Fix by prefixing the -RISC-V csr.h IRQ_ macro names with an RV_ prefix. - -Fixes: a4c3733d32a72 ("riscv: abstract out CSR names for supervisor vs machine mode") -Reported-by: Olof Johansson -Acked-by: Olof Johansson -Signed-off-by: Paul Walmsley -Signed-off-by: Greg Kroah-Hartman ---- - arch/riscv/include/asm/csr.h | 18 +++++++++--------- - arch/riscv/kernel/irq.c | 6 +++--- - drivers/irqchip/irq-sifive-plic.c | 2 +- - 3 files changed, 13 insertions(+), 13 deletions(-) - ---- a/arch/riscv/include/asm/csr.h -+++ b/arch/riscv/include/asm/csr.h -@@ -114,9 +114,9 @@ - # define SR_PIE SR_MPIE - # define SR_PP SR_MPP - --# define IRQ_SOFT IRQ_M_SOFT --# define IRQ_TIMER IRQ_M_TIMER --# define IRQ_EXT IRQ_M_EXT -+# define RV_IRQ_SOFT IRQ_M_SOFT -+# define RV_IRQ_TIMER IRQ_M_TIMER -+# define RV_IRQ_EXT IRQ_M_EXT - #else /* CONFIG_RISCV_M_MODE */ - # define CSR_STATUS CSR_SSTATUS - # define CSR_IE CSR_SIE -@@ -131,15 +131,15 @@ - # define SR_PIE SR_SPIE - # define SR_PP SR_SPP - --# define IRQ_SOFT IRQ_S_SOFT --# define IRQ_TIMER IRQ_S_TIMER --# define IRQ_EXT IRQ_S_EXT -+# define RV_IRQ_SOFT IRQ_S_SOFT -+# define RV_IRQ_TIMER IRQ_S_TIMER -+# define RV_IRQ_EXT IRQ_S_EXT - #endif /* CONFIG_RISCV_M_MODE */ - - /* IE/IP (Supervisor/Machine Interrupt Enable/Pending) flags */ --#define IE_SIE (_AC(0x1, UL) << IRQ_SOFT) --#define IE_TIE (_AC(0x1, UL) << IRQ_TIMER) --#define IE_EIE (_AC(0x1, UL) << IRQ_EXT) -+#define IE_SIE (_AC(0x1, UL) << RV_IRQ_SOFT) -+#define IE_TIE (_AC(0x1, UL) << RV_IRQ_TIMER) -+#define IE_EIE (_AC(0x1, UL) << RV_IRQ_EXT) - - #ifndef __ASSEMBLY__ - ---- a/arch/riscv/kernel/irq.c -+++ b/arch/riscv/kernel/irq.c -@@ -23,11 +23,11 @@ asmlinkage __visible void __irq_entry do - - irq_enter(); - switch (regs->cause & ~CAUSE_IRQ_FLAG) { -- case IRQ_TIMER: -+ case RV_IRQ_TIMER: - riscv_timer_interrupt(); - break; - #ifdef CONFIG_SMP -- case IRQ_SOFT: -+ case RV_IRQ_SOFT: - /* - * We only use software interrupts to pass IPIs, so if a non-SMP - * system gets one, then we don't know what to do. -@@ -35,7 +35,7 @@ asmlinkage __visible void __irq_entry do - riscv_software_interrupt(); - break; - #endif -- case IRQ_EXT: -+ case RV_IRQ_EXT: - handle_arch_irq(regs); - break; - default: ---- a/drivers/irqchip/irq-sifive-plic.c -+++ b/drivers/irqchip/irq-sifive-plic.c -@@ -262,7 +262,7 @@ static int __init plic_init(struct devic - * Skip contexts other than external interrupts for our - * privilege level. - */ -- if (parent.args[0] != IRQ_EXT) -+ if (parent.args[0] != RV_IRQ_EXT) - continue; - - hartid = plic_find_hart_id(parent.np); diff --git a/queue-5.4/riscv-remove-unused-handle_exception-symbol.patch b/queue-5.4/riscv-remove-unused-handle_exception-symbol.patch deleted file mode 100644 index a26546d316d..00000000000 --- a/queue-5.4/riscv-remove-unused-handle_exception-symbol.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 41b33c44b51d27f711d2e822d711de291c216c75 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Sat, 1 May 2021 20:53:58 +0200 -Subject: riscv: remove unused handle_exception symbol - -From: Rouven Czerwinski - -[ Upstream commit beaf5ae15a13d835a01e30c282c8325ce0f1eb7e ] - -Since commit 79b1feba5455 ("RISC-V: Setup exception vector early") -exception vectors are setup early and the handle_exception symbol from -the asm files is no longer referenced in traps.c. Remove it. - -Signed-off-by: Rouven Czerwinski -Signed-off-by: Palmer Dabbelt -Stable-dep-of: 6a97f4118ac0 ("riscv: Fix sleeping in invalid context in die()") -Signed-off-by: Sasha Levin ---- - arch/riscv/kernel/traps.c | 2 -- - 1 file changed, 2 deletions(-) - -diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c -index 030094ac7190..184f7b82c5ae 100644 ---- a/arch/riscv/kernel/traps.c -+++ b/arch/riscv/kernel/traps.c -@@ -23,8 +23,6 @@ - - int show_unhandled_signals = 1; - --extern asmlinkage void handle_exception(void); -- - static DEFINE_SPINLOCK(die_lock); - - void die(struct pt_regs *regs, const char *str) --- -2.39.5 - diff --git a/queue-5.4/series b/queue-5.4/series index d0814551907..478d4d7b334 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -44,13 +44,6 @@ phy-core-fix-that-api-devm_of_phy_provider_unregiste.patch ocfs2-correct-return-value-of-ocfs2_local_free_info.patch ocfs2-fix-slab-use-after-free-due-to-dangling-pointe.patch sctp-sysctl-rto_min-max-avoid-using-current-nsproxy.patch -riscv-abstract-out-csr-names-for-supervisor-vs-machi.patch -riscv-remove-unused-handle_exception-symbol.patch -risc-v-avoid-dereferening-null-regs-in-die.patch -riscv-avoid-enabling-interrupts-in-die.patch -riscv-fix-sleeping-in-invalid-context-in-die.patch -riscv-prefix-irq_-macro-names-with-an-rv_-namespace.patch -risc-v-don-t-enable-all-interrupts-in-trap_init.patch net-ethernet-ti-cpsw_ale-fix-cpsw_ale_get_field.patch net-net_namespace-optimize-the-code.patch net-add-exit_batch_rtnl-method.patch -- 2.47.3