Merge branch 'upstream'
authorJeff Garzik <jgarzik@pobox.com>
Mon, 20 Feb 2006 10:13:31 +0000 (05:13 -0500)
committerJeff Garzik <jgarzik@pobox.com>
Mon, 20 Feb 2006 10:13:31 +0000 (05:13 -0500)
1  2 
drivers/scsi/libata-core.c
drivers/scsi/sata_mv.c
drivers/scsi/sata_vsc.c
include/linux/libata.h

Simple merge
Simple merge
@@@ -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++;
+                               }
                        }
                }
        }
Simple merge