Remove hardcoding of hard_smp_processor_id on UP systems
authorFernando Luis Vazquez Cao <fernando@oss.ntt.co.jp>
Wed, 9 May 2007 09:33:25 +0000 (02:33 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Wed, 9 May 2007 19:30:48 +0000 (12:30 -0700)
With the advent of kdump, the assumption that the boot CPU when booting an UP
kernel is always the CPU with a particular hardware ID (often 0) (usually
referred to as BSP on some architectures) is not valid anymore.  The reason
being that the dump capture kernel boots on the crashed CPU (the CPU that
invoked crash_kexec), which may be or may not be that particular CPU.

Move definition of hard_smp_processor_id for the UP case to
architecture-specific code ("asm/smp.h") where it belongs, so that each
architecture can provide its own implementation.

Signed-off-by: Fernando Luis Vazquez Cao <fernando@oss.ntt.co.jp>
Cc: "Luck, Tony" <tony.luck@intel.com>
Acked-by: Andi Kleen <ak@suse.de>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Vivek Goyal <vgoyal@in.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
12 files changed:
arch/sparc64/kernel/traps.c
include/asm-alpha/smp.h
include/asm-i386/smp.h
include/asm-ia64/smp.h
include/asm-m32r/smp.h
include/asm-powerpc/smp.h
include/asm-s390/smp.h
include/asm-sparc/smp.h
include/asm-sparc64/smp.h
include/asm-um/smp.h
include/asm-x86_64/smp.h
include/linux/smp.h

index dc652f2102906b54192196ee35f100cbc1f80221..d0fde36395b4a07e9dfa7586b8cc90d8a69bb782 100644 (file)
@@ -19,6 +19,7 @@
 #include <linux/init.h>
 #include <linux/kdebug.h>
 
+#include <asm/smp.h>
 #include <asm/delay.h>
 #include <asm/system.h>
 #include <asm/ptrace.h>
index a1a1eca6be45b0e3ebe72d9d236071719ba979d9..286e1d844f635e53c1903ab452ef283be423d75e 100644 (file)
@@ -51,6 +51,7 @@ int smp_call_function_on_cpu(void (*func) (void *info), void *info,int retry, in
 
 #else /* CONFIG_SMP */
 
+#define hard_smp_processor_id()                0
 #define smp_call_function_on_cpu(func,info,retry,wait,cpu)    ({ 0; })
 
 #endif /* CONFIG_SMP */
index 090abc1da32a158b786be16dd7a610cf507d3380..3243fa6f455f18fdbd6d9de34ab9eea34d321a15 100644 (file)
@@ -147,12 +147,13 @@ extern unsigned int num_processors;
 
 #else /* CONFIG_SMP */
 
+#define hard_smp_processor_id()                0
 #define safe_smp_processor_id()                0
 #define cpu_physical_id(cpu)           boot_cpu_physical_apicid
 
 #define NO_PROC_ID             0xFF            /* No processor magic marker */
 
-#endif
+#endif /* CONFIG_SMP */
 
 #ifndef __ASSEMBLY__
 
index 60fd4ae014f6fbe8a3fe19b8e9171a7e277f609e..62014b643ecd2df5164e8617cadf25f606db821f 100644 (file)
@@ -128,8 +128,9 @@ extern void unlock_ipi_calllock(void);
 extern void identify_siblings (struct cpuinfo_ia64 *);
 extern int is_multithreading_enabled(void);
 
-#else
+#else /* CONFIG_SMP */
 
+#define hard_smp_processor_id()                0
 #define cpu_logical_id(i)              0
 #define cpu_physical_id(i)             ia64_get_lid()
 
index abd937ac5239ae91503275cea548652bf020db23..078e1a51a042a74a6eeda6c48d3f8882a466f2fc 100644 (file)
@@ -108,6 +108,10 @@ extern unsigned long send_IPI_mask_phys(cpumask_t, int, int);
 #define IPI_SHIFT      (0)
 #define NR_IPIS                (8)
 
-#endif /* CONFIG_SMP */
+#else  /* CONFIG_SMP */
+
+#define hard_smp_processor_id()                0
+
+#endif /* CONFIG_SMP */
 
 #endif /* _ASM_M32R_SMP_H */
index 01717f266dc9f1ba07b6cf6723eedfcf17830229..d037f50580e23fbf7c6482903e3ddf4ffc68be17 100644 (file)
@@ -83,6 +83,7 @@ extern void __cpu_die(unsigned int cpu);
 
 #else
 /* for UP */
+#define hard_smp_processor_id()                0
 #define smp_setup_cpu_maps()
 
 #endif /* CONFIG_SMP */
index 0a28e6d6ef405f576a63e5012e6bc683ddc2a975..76e424f718c63bb98ca8225b50e02bde5a873353 100644 (file)
@@ -110,6 +110,7 @@ static inline void smp_send_stop(void)
        __load_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK);
 }
 
+#define hard_smp_processor_id()                0
 #define smp_cpu_not_running(cpu)       1
 #define smp_setup_cpu_possible_map()   do { } while (0)
 #endif
index b9da9a600e356339dd146fff14bf54d96e7df3ff..b3f492208fd20168d2615a6bf51ae8a9101f63b3 100644 (file)
@@ -165,6 +165,7 @@ void smp_setup_cpu_possible_map(void);
 
 #else /* SMP */
 
+#define hard_smp_processor_id()                0
 #define smp_setup_cpu_possible_map() do { } while (0)
 
 #endif /* !(SMP) */
index cca54804b72243e216ec4fd051175ec8c8fe735e..869d16fb907bb134dd040dcef05f91806c6b5ff4 100644 (file)
@@ -48,6 +48,7 @@ extern unsigned char boot_cpu_id;
 
 #else
 
+#define hard_smp_processor_id()                0
 #define smp_setup_cpu_possible_map() do { } while (0)
 #define boot_cpu_id    (0)
 
index ca552261ed1fcee5c3493830d2903e9754bcc3a3..84f8cf29324e8950fd941b38a98fe76eea3a463f 100644 (file)
@@ -24,6 +24,10 @@ extern inline void smp_cpus_done(unsigned int maxcpus)
 
 extern struct task_struct *idle_threads[NR_CPUS];
 
+#else
+
+#define hard_smp_processor_id()                0
+
 #endif
 
 #endif
index d5704421456b5016dd6b23e2aef538fffb209b45..f62fda527439744e1f9b991341fe5a80a7bf1ea3 100644 (file)
@@ -71,7 +71,9 @@ extern unsigned __cpuinitdata disabled_cpus;
 
 #define NO_PROC_ID             0xFF            /* No processor magic marker */
 
-#endif
+#else /* CONFIG_SMP */
+#define hard_smp_processor_id() 0
+#endif /* CONFIG_SMP */
 
 /*
  * Some lowlevel functions might want to know about
index 7ba23ec8211b11f22edd21369f824d81b5a2ee52..3f70149eabbb2e7d40c91ce069cce466c3162615 100644 (file)
@@ -83,7 +83,6 @@ void smp_prepare_boot_cpu(void);
  *     These macros fold the SMP functionality into a single CPU system
  */
 #define raw_smp_processor_id()                 0
-#define hard_smp_processor_id()                        0
 static inline int up_smp_call_function(void)
 {
        return 0;