diff --git a/kernel.spec b/kernel.spec index ec8cf5a5e..7c5cdf736 100644 --- a/kernel.spec +++ b/kernel.spec @@ -180,7 +180,7 @@ Summary: The Linux kernel # This is needed to do merge window version magic %define patchlevel 5 # This allows pkg_release to have configurable %%{?dist} tag -%define specrelease 0.rc4.30%{?buildid}.2.riscv64%{?dist} +%define specrelease 0.rc4.30%{?buildid}.3.riscv64%{?dist} # This defines the kabi tarball version %define kabiversion 6.5.0 diff --git a/linux-kernel-test.patch b/linux-kernel-test.patch index e69de29bb..09b3e5cea 100644 --- a/linux-kernel-test.patch +++ b/linux-kernel-test.patch @@ -0,0 +1,76 @@ +diff --git a/arch/riscv/kernel/cpu.c b/arch/riscv/kernel/cpu.c +index a2fc952318e9..35b854cf078e 100644 +--- a/arch/riscv/kernel/cpu.c ++++ b/arch/riscv/kernel/cpu.c +@@ -17,6 +17,11 @@ + #include + #include + ++bool arch_match_cpu_phys_id(int cpu, u64 phys_id) ++{ ++ return phys_id == cpuid_to_hartid_map(cpu); ++} ++ + /* + * Returns the hart ID of the given device tree node, or -ENODEV if the node + * isn't an enabled and valid RISC-V hart node. +diff --git a/arch/riscv/kernel/smp.c b/arch/riscv/kernel/smp.c +index 85bbce0f758c..40420afbb1a0 100644 +--- a/arch/riscv/kernel/smp.c ++++ b/arch/riscv/kernel/smp.c +@@ -61,11 +61,6 @@ int riscv_hartid_to_cpuid(unsigned long hartid) + return -ENOENT; + } + +-bool arch_match_cpu_phys_id(int cpu, u64 phys_id) +-{ +- return phys_id == cpuid_to_hartid_map(cpu); +-} +- + static void ipi_stop(void) + { + set_cpu_online(smp_processor_id(), false); +diff --git a/arch/riscv/include/asm/irqflags.h b/arch/riscv/include/asm/irqflags.h +index 08d4d6a5b7e9..7c31fc3c3559 100644 +--- a/arch/riscv/include/asm/irqflags.h ++++ b/arch/riscv/include/asm/irqflags.h +@@ -49,7 +49,10 @@ static inline int arch_irqs_disabled(void) + /* set interrupt enabled status */ + static inline void arch_local_irq_restore(unsigned long flags) + { +- csr_set(CSR_STATUS, flags & SR_IE); ++ if (flags & SR_IE) ++ csr_set(CSR_STATUS, SR_IE); ++ else ++ csr_clear(CSR_STATUS, SR_IE); + } + + #endif /* _ASM_RISCV_IRQFLAGS_H */ +diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c +index f910dfccbf5d..927347a19847 100644 +--- a/arch/riscv/kernel/traps.c ++++ b/arch/riscv/kernel/traps.c +@@ -372,6 +372,9 @@ asmlinkage void noinstr do_irq(struct pt_regs *regs) + : [sp] "r" (sp), [regs] "r" (regs) + : "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", + "t0", "t1", "t2", "t3", "t4", "t5", "t6", ++#ifndef CONFIG_FRAME_POINTER ++ "s0", ++#endif + "memory"); + } else + #endif +diff --git a/arch/riscv/kernel/irq.c b/arch/riscv/kernel/irq.c +index d0577cc6a081..a8efa053c4a5 100644 +--- a/arch/riscv/kernel/irq.c ++++ b/arch/riscv/kernel/irq.c +@@ -84,6 +84,9 @@ void do_softirq_own_stack(void) + : [sp] "r" (sp) + : "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", + "t0", "t1", "t2", "t3", "t4", "t5", "t6", ++#ifndef CONFIG_FRAME_POINTER ++ "s0", ++#endif + "memory"); + } else + #endif