Thanks Petr, very good spotting! I'll pass it along with the unexpected
intr removal, that it seems Linus lost (it was sent). Ed, could you see
if this solves your problem as well?
--- /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];
-- Jens Axboe- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/