Index: 2006-01-05/drivers/xen/core/smpboot.c =================================================================== --- 2006-01-05.orig/drivers/xen/core/smpboot.c 2006-01-09 16:17:26.783490200 +0100 +++ 2006-01-05/drivers/xen/core/smpboot.c 2006-01-09 12:38:01.000000000 +0100 @@ -44,9 +44,9 @@ extern cpumask_t cpu_initialized; /* Number of siblings per CPU package */ int smp_num_siblings = 1; -int phys_proc_id[NR_CPUS]; /* Package ID of each logical CPU */ +__typeof__(phys_proc_id) phys_proc_id; /* Package ID of each logical CPU */ EXPORT_SYMBOL(phys_proc_id); -int cpu_core_id[NR_CPUS]; /* Core ID of each logical CPU */ +__typeof__(cpu_core_id) cpu_core_id; /* Core ID of each logical CPU */ EXPORT_SYMBOL(cpu_core_id); cpumask_t cpu_online_map; Index: 2006-01-05/include/asm-x86_64/smp.h =================================================================== --- 2006-01-05.orig/include/asm-x86_64/smp.h 2006-01-09 16:17:26.785489896 +0100 +++ 2006-01-05/include/asm-x86_64/smp.h 2006-01-09 12:30:02.000000000 +0100 @@ -34,7 +34,11 @@ struct pt_regs; extern cpumask_t cpu_present_mask; extern cpumask_t cpu_possible_map; extern cpumask_t cpu_online_map; +#ifndef CONFIG_XEN extern cpumask_t cpu_callout_map; +#else +#define cpu_callout_map cpu_possible_map +#endif /* * Private routines/data @@ -71,11 +75,13 @@ static inline int num_booting_cpus(void) #define raw_smp_processor_id() read_pda(cpunumber) +#ifdef CONFIG_X86_LOCAL_APIC static inline int hard_smp_processor_id(void) { /* we don't want to mark this access volatile - bad code generation */ return GET_APIC_ID(*(unsigned int *)(APIC_BASE+APIC_ID)); } +#endif extern int safe_smp_processor_id(void); extern int __cpu_disable(void); @@ -99,6 +105,7 @@ extern u8 x86_cpu_to_apicid[NR_CPUS]; /* extern u8 x86_cpu_to_log_apicid[NR_CPUS]; extern u8 bios_cpu_apicid[]; +#ifdef CONFIG_X86_LOCAL_APIC static inline unsigned int cpu_mask_to_apicid(cpumask_t cpumask) { return cpus_addr(cpumask)[0]; @@ -111,6 +118,7 @@ static inline int cpu_present_to_apicid( else return BAD_APICID; } +#endif #endif /* !ASSEMBLY */ @@ -128,7 +136,7 @@ static inline int cpu_present_to_apicid( }) #endif -#ifndef __ASSEMBLY__ +#if defined(CONFIG_X86_LOCAL_APIC) && !defined(__ASSEMBLY__) static __inline int logical_smp_processor_id(void) { /* we don't want to mark this access volatile - bad code generation */ Index: 2006-01-05/include/asm-x86_64/mach-xen/asm/smp.h =================================================================== --- 2006-01-05.orig/include/asm-x86_64/mach-xen/asm/smp.h 2006-01-09 16:17:26.785489896 +0100 +++ /dev/null 1970-01-01 00:00:00.000000000 +0000 @@ -1,150 +0,0 @@ -#ifndef __ASM_SMP_H -#define __ASM_SMP_H - -/* - * We need the APIC definitions automatically as part of 'smp.h' - */ -#ifndef __ASSEMBLY__ -#include -#include -#include -#include -extern int disable_apic; -#endif - -#ifdef CONFIG_X86_LOCAL_APIC -#ifndef __ASSEMBLY__ -#include -#include -#ifdef CONFIG_X86_IO_APIC -#include -#endif -#include -#include -#endif -#endif - -#ifdef CONFIG_SMP -#ifndef ASSEMBLY - -#include - -struct pt_regs; - -extern cpumask_t cpu_present_mask; -extern cpumask_t cpu_possible_map; -extern cpumask_t cpu_online_map; - -/* - * Private routines/data - */ - -extern void smp_alloc_memory(void); -extern volatile unsigned long smp_invalidate_needed; -extern int pic_mode; -extern void lock_ipi_call_lock(void); -extern void unlock_ipi_call_lock(void); -extern int smp_num_siblings; -extern void smp_send_reschedule(int cpu); -void smp_stop_cpu(void); -extern int smp_call_function_single(int cpuid, void (*func) (void *info), - void *info, int retry, int wait); - -extern cpumask_t cpu_sibling_map[NR_CPUS]; -extern cpumask_t cpu_core_map[NR_CPUS]; -extern int phys_proc_id[NR_CPUS]; -extern int cpu_core_id[NR_CPUS]; - -#define SMP_TRAMPOLINE_BASE 0x6000 - -/* - * On x86 all CPUs are mapped 1:1 to the APIC space. - * This simplifies scheduling and IPI sending and - * compresses data structures. - */ - -static inline int num_booting_cpus(void) -{ - return cpus_weight(cpu_possible_map); -} - -#define raw_smp_processor_id() read_pda(cpunumber) - -#ifdef CONFIG_X86_LOCAL_APIC -static inline int hard_smp_processor_id(void) -{ - /* we don't want to mark this access volatile - bad code generation */ - return GET_APIC_ID(*(unsigned int *)(APIC_BASE+APIC_ID)); -} -#endif - -extern int safe_smp_processor_id(void); -extern int __cpu_disable(void); -extern void __cpu_die(unsigned int cpu); -extern void prefill_possible_map(void); -extern unsigned num_processors; -extern unsigned disabled_cpus; - -#endif /* !ASSEMBLY */ - -#define NO_PROC_ID 0xFF /* No processor magic marker */ - -#endif - -#ifndef ASSEMBLY -/* - * Some lowlevel functions might want to know about - * the real APIC ID <-> CPU # mapping. - */ -extern u8 x86_cpu_to_apicid[NR_CPUS]; /* physical ID */ -extern u8 x86_cpu_to_log_apicid[NR_CPUS]; -extern u8 bios_cpu_apicid[]; -#ifdef CONFIG_X86_LOCAL_APIC -static inline unsigned int cpu_mask_to_apicid(cpumask_t cpumask) -{ - return cpus_addr(cpumask)[0]; -} - -static inline int cpu_present_to_apicid(int mps_cpu) -{ - if (mps_cpu < NR_CPUS) - return (int)bios_cpu_apicid[mps_cpu]; - else - return BAD_APICID; -} -#endif - -#endif /* !ASSEMBLY */ - -#ifndef CONFIG_SMP -#define stack_smp_processor_id() 0 -#define safe_smp_processor_id() 0 -#define cpu_logical_map(x) (x) -#else -#include -#define stack_smp_processor_id() \ -({ \ - struct thread_info *ti; \ - __asm__("andq %%rsp,%0; ":"=r" (ti) : "0" (CURRENT_MASK)); \ - ti->cpu; \ -}) -#endif - -#ifndef __ASSEMBLY__ -#ifdef CONFIG_X86_LOCAL_APIC -static __inline int logical_smp_processor_id(void) -{ - /* we don't want to mark this access volatile - bad code generation */ - return GET_APIC_LOGICAL_ID(*(unsigned long *)(APIC_BASE+APIC_LDR)); -} -#endif -#endif - -#ifdef CONFIG_SMP -#define cpu_physical_id(cpu) x86_cpu_to_apicid[cpu] -#else -#define cpu_physical_id(cpu) boot_cpu_id -#endif - -#endif -