|
@@ -1475,7 +1475,7 @@ static struct {
|
|
|
|
|
|
static void __init setup_IO_APIC_irqs(void)
|
|
|
{
|
|
|
- int apic_id = 0, pin, idx, irq;
|
|
|
+ int apic_id, pin, idx, irq;
|
|
|
int notcon = 0;
|
|
|
struct irq_desc *desc;
|
|
|
struct irq_cfg *cfg;
|
|
@@ -1483,14 +1483,7 @@ static void __init setup_IO_APIC_irqs(void)
|
|
|
|
|
|
apic_printk(APIC_VERBOSE, KERN_DEBUG "init IO_APIC IRQs\n");
|
|
|
|
|
|
-#ifdef CONFIG_ACPI
|
|
|
- if (!acpi_disabled && acpi_ioapic) {
|
|
|
- apic_id = mp_find_ioapic(0);
|
|
|
- if (apic_id < 0)
|
|
|
- apic_id = 0;
|
|
|
- }
|
|
|
-#endif
|
|
|
-
|
|
|
+ for (apic_id = 0; apic_id < nr_ioapics; apic_id++)
|
|
|
for (pin = 0; pin < nr_ioapic_registers[apic_id]; pin++) {
|
|
|
idx = find_irq_entry(apic_id, pin, mp_INT);
|
|
|
if (idx == -1) {
|
|
@@ -1512,6 +1505,9 @@ static void __init setup_IO_APIC_irqs(void)
|
|
|
|
|
|
irq = pin_2_irq(idx, apic_id, pin);
|
|
|
|
|
|
+ if ((apic_id > 0) && (irq > 16))
|
|
|
+ continue;
|
|
|
+
|
|
|
/*
|
|
|
* Skip the timer IRQ if there's a quirk handler
|
|
|
* installed and if it returns 1:
|
|
@@ -4105,27 +4101,23 @@ int acpi_get_override_irq(int bus_irq, int *trigger, int *polarity)
|
|
|
#ifdef CONFIG_SMP
|
|
|
void __init setup_ioapic_dest(void)
|
|
|
{
|
|
|
- int pin, ioapic = 0, irq, irq_entry;
|
|
|
+ int pin, ioapic, irq, irq_entry;
|
|
|
struct irq_desc *desc;
|
|
|
const struct cpumask *mask;
|
|
|
|
|
|
if (skip_ioapic_setup == 1)
|
|
|
return;
|
|
|
|
|
|
-#ifdef CONFIG_ACPI
|
|
|
- if (!acpi_disabled && acpi_ioapic) {
|
|
|
- ioapic = mp_find_ioapic(0);
|
|
|
- if (ioapic < 0)
|
|
|
- ioapic = 0;
|
|
|
- }
|
|
|
-#endif
|
|
|
-
|
|
|
+ for (ioapic = 0; ioapic < nr_ioapics; ioapic++)
|
|
|
for (pin = 0; pin < nr_ioapic_registers[ioapic]; pin++) {
|
|
|
irq_entry = find_irq_entry(ioapic, pin, mp_INT);
|
|
|
if (irq_entry == -1)
|
|
|
continue;
|
|
|
irq = pin_2_irq(irq_entry, ioapic, pin);
|
|
|
|
|
|
+ if ((ioapic > 0) && (irq > 16))
|
|
|
+ continue;
|
|
|
+
|
|
|
desc = irq_to_desc(irq);
|
|
|
|
|
|
/*
|