lkml.org 
[lkml]   [2003]   [Nov]   [23]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
DateSun, 23 Nov 2003 08:40:56 -0800 (PST)
FromLinus Torvalds <>
SubjectRe: irq 15: nobody cared! with KT600 chipset and 2.6.0-test9
On Sun, 23 Nov 2003, Marco d'Itri wrote:
> 
> ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
> hdc: IRQ probe failed (0x3cfa: 0). Guessing at 15
> hdc: CD-ROM 50X, ATAPI CD/DVD-ROM drive
> hdd: 32X10, ATAPI CD/DVD-ROM drive
> Badness in request_irq at arch/i386/kernel/irq.c:572
> Call Trace:
>  [<c021a770>] ide_intr+0x0/0x130

There was nothing before this?

The probe failed _before_ the first warning?

If so, that means that the probing didn't try IRQ 15 for some other reason 
than it already being requested for a device. That other reason is most 
likely that IRQ 15 was "screaming" when the IRQ probe already started, 
which would have made the irq probing turn it off.

So something in the ACPI code made IRQ15 active, or caused there to be a 
pending interrupt. I'd guess that ACPI incorrectly turns the legacy IDE 
interrupts to be PCI interrupts (level-triggered, active low) instead of 
legacy interrupts (edge-triggered, active high).

But I also have to admit that the IDE irq probing code looks a bit 
fragile. We could be more careful about making sure that the IDE 
controller has its interrupt turned off before we start probing. So a 
patch like this might be in order - it should just make autoprobing a bit 
more robust.

Does this one make a difference?

Len - does ACPI ever change the polarity of an interrupt? Just turning the 
irq level-triggered shouldn't matter that much, but if some part of ACPI 
switches polarities around (and gets the wrong one) that would be deadly 
and would cause screaming interrupts when no event is pending.

			Linus

-----
===== drivers/ide/ide-probe.c 1.65 vs edited =====
--- 1.65/drivers/ide/ide-probe.c	Wed Sep  3 09:52:16 2003
+++ edited/drivers/ide/ide-probe.c	Sun Nov 23 08:35:37 2003
@@ -393,13 +393,19 @@
 	 */
 	if (IDE_CONTROL_REG) {
 		u8 ctl = drive->ctl | 2;
+		hwif->OUTB(ctl, IDE_CONTROL_REG);
+
+		/* Clear drive IRQ */
+		(void) hwif->INB(IDE_STATUS_REG);
+		udelay(5);
+
 		if (!hwif->irq) {
 			autoprobe = 1;
 			cookie = probe_irq_on();
 			/* enable device irq */
 			ctl &= ~2;
+			hwif->OUTB(ctl, IDE_CONTROL_REG);
 		}
-		hwif->OUTB(ctl, IDE_CONTROL_REG);
 	}
 
 	retval = actual_try_to_identify(drive, cmd);

-
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/

\
 
 \ /
  Last update: 2005-03-22 13:58    [from the cache]
©2003-2008