Mark Paulus wrote:
> I applied the patch, and not much difference.  Still the same issue, and
> here
> is the new dmesg output.

Weird, okay, here's updated patch.  Please try this one and report the
dmesg.  FYI, it won't fix the problem.  It's just to find out what's
going on.

-- 
tejun
---
 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);
 }
 

Reply via email to