2004-10-10 15:27:18

by Oleg Nesterov

[permalink] [raw]
Subject: BUG? nosmp and pcibios_fixup_irqs()

Hello.

void smp_boot_cpus(unsigned int max_cpus)
{
if (!max_cpus) {
smpboot_clear_io_apic_irqs();
// sets io_apic_irqs = 0;
return;
}

setup_IO_APIC();
}

void pcibios_fixup_irqs(void)
{
while (dev = pci_find_device())
if (io_apic_assign_pci_irqs)
dev->irq = IO_APIC_get_PCI_irq_vector();
}

It seems to me that this dev->irq assignment is wrong in case
when setup_IO_APIC() was not called, and this is the case for
'nosmp' parameter.

With this change:
- if (io_apic_assign_pci_irqs)
+ if (io_apic_assign_pci_irqs && io_apic_irqs)

my netwok card works with nosmp, but i never looked in
arch/i386/pci/ before, so i am probably wrong.

Or nosmp does not make sense without noapic?

Oleg.