瀏覽代碼

ARC: Allow SMP kernel to build/boot on UP-only infrastructure

In light of recent SNAFU with SMP build, allow simple platform to build
as SMP but run UP.

* Remove the dependence on simulation SMP extension to enable quick
  build/test iterations of SMP kernel.

* In absence of platform SMP registration, prevent the NULL smp feature
  name from borkign the system

Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
Vineet Gupta 11 年之前
父節點
當前提交
619f30188f
共有 5 個文件被更改,包括 13 次插入16 次删除
  1. 9 1
      arch/arc/include/asm/smp.h
  2. 1 12
      arch/arc/kernel/setup.c
  3. 1 1
      arch/arc/kernel/smp.c
  4. 1 1
      arch/arc/plat-arcfpga/Kconfig
  5. 1 1
      arch/arc/plat-arcfpga/platform.c

+ 9 - 1
arch/arc/include/asm/smp.h

@@ -59,7 +59,15 @@ struct plat_smp_ops {
 /* TBD: stop exporting it for direct population by platform */
 /* TBD: stop exporting it for direct population by platform */
 extern struct plat_smp_ops  plat_smp_ops;
 extern struct plat_smp_ops  plat_smp_ops;
 
 
-#endif  /* CONFIG_SMP */
+#else /* CONFIG_SMP */
+
+static inline void smp_init_cpus(void) {}
+static inline const char *arc_platform_smp_cpuinfo(void)
+{
+	return "";
+}
+
+#endif  /* !CONFIG_SMP */
 
 
 /*
 /*
  * ARC700 doesn't support atomic Read-Modify-Write ops.
  * ARC700 doesn't support atomic Read-Modify-Write ops.

+ 1 - 12
arch/arc/kernel/setup.c

@@ -24,6 +24,7 @@
 #include <asm/unwind.h>
 #include <asm/unwind.h>
 #include <asm/clk.h>
 #include <asm/clk.h>
 #include <asm/mach_desc.h>
 #include <asm/mach_desc.h>
+#include <asm/smp.h>
 
 
 #define FIX_PTR(x)  __asm__ __volatile__(";" : "+r"(x))
 #define FIX_PTR(x)  __asm__ __volatile__(";" : "+r"(x))
 
 
@@ -306,10 +307,7 @@ void setup_processor(void)
 	arc_chk_ccms();
 	arc_chk_ccms();
 
 
 	printk(arc_extn_mumbojumbo(cpu_id, str, sizeof(str)));
 	printk(arc_extn_mumbojumbo(cpu_id, str, sizeof(str)));
-
-#ifdef CONFIG_SMP
 	printk(arc_platform_smp_cpuinfo());
 	printk(arc_platform_smp_cpuinfo());
-#endif
 
 
 	arc_chk_fpu();
 	arc_chk_fpu();
 }
 }
@@ -360,11 +358,7 @@ void __init setup_arch(char **cmdline_p)
 		machine_desc->init_early();
 		machine_desc->init_early();
 
 
 	setup_processor();
 	setup_processor();
-
-#ifdef CONFIG_SMP
 	smp_init_cpus();
 	smp_init_cpus();
-#endif
-
 	setup_arch_memory();
 	setup_arch_memory();
 
 
 	/* copy flat DT out of .init and then unflatten it */
 	/* copy flat DT out of .init and then unflatten it */
@@ -424,14 +418,9 @@ static int show_cpuinfo(struct seq_file *m, void *v)
 		   (loops_per_jiffy / (5000 / HZ)) % 100);
 		   (loops_per_jiffy / (5000 / HZ)) % 100);
 
 
 	seq_printf(m, arc_mmu_mumbojumbo(cpu_id, str, PAGE_SIZE));
 	seq_printf(m, arc_mmu_mumbojumbo(cpu_id, str, PAGE_SIZE));
-
 	seq_printf(m, arc_cache_mumbojumbo(cpu_id, str, PAGE_SIZE));
 	seq_printf(m, arc_cache_mumbojumbo(cpu_id, str, PAGE_SIZE));
-
 	seq_printf(m, arc_extn_mumbojumbo(cpu_id, str, PAGE_SIZE));
 	seq_printf(m, arc_extn_mumbojumbo(cpu_id, str, PAGE_SIZE));
-
-#ifdef CONFIG_SMP
 	seq_printf(m, arc_platform_smp_cpuinfo());
 	seq_printf(m, arc_platform_smp_cpuinfo());
-#endif
 
 
 	free_page((unsigned long)str);
 	free_page((unsigned long)str);
 done:
 done:

+ 1 - 1
arch/arc/kernel/smp.c

@@ -101,7 +101,7 @@ void __weak arc_platform_smp_wait_to_boot(int cpu)
 
 
 const char *arc_platform_smp_cpuinfo(void)
 const char *arc_platform_smp_cpuinfo(void)
 {
 {
-	return plat_smp_ops.info;
+	return plat_smp_ops.info ? : "";
 }
 }
 
 
 /*
 /*

+ 1 - 1
arch/arc/plat-arcfpga/Kconfig

@@ -8,7 +8,7 @@
 
 
 menuconfig ARC_PLAT_FPGA_LEGACY
 menuconfig ARC_PLAT_FPGA_LEGACY
 	bool "\"Legacy\" ARC FPGA dev Boards"
 	bool "\"Legacy\" ARC FPGA dev Boards"
-	select ISS_SMP_EXTN if SMP
+	select ARC_HAS_COH_CACHES if SMP
 	help
 	help
 	  Support for ARC development boards, provided by Synopsys.
 	  Support for ARC development boards, provided by Synopsys.
 	  These are based on FPGA or ISS. e.g.
 	  These are based on FPGA or ISS. e.g.

+ 1 - 1
arch/arc/plat-arcfpga/platform.c

@@ -71,7 +71,7 @@ MACHINE_START(ML509, "ml509")
 	.dt_compat	= ml509_compat,
 	.dt_compat	= ml509_compat,
 	.init_early	= plat_fpga_early_init,
 	.init_early	= plat_fpga_early_init,
 	.init_machine	= plat_fpga_populate_dev,
 	.init_machine	= plat_fpga_populate_dev,
-#ifdef CONFIG_SMP
+#ifdef CONFIG_ISS_SMP_EXTN
 	.init_smp	= iss_model_init_smp,
 	.init_smp	= iss_model_init_smp,
 #endif
 #endif
 MACHINE_END
 MACHINE_END