On 2024/3/26 下午2:21, Tiezhu Yang wrote:
In the current code, SMP is selected in Kconfig for LoongArch, the users
can not unset it, this is reasonable for a multiprocessor machine. But as
the help info of config SMP said, if you have a system with only one CPU,
say N. On a uniprocessor machine, the kernel will run faster if you say N
here.
The Loongson-2K0500 is a single-core CPU for applications like industrial
control, printing terminals, and BMC (Baseboard Management Controller),
there are many development boards, products and solutions on the market,
so it is better and necessary to give a chance to build under !CONFIG_SMP
for a uniprocessor machine.
+++ b/arch/loongarch/include/asm/smp.hIt is unsafe here though physical cpuid of BSP is 0 always.
@@ -6,6 +6,7 @@
#ifndef __ASM_SMP_H
#define __ASM_SMP_H
+#ifdef CONFIG_SMP
#include <linux/atomic.h>
#include <linux/bitops.h>
#include <linux/linkage.h>
@@ -101,4 +102,8 @@ static inline void __cpu_die(unsigned int cpu)
}
#endif
+#else /* !CONFIG_SMP */
+#define cpu_logical_map(cpu) 0
It is better to use __cpu_logical_map[cpu] or read_csr_cpuid()
+#endif
+++ b/arch/loongarch/power/suspend.cIt is another issue, CONFIG_HAVE_SETUP_PER_CPU_AREA should not depend on NUMA. PERCPU_BASE_KS should be set even for UP.
@@ -44,7 +44,9 @@ void loongarch_common_resume(void)
{
sync_counter();
local_flush_tlb_all();
+#ifdef CONFIG_HAVE_SETUP_PER_CPU_AREA
csr_write64(per_cpu_offset(0), PERCPU_BASE_KS);
+#endif