Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 53726
b: refs/heads/master
c: f18d397
h: refs/heads/master
v: v3
  • Loading branch information
Ingo Molnar authored and Andi Kleen committed May 2, 2007
1 parent 4d71b8f commit 1b38442
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 25 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a86f34b49f32b238d16b2e3bf6c9a5391a3f683f
refs/heads/master: f18d397e6aa5cde638d164b1d519c3ee903f4867
39 changes: 15 additions & 24 deletions trunk/arch/x86_64/kernel/genapic.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,21 +32,20 @@ extern struct genapic apic_cluster;
extern struct genapic apic_flat;
extern struct genapic apic_physflat;

struct genapic *genapic = &apic_flat;

struct genapic __read_mostly *genapic = &apic_flat;

/*
* Check the APIC IDs in bios_cpu_apicid and choose the APIC mode.
*/
void __init clustered_apic_check(void)
{
long i;
int i;
u8 clusters, max_cluster;
u8 id;
u8 cluster_cnt[NUM_APIC_CLUSTERS];
int max_apic = 0;

#if defined(CONFIG_ACPI)
#ifdef CONFIG_ACPI
/*
* Some x86_64 machines use physical APIC mode regardless of how many
* procs/clusters are present (x86_64 ES7000 is an example).
Expand All @@ -68,20 +67,17 @@ void __init clustered_apic_check(void)
cluster_cnt[APIC_CLUSTERID(id)]++;
}

/* Don't use clustered mode on AMD platforms. */
/*
* Don't use clustered mode on AMD platforms, default
* to flat logical mode.
*/
if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) {
genapic = &apic_physflat;
#ifndef CONFIG_HOTPLUG_CPU
/* In the CPU hotplug case we cannot use broadcast mode
because that opens a race when a CPU is removed.
Stay at physflat mode in this case.
It is bad to do this unconditionally though. Once
we have ACPI platform support for CPU hotplug
we should detect hotplug capablity from ACPI tables and
only do this when really needed. -AK */
if (max_apic <= 8)
genapic = &apic_flat;
#endif
/*
* Switch to physical flat mode if more than 8 APICs
* (In the case of 8 CPUs APIC ID goes from 0 to 7):
*/
if (max_apic >= 8)
genapic = &apic_physflat;
goto print;
}

Expand All @@ -103,14 +99,9 @@ void __init clustered_apic_check(void)
* (We don't use lowest priority delivery + HW APIC IRQ steering, so
* can ignore the clustered logical case and go straight to physical.)
*/
if (clusters <= 1 && max_cluster <= 8 && cluster_cnt[0] == max_cluster) {
#ifdef CONFIG_HOTPLUG_CPU
/* Don't use APIC shortcuts in CPU hotplug to avoid races */
genapic = &apic_physflat;
#else
if (clusters <= 1 && max_cluster <= 8 && cluster_cnt[0] == max_cluster)
genapic = &apic_flat;
#endif
} else
else
genapic = &apic_cluster;

print:
Expand Down

0 comments on commit 1b38442

Please sign in to comment.