aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/libata-sff.c
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2010-05-10 15:41:30 -0400
committerJeff Garzik <jgarzik@redhat.com>2010-05-17 22:49:02 -0400
commit3e4ec3443f70fbe144799ccf0b1c3797f78d1715 (patch)
treecfb297e42075baacbbabfb6034e3e7c9a44c73b2 /drivers/ata/libata-sff.c
parentc7a8209f766961eea4cfc6f22d2d6e06ef63546c (diff)
libata: kill ATA_FLAG_DISABLED
ATA_FLAG_DISABLED is only used by drivers which don't use ->error_handler framework and is largely broken. Its only meaningful function is to make irq handlers skip processing if the flag is set, which is largely useless and even harmful as it makes those ports more likely to cause IRQ storms. Kill ATA_FLAG_DISABLED and makes the callers disable attached devices instead. ata_port_probe() and ata_port_disable() which manipulate the flag are also killed. This simplifies condition check in IRQ handlers. While updating IRQ handlers, remove ap NULL check as libata guarantees consecutive port allocation (unoccupied ports are initialized with dummies) and long-obsolete ATA_QCFLAG_ACTIVE check (checked by ata_qc_from_tag()). Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/ata/libata-sff.c')
-rw-r--r--drivers/ata/libata-sff.c10
1 files changed, 2 insertions, 8 deletions
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
index d5dd88d6dea0..0e2c972292cf 100644
--- a/drivers/ata/libata-sff.c
+++ b/drivers/ata/libata-sff.c
@@ -1807,9 +1807,6 @@ retry:
1807 struct ata_port *ap = host->ports[i]; 1807 struct ata_port *ap = host->ports[i];
1808 struct ata_queued_cmd *qc; 1808 struct ata_queued_cmd *qc;
1809 1809
1810 if (unlikely(ap->flags & ATA_FLAG_DISABLED))
1811 continue;
1812
1813 qc = ata_qc_from_tag(ap, ap->link.active_tag); 1810 qc = ata_qc_from_tag(ap, ap->link.active_tag);
1814 if (qc) { 1811 if (qc) {
1815 if (!(qc->tf.flags & ATA_TFLAG_POLLING)) 1812 if (!(qc->tf.flags & ATA_TFLAG_POLLING))
@@ -1884,11 +1881,8 @@ void ata_sff_lost_interrupt(struct ata_port *ap)
1884 1881
1885 /* Only one outstanding command per SFF channel */ 1882 /* Only one outstanding command per SFF channel */
1886 qc = ata_qc_from_tag(ap, ap->link.active_tag); 1883 qc = ata_qc_from_tag(ap, ap->link.active_tag);
1887 /* Check we have a live one.. */ 1884 /* We cannot lose an interrupt on a non-existent or polled command */
1888 if (qc == NULL || !(qc->flags & ATA_QCFLAG_ACTIVE)) 1885 if (!qc || qc->tf.flags & ATA_TFLAG_POLLING)
1889 return;
1890 /* We cannot lose an interrupt on a polled command */
1891 if (qc->tf.flags & ATA_TFLAG_POLLING)
1892 return; 1886 return;
1893 /* See if the controller thinks it is still busy - if so the command 1887 /* See if the controller thinks it is still busy - if so the command
1894 isn't a lost IRQ but is still in progress */ 1888 isn't a lost IRQ but is still in progress */