From: Jeff Garzik Date: Mon, 20 Feb 2006 10:13:31 +0000 (-0500) Subject: Merge branch 'upstream' X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=ff607748590fba14aecedb0d50edc4ada98d4302;p=linux-beck.git Merge branch 'upstream' --- ff607748590fba14aecedb0d50edc4ada98d4302 diff --cc drivers/scsi/sata_vsc.c index 976a6b124af9,b574379a7a82..2d448e84889c --- a/drivers/scsi/sata_vsc.c +++ b/drivers/scsi/sata_vsc.c @@@ -201,13 -214,28 +214,27 @@@ static irqreturn_t vsc_sata_interrupt ( struct ata_port *ap; ap = host_set->ports[i]; - if (ap && - !(ap->flags & ATA_FLAG_PORT_DISABLED)) { + + if (is_vsc_sata_int_err(i, int_status)) { + u32 err_status; + printk(KERN_DEBUG "%s: ignoring interrupt(s)\n", __FUNCTION__); + err_status = ap ? vsc_sata_scr_read(ap, SCR_ERROR) : 0; + vsc_sata_scr_write(ap, SCR_ERROR, err_status); + handled++; + } + - if (ap && !(ap->flags & - (ATA_FLAG_PORT_DISABLED|ATA_FLAG_NOINTR))) { ++ if (ap && !(ap->flags & ATA_FLAG_PORT_DISABLED)) { struct ata_queued_cmd *qc; qc = ata_qc_from_tag(ap, ap->active_tag); - if (qc && (!(qc->tf.ctl & ATA_NIEN))) { + if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING))) handled += ata_host_intr(ap, qc); + } else { + printk(KERN_DEBUG "%s: ignoring interrupt(s)\n", __FUNCTION__); + ata_chk_status(ap); + handled++; + } + } } }