--- drivers/ata/libata-core.c | 1 + drivers/ata/libata-eh.c | 2 ++ drivers/ata/sata_sil.c | 6 +++++- 3 files changed, 8 insertions(+), 1 deletion(-) Index: tree0/drivers/ata/sata_sil.c =================================================================== --- tree0.orig/drivers/ata/sata_sil.c +++ tree0/drivers/ata/sata_sil.c @@ -398,11 +398,15 @@ static void sil_host_intr(struct ata_por ap->eh_info.serror |= serror; } + ata_port_printk(ap, KERN_INFO, "XXX SATA_IRQ, serror=0x%x\n", + serror); goto freeze; } - if (unlikely(!qc)) + if (unlikely(!qc)) { + ata_port_printk(ap, KERN_INFO, "XXX DMA completion w/o qc\n"); goto freeze; + } if (unlikely(qc->tf.flags & ATA_TFLAG_POLLING)) { /* this sometimes happens, just clear IRQ */ Index: tree0/drivers/ata/libata-core.c =================================================================== --- tree0.orig/drivers/ata/libata-core.c +++ tree0/drivers/ata/libata-core.c @@ -1361,6 +1361,7 @@ unsigned ata_exec_internal_sg(struct ata /* no internal command while frozen */ if (ap->pflags & ATA_PFLAG_FROZEN) { spin_unlock_irqrestore(ap->lock, flags); + ata_dev_printk(dev, KERN_INFO, "XXX internal cmd on frozen port\n"); return AC_ERR_SYSTEM; } Index: tree0/drivers/ata/libata-eh.c =================================================================== --- tree0.orig/drivers/ata/libata-eh.c +++ tree0/drivers/ata/libata-eh.c @@ -782,6 +782,8 @@ static void __ata_port_freeze(struct ata ap->pflags |= ATA_PFLAG_FROZEN; + ata_port_printk(ap, KERN_INFO, "XXX freezing port\n"); + dump_stack(); DPRINTK("ata%u port frozen\n", ap->print_id); }