2f4dfe206a
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>
61 lines
1.4 KiB
C
61 lines
1.4 KiB
C
#ifndef __ASM_SMP_H
|
|
#define __ASM_SMP_H
|
|
|
|
#include <linux/threads.h>
|
|
#include <linux/cpumask.h>
|
|
#include <linux/bitops.h>
|
|
#include <asm/pal.h>
|
|
|
|
/* HACK: Cabrio WHAMI return value is bogus if more than 8 bits used.. :-( */
|
|
|
|
static __inline__ unsigned char
|
|
__hard_smp_processor_id(void)
|
|
{
|
|
register unsigned char __r0 __asm__("$0");
|
|
__asm__ __volatile__(
|
|
"call_pal %1 #whami"
|
|
: "=r"(__r0)
|
|
:"i" (PAL_whami)
|
|
: "$1", "$22", "$23", "$24", "$25");
|
|
return __r0;
|
|
}
|
|
|
|
#ifdef CONFIG_SMP
|
|
|
|
#include <asm/irq.h>
|
|
|
|
struct cpuinfo_alpha {
|
|
unsigned long loops_per_jiffy;
|
|
unsigned long last_asn;
|
|
int need_new_asn;
|
|
int asn_lock;
|
|
unsigned long ipi_count;
|
|
unsigned long prof_multiplier;
|
|
unsigned long prof_counter;
|
|
unsigned char mcheck_expected;
|
|
unsigned char mcheck_taken;
|
|
unsigned char mcheck_extra;
|
|
} __attribute__((aligned(64)));
|
|
|
|
extern struct cpuinfo_alpha cpu_data[NR_CPUS];
|
|
|
|
#define PROC_CHANGE_PENALTY 20
|
|
|
|
#define hard_smp_processor_id() __hard_smp_processor_id()
|
|
#define raw_smp_processor_id() (current_thread_info()->cpu)
|
|
|
|
extern int smp_num_cpus;
|
|
#define cpu_possible_map cpu_present_map
|
|
|
|
int smp_call_function_on_cpu(void (*func) (void *info), void *info,int retry, int wait, cpumask_t cpu);
|
|
|
|
#else /* CONFIG_SMP */
|
|
|
|
#define hard_smp_processor_id() 0
|
|
#define smp_call_function_on_cpu(func,info,retry,wait,cpu) ({ 0; })
|
|
|
|
#endif /* CONFIG_SMP */
|
|
|
|
#define NO_PROC_ID (-1)
|
|
|
|
#endif
|