From: Tejun Heo Date: Sat, 24 Feb 2007 13:30:36 +0000 (+0900) Subject: sata_sil: ignore and clear spurious IRQs while executing commands by polling X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=e2f8fb72144a9f38d44ccf3f939e939392eda659;p=openwrt%2Fstaging%2Fblogic.git sata_sil: ignore and clear spurious IRQs while executing commands by polling sata_sil used to trigger HSM error if IRQ occurs during polling command. This didn't matter because polling wasn't used in sata_sil. However, as of 2.6.20, all IDENTIFYs are performed by polling and device detection sometimes fails due to spurious IRQ. This patch makes sata_sil ignore and clear spurious IRQ while executing commands by polling. Signed-off-by: Tejun Heo Signed-off-by: Jeff Garzik --- diff --git a/drivers/ata/sata_sil.c b/drivers/ata/sata_sil.c index 14872556334b..aaff357db5f5 100644 --- a/drivers/ata/sata_sil.c +++ b/drivers/ata/sata_sil.c @@ -386,9 +386,15 @@ static void sil_host_intr(struct ata_port *ap, u32 bmdma2) goto freeze; } - if (unlikely(!qc || qc->tf.ctl & ATA_NIEN)) + if (unlikely(!qc)) goto freeze; + if (unlikely(qc->tf.flags & ATA_TFLAG_POLLING)) { + /* this sometimes happens, just clear IRQ */ + ata_chk_status(ap); + return; + } + /* Check whether we are expecting interrupt in this state */ switch (ap->hsm_task_state) { case HSM_ST_FIRST: