diff options
Diffstat (limited to 'arch/i386/kernel/mpparse.c')
| -rw-r--r-- | arch/i386/kernel/mpparse.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/i386/kernel/mpparse.c b/arch/i386/kernel/mpparse.c index e7609abf3796..e6e2f43db85e 100644 --- a/arch/i386/kernel/mpparse.c +++ b/arch/i386/kernel/mpparse.c | |||
| @@ -915,6 +915,7 @@ void __init mp_register_ioapic ( | |||
| 915 | u32 gsi_base) | 915 | u32 gsi_base) |
| 916 | { | 916 | { |
| 917 | int idx = 0; | 917 | int idx = 0; |
| 918 | int tmpid; | ||
| 918 | 919 | ||
| 919 | if (nr_ioapics >= MAX_IO_APICS) { | 920 | if (nr_ioapics >= MAX_IO_APICS) { |
| 920 | printk(KERN_ERR "ERROR: Max # of I/O APICs (%d) exceeded " | 921 | printk(KERN_ERR "ERROR: Max # of I/O APICs (%d) exceeded " |
| @@ -935,9 +936,14 @@ void __init mp_register_ioapic ( | |||
| 935 | 936 | ||
| 936 | set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address); | 937 | set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address); |
| 937 | if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && (boot_cpu_data.x86 < 15)) | 938 | if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && (boot_cpu_data.x86 < 15)) |
| 938 | mp_ioapics[idx].mpc_apicid = io_apic_get_unique_id(idx, id); | 939 | tmpid = io_apic_get_unique_id(idx, id); |
| 939 | else | 940 | else |
| 940 | mp_ioapics[idx].mpc_apicid = id; | 941 | tmpid = id; |
| 942 | if (tmpid == -1) { | ||
| 943 | nr_ioapics--; | ||
| 944 | return; | ||
| 945 | } | ||
| 946 | mp_ioapics[idx].mpc_apicid = tmpid; | ||
| 941 | mp_ioapics[idx].mpc_apicver = io_apic_get_version(idx); | 947 | mp_ioapics[idx].mpc_apicver = io_apic_get_version(idx); |
| 942 | 948 | ||
| 943 | /* | 949 | /* |
