summaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/apic/apic_noop.c
diff options
context:
space:
mode:
authorCyrill Gorcunov <gorcunov@gmail.com>2009-11-10 01:06:59 +0300
committerIngo Molnar <mingo@elte.hu>2009-11-10 05:52:07 +0100
commit7abc07531383ac7f727cc9d44e1360a829f2082e (patch)
treef93b92f86c527cf5d0e12a3b64a7dbcd368fbd95 /arch/x86/kernel/apic/apic_noop.c
parentf4a70c55376683213229af7266dc57ad81aee354 (diff)
downloadblackbird-op-linux-7abc07531383ac7f727cc9d44e1360a829f2082e.tar.gz
blackbird-op-linux-7abc07531383ac7f727cc9d44e1360a829f2082e.zip
x86: apic: Do not use stacked physid_mask_t
We should not use physid_mask_t as a stack based variable in apic code. This type depends on MAX_APICS parameter which may be huge enough. Especially it became a problem with apic NOOP driver which is portable between 32 bit and 64 bit environment (where we have really huge MAX_APICS). So apic driver should operate with pointers and a caller in turn should aware of allocation physid_mask_t variable. As a side (but positive) effect -- we may use already implemented physid_set_mask_of_physid function eliminating default_apicid_to_cpu_present completely. Note that physids_coerce and physids_promote turned into static inline from macro (since macro hides the fact that parameter is being interpreted as unsigned long, make it explicit). Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> Cc: Yinghai Lu <yinghai@kernel.org> Cc: Maciej W. Rozycki <macro@linux-mips.org> Cc: Stephen Rothwell <sfr@canb.auug.org.au> LKML-Reference: <20091109220659.GA5568@lenovo> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/apic/apic_noop.c')
-rw-r--r--arch/x86/kernel/apic/apic_noop.c18
1 files changed, 4 insertions, 14 deletions
diff --git a/arch/x86/kernel/apic/apic_noop.c b/arch/x86/kernel/apic/apic_noop.c
index 89629f622b60..d9acc3bee0f4 100644
--- a/arch/x86/kernel/apic/apic_noop.c
+++ b/arch/x86/kernel/apic/apic_noop.c
@@ -54,11 +54,6 @@ static u64 noop_apic_icr_read(void)
return 0;
}
-static physid_mask_t noop_ioapic_phys_id_map(physid_mask_t phys_map)
-{
- return phys_map;
-}
-
static int noop_cpu_to_logical_apicid(int cpu)
{
return 0;
@@ -100,9 +95,9 @@ static const struct cpumask *noop_target_cpus(void)
return cpumask_of(0);
}
-static unsigned long noop_check_apicid_used(physid_mask_t bitmap, int apicid)
+static unsigned long noop_check_apicid_used(physid_mask_t *map, int apicid)
{
- return physid_isset(apicid, bitmap);
+ return physid_isset(apicid, *map);
}
static unsigned long noop_check_apicid_present(int bit)
@@ -155,19 +150,14 @@ struct apic apic_noop = {
.vector_allocation_domain = noop_vector_allocation_domain,
.init_apic_ldr = noop_init_apic_ldr,
- .ioapic_phys_id_map = noop_ioapic_phys_id_map,
+ .ioapic_phys_id_map = default_ioapic_phys_id_map,
.setup_apic_routing = NULL,
.multi_timer_check = NULL,
.apicid_to_node = noop_apicid_to_node,
.cpu_to_logical_apicid = noop_cpu_to_logical_apicid,
.cpu_present_to_apicid = default_cpu_present_to_apicid,
-
-#ifdef CONFIG_X86_32
- .apicid_to_cpu_present = default_apicid_to_cpu_present,
-#else
- .apicid_to_cpu_present = NULL,
-#endif
+ .apicid_to_cpu_present = physid_set_mask_of_physid,
.setup_portio_remap = NULL,
.check_phys_apicid_present = default_check_phys_apicid_present,
OpenPOWER on IntegriCloud