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>
This commit is contained in:

committad av
Ingo Molnar

förälder
f4a70c5537
incheckning
7abc075313
@@ -466,11 +466,11 @@ static const struct cpumask *es7000_target_cpus(void)
|
||||
return cpumask_of(smp_processor_id());
|
||||
}
|
||||
|
||||
static unsigned long
|
||||
es7000_check_apicid_used(physid_mask_t bitmap, int apicid)
|
||||
static unsigned long es7000_check_apicid_used(physid_mask_t *map, int apicid)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned long es7000_check_apicid_present(int bit)
|
||||
{
|
||||
return physid_isset(bit, phys_cpu_present_map);
|
||||
@@ -539,14 +539,10 @@ static int es7000_cpu_present_to_apicid(int mps_cpu)
|
||||
|
||||
static int cpu_id;
|
||||
|
||||
static physid_mask_t es7000_apicid_to_cpu_present(int phys_apicid)
|
||||
static void es7000_apicid_to_cpu_present(int phys_apicid, physid_mask_t *retmap)
|
||||
{
|
||||
physid_mask_t mask;
|
||||
|
||||
mask = physid_mask_of_physid(cpu_id);
|
||||
physid_set_mask_of_physid(cpu_id, retmap);
|
||||
++cpu_id;
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
||||
/* Mapping from cpu number to logical apicid */
|
||||
@@ -561,10 +557,10 @@ static int es7000_cpu_to_logical_apicid(int cpu)
|
||||
#endif
|
||||
}
|
||||
|
||||
static physid_mask_t es7000_ioapic_phys_id_map(physid_mask_t phys_map)
|
||||
static void es7000_ioapic_phys_id_map(physid_mask_t *phys_map, physid_mask_t *retmap)
|
||||
{
|
||||
/* For clustered we don't have a good way to do this yet - hack */
|
||||
return physids_promote(0xff);
|
||||
physids_promote(0xFFL, retmap);
|
||||
}
|
||||
|
||||
static int es7000_check_phys_apicid_present(int cpu_physical_apicid)
|
||||
|
Referens i nytt ärende
Block a user