--- /opt/kernel/linux-2.5.35/drivers/ide/ide.c 2002-09-16 04:18:25.000000000 +0200 +++ drivers/ide/ide.c 2002-09-16 08:59:28.000000000 +0200 @@ -1376,7 +1376,6 @@ if ((handler = hwgroup->handler) == NULL || hwgroup->poll_timeout != 0) { - printk("ide_intr: unexpected interrupt!\n"); /* * Not expecting an interrupt from this drive. * That means this could be: --- /opt/kernel/linux-2.5.35/drivers/ide/ide-probe.c 2002-09-16 04:18:30.000000000 +0200 +++ drivers/ide/ide-probe.c 2002-09-16 09:03:27.000000000 +0200 @@ -592,6 +592,7 @@ { unsigned int unit; unsigned long flags; + unsigned int irqd; if (hwif->noprobe) return; @@ -623,7 +624,12 @@ return; } - if (hwif->hw.ack_intr && hwif->irq) + /* + * We must always disable IRQ, as probe_for_drive will assert IRQ, but + * we'll install our IRQ driver much later... + */ + irqd = hwif->irq; + if (irqd) disable_irq(hwif->irq); local_irq_set(flags); @@ -659,8 +665,12 @@ } local_irq_restore(flags); - if (hwif->hw.ack_intr && hwif->irq) - enable_irq(hwif->irq); + /* + * Use cached IRQ number. It might be (and is...) changed by probe + * code above + */ + if (irqd) + enable_irq(irqd); for (unit = 0; unit < MAX_DRIVES; ++unit) { ide_drive_t *drive = &hwif->drives[unit];