98a79d6a50
Impact: cleanup Each SMP arch defines these themselves. Move them to a central location. Twists: 1) Some archs (m32, parisc, s390) set possible_map to all 1, so we add a CONFIG_INIT_ALL_POSSIBLE for this rather than break them. 2) mips and sparc32 '#define cpu_possible_map phys_cpu_present_map'. Those archs simply have phys_cpu_present_map replaced everywhere. 3) Alpha defined cpu_possible_map to cpu_present_map; this is tricky so I just manipulate them both in sync. 4) IA64, cris and m32r have gratuitous 'extern cpumask_t cpu_possible_map' declarations. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> Reviewed-by: Grant Grundler <grundler@parisc-linux.org> Tested-by: Tony Luck <tony.luck@intel.com> Acked-by: Ingo Molnar <mingo@elte.hu> Cc: Mike Travis <travis@sgi.com> Cc: ink@jurassic.park.msu.ru Cc: rmk@arm.linux.org.uk Cc: starvik@axis.com Cc: tony.luck@intel.com Cc: takata@linux-m32r.org Cc: ralf@linux-mips.org Cc: grundler@parisc-linux.org Cc: paulus@samba.org Cc: schwidefsky@de.ibm.com Cc: lethal@linux-sh.org Cc: wli@holomorphy.com Cc: davem@davemloft.net Cc: jdike@addtoit.com Cc: mingo@redhat.com
61 lines
1.3 KiB
C
61 lines
1.3 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;
|
|
|
|
extern void arch_send_call_function_single_ipi(int cpu);
|
|
extern void arch_send_call_function_ipi(cpumask_t mask);
|
|
|
|
#else /* CONFIG_SMP */
|
|
|
|
#define hard_smp_processor_id() 0
|
|
#define smp_call_function_on_cpu(func,info,wait,cpu) ({ 0; })
|
|
|
|
#endif /* CONFIG_SMP */
|
|
|
|
#define NO_PROC_ID (-1)
|
|
|
|
#endif
|