diff --git a/drivers/scsi/sata_sil.c b/drivers/scsi/sata_sil.c index d0a8507..6633738 100644 --- a/drivers/scsi/sata_sil.c +++ b/drivers/scsi/sata_sil.c @@ -380,11 +380,14 @@ static void sil_host_intr(struct ata_por ap->eh_info.serror |= serror; } + ata_port_printk(ap, KERN_ERR, "XXX: SATA_IRQ serror=%x\n", serror); goto freeze; } - if (unlikely(!qc || qc->tf.ctl & ATA_NIEN)) + if (unlikely(!qc || qc->tf.ctl & ATA_NIEN)) { + ata_port_printk(ap, KERN_ERR, "XXX: qc=%p ctl=%x\n", qc, qc ? qc->tf.ctl : 0); goto freeze; + } /* Check whether we are expecting interrupt in this state */ switch (ap->hsm_task_state) { @@ -415,13 +418,17 @@ static void sil_host_intr(struct ata_por case HSM_ST: break; default: + ata_port_printk(ap, KERN_ERR, "XXX: HSM=%d\n", ap->hsm_task_state); goto err_hsm; } /* check main status, clearing INTRQ */ status = ata_chk_status(ap); - if (unlikely(status & ATA_BUSY)) + if (unlikely(status & ATA_BUSY)) { + ata_port_printk(ap, KERN_ERR, "XXX: BUSY status=%x\n", + status); goto err_hsm; + } /* ack bmdma irq events */ ata_bmdma_irq_clear(ap); @@ -434,6 +441,7 @@ static void sil_host_intr(struct ata_por err_hsm: qc->err_mask |= AC_ERR_HSM; freeze: + ap->eh_info.action |= ATA_EH_HARDRESET; ata_port_freeze(ap); }