Messages in this thread Patch in this message | | | Date | Mon, 06 Nov 2006 09:51:56 -0500 | From | Mark Lord <> | Subject | Re: qstor driver -> irq 193: nobody cared |
| |
Alberto Alonso wrote: > I have patched the system. I'll let you know if I get the > same problem. Since I can't reproduce it on demand I may not see > the problem for months. I don't know what happened the other day > when it just started to happen repeatedly, I haven't had the issue > since.
Ahh. Well, in that case please add a printk() line so that we'll know if it *ever* does anything! Updated patch attached.
Cheers
--- old/drivers/scsi/sata_qstor.c 2006-09-19 23:42:06.000000000 -0400 +++ linux/drivers/scsi/sata_qstor.c 2006-11-06 09:50:02.000000000 -0500 @@ -459,6 +459,7 @@ { struct ata_host_set *host_set = dev_instance; unsigned int handled = 0; + static int spurious = 0; VPRINTK("ENTER\n"); @@ -466,6 +467,20 @@ handled = qs_intr_pkt(host_set) | qs_intr_mmio(host_set); spin_unlock(&host_set->lock); + /* There are reports of at least one system with glitchy interrupts, + * and if we return !handled here for those then the kernel may totally + * disable our own IRQ line (duh!). + * So, try and be tolerant, but not *too* tolerant. + */ + if (!handled) { + if (spurious < 10) { + printk("sata_qstor: spurious=%d\n", spurious); + ++spurious; + handled = 1; + } + } else if (spurious) + --spurious; + VPRINTK("EXIT\n"); return IRQ_RETVAL(handled); | |