x64, x2apic/intr-remap: introduce read_apic_id() to genapic routines
Move the read_apic_id() to genapic routines. Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Cc: akpm@linux-foundation.org Cc: arjan@linux.intel.com Cc: andi@firstfloor.org Cc: ebiederm@xmission.com Cc: jbarnes@virtuousgeek.org Cc: steiner@sgi.com Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
4dc2f96cac
commit
0c81c746f9
@ -1096,6 +1096,11 @@ void __cpuinit generic_processor_info(int apicid, int version)
|
||||
cpu_set(cpu, cpu_present_map);
|
||||
}
|
||||
|
||||
int hard_smp_processor_id(void)
|
||||
{
|
||||
return read_apic_id();
|
||||
}
|
||||
|
||||
/*
|
||||
* Power management
|
||||
*/
|
||||
|
@ -79,17 +79,6 @@ int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id)
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned int read_apic_id(void)
|
||||
{
|
||||
unsigned int id;
|
||||
|
||||
WARN_ON(preemptible() && num_online_cpus() > 1);
|
||||
id = apic_read(APIC_ID);
|
||||
if (uv_system_type >= UV_X2APIC)
|
||||
id |= __get_cpu_var(x2apic_extra_bits);
|
||||
return id;
|
||||
}
|
||||
|
||||
enum uv_system_type get_uv_system_type(void)
|
||||
{
|
||||
return uv_system_type;
|
||||
|
@ -15,9 +15,11 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/hardirq.h>
|
||||
#include <asm/smp.h>
|
||||
#include <asm/ipi.h>
|
||||
#include <asm/genapic.h>
|
||||
#include <mach_apicdef.h>
|
||||
|
||||
static cpumask_t flat_target_cpus(void)
|
||||
{
|
||||
@ -95,9 +97,17 @@ static void flat_send_IPI_all(int vector)
|
||||
__send_IPI_shortcut(APIC_DEST_ALLINC, vector, APIC_DEST_LOGICAL);
|
||||
}
|
||||
|
||||
static unsigned int read_xapic_id(void)
|
||||
{
|
||||
unsigned int id;
|
||||
|
||||
id = GET_XAPIC_ID(apic_read(APIC_ID));
|
||||
return id;
|
||||
}
|
||||
|
||||
static int flat_apic_id_registered(void)
|
||||
{
|
||||
return physid_isset(GET_APIC_ID(read_apic_id()), phys_cpu_present_map);
|
||||
return physid_isset(read_xapic_id(), phys_cpu_present_map);
|
||||
}
|
||||
|
||||
static unsigned int flat_cpu_mask_to_apicid(cpumask_t cpumask)
|
||||
@ -123,6 +133,7 @@ struct genapic apic_flat = {
|
||||
.send_IPI_mask = flat_send_IPI_mask,
|
||||
.cpu_mask_to_apicid = flat_cpu_mask_to_apicid,
|
||||
.phys_pkg_id = phys_pkg_id,
|
||||
.read_apic_id = read_xapic_id,
|
||||
};
|
||||
|
||||
/*
|
||||
@ -187,4 +198,5 @@ struct genapic apic_physflat = {
|
||||
.send_IPI_mask = physflat_send_IPI_mask,
|
||||
.cpu_mask_to_apicid = physflat_cpu_mask_to_apicid,
|
||||
.phys_pkg_id = phys_pkg_id,
|
||||
.read_apic_id = read_xapic_id,
|
||||
};
|
||||
|
@ -18,6 +18,7 @@
|
||||
#include <linux/sched.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/hardirq.h>
|
||||
#include <asm/smp.h>
|
||||
#include <asm/ipi.h>
|
||||
#include <asm/genapic.h>
|
||||
@ -134,9 +135,19 @@ static unsigned int uv_cpu_mask_to_apicid(cpumask_t cpumask)
|
||||
return BAD_APICID;
|
||||
}
|
||||
|
||||
static unsigned int uv_read_apic_id(void)
|
||||
{
|
||||
unsigned int id;
|
||||
|
||||
WARN_ON(preemptible() && num_online_cpus() > 1);
|
||||
id = apic_read(APIC_ID) | __get_cpu_var(x2apic_extra_bits);
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
static unsigned int phys_pkg_id(int index_msb)
|
||||
{
|
||||
return GET_APIC_ID(read_apic_id()) >> index_msb;
|
||||
return uv_read_apic_id() >> index_msb;
|
||||
}
|
||||
|
||||
#ifdef ZZZ /* Needs x2apic patch */
|
||||
@ -159,6 +170,7 @@ struct genapic apic_x2apic_uv_x = {
|
||||
/* ZZZ.send_IPI_self = uv_send_IPI_self, */
|
||||
.cpu_mask_to_apicid = uv_cpu_mask_to_apicid,
|
||||
.phys_pkg_id = phys_pkg_id, /* Fixme ZZZ */
|
||||
.read_apic_id = uv_read_apic_id,
|
||||
};
|
||||
|
||||
static __cpuinit void set_x2apic_extra_bits(int pnode)
|
||||
|
@ -27,6 +27,7 @@ struct genapic {
|
||||
/* */
|
||||
unsigned int (*cpu_mask_to_apicid)(cpumask_t cpumask);
|
||||
unsigned int (*phys_pkg_id)(int index_msb);
|
||||
unsigned int (*read_apic_id)(void);
|
||||
};
|
||||
|
||||
extern struct genapic *genapic;
|
||||
|
@ -30,6 +30,7 @@ static inline cpumask_t target_cpus(void)
|
||||
#define cpu_mask_to_apicid (genapic->cpu_mask_to_apicid)
|
||||
#define phys_pkg_id (genapic->phys_pkg_id)
|
||||
#define vector_allocation_domain (genapic->vector_allocation_domain)
|
||||
#define read_apic_id (genapic->read_apic_id)
|
||||
extern void setup_apic_routing(void);
|
||||
#else
|
||||
#define INT_DELIVERY_MODE dest_LowestPrio
|
||||
|
@ -5,8 +5,9 @@
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
#define APIC_ID_MASK (0xFFu<<24)
|
||||
#define GET_APIC_ID(x) (((x)>>24)&0xFFu)
|
||||
#define GET_APIC_ID(x) (x)
|
||||
#define SET_APIC_ID(x) (((x)<<24))
|
||||
#define GET_XAPIC_ID(x) (((x) >> 24) & 0xFFu)
|
||||
#else
|
||||
#define APIC_ID_MASK (0xF<<24)
|
||||
static inline unsigned get_apic_id(unsigned long x)
|
||||
|
@ -169,12 +169,10 @@ static inline unsigned int read_apic_id(void)
|
||||
{
|
||||
return *(u32 *)(APIC_BASE + APIC_ID);
|
||||
}
|
||||
#else
|
||||
extern unsigned int read_apic_id(void);
|
||||
#endif
|
||||
|
||||
|
||||
# ifdef APIC_DEFINITION
|
||||
# if defined(APIC_DEFINITION) || defined(CONFIG_X86_64)
|
||||
extern int hard_smp_processor_id(void);
|
||||
# else
|
||||
# include <mach_apicdef.h>
|
||||
|
Loading…
Reference in New Issue
Block a user