diff options
author | Tejun Heo <htejun@gmail.com> | 2005-08-17 00:08:47 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-08-17 00:51:50 -0400 |
commit | 3cc4571c4106735665e048850ff6656de9558d60 (patch) | |
tree | ce7dc0f5d02af9b247a0a2867010e555dc26834c | |
parent | 1483467faa0170cf401955b3d8d3486ea0fe802d (diff) |
[PATCH] sil24: remove irq disable code on spurious interrupt
02_sil24_remove-irq-disable-on-spurious-intr.patch
If interrupt occurs on a disabled port, the driver used to
mask the port's interrupt, but we don't know if such action is
necessary yet and that's not what other drives do. So, just
do nothing and tell IRQ subsystem that it's not our interrupt.
Signed-off-by: Tejun Heo <htejun@gmail.com>
sata_sil24.c | 15 +++++----------
1 files changed, 5 insertions(+), 10 deletions(-)
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
-rw-r--r-- | drivers/scsi/sata_sil24.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/drivers/scsi/sata_sil24.c b/drivers/scsi/sata_sil24.c index 4868ad79b92e..0f810cdd3cc2 100644 --- a/drivers/scsi/sata_sil24.c +++ b/drivers/scsi/sata_sil24.c | |||
@@ -535,17 +535,12 @@ static irqreturn_t sil24_interrupt(int irq, void *dev_instance, struct pt_regs * | |||
535 | for (i = 0; i < host_set->n_ports; i++) | 535 | for (i = 0; i < host_set->n_ports; i++) |
536 | if (status & (1 << i)) { | 536 | if (status & (1 << i)) { |
537 | struct ata_port *ap = host_set->ports[i]; | 537 | struct ata_port *ap = host_set->ports[i]; |
538 | if (ap && !(ap->flags & ATA_FLAG_PORT_DISABLED)) | 538 | if (ap && !(ap->flags & ATA_FLAG_PORT_DISABLED)) { |
539 | sil24_host_intr(host_set->ports[i]); | 539 | sil24_host_intr(host_set->ports[i]); |
540 | else { | 540 | handled++; |
541 | u32 tmp; | 541 | } else |
542 | printk(KERN_WARNING DRV_NAME | 542 | printk(KERN_ERR DRV_NAME |
543 | ": spurious interrupt from port %d\n", i); | 543 | ": interrupt from disabled port %d\n", i); |
544 | tmp = readl(hpriv->host_base + HOST_CTRL); | ||
545 | tmp &= ~(1 << i); | ||
546 | writel(tmp, hpriv->host_base + HOST_CTRL); | ||
547 | } | ||
548 | handled++; | ||
549 | } | 544 | } |
550 | 545 | ||
551 | spin_unlock(&host_set->lock); | 546 | spin_unlock(&host_set->lock); |