From: Robert Hancock <[EMAIL PROTECTED]>

Some debug output in the ADMA error_handler function was removed recently,
but it may be useful in certain cases, like NCQ commands timing out.  Add
it back in, but make it a bit more intelligent so that it only prints if
command(s) are active and only prints the CPBs for those commands.  That
way it won't spew at inappropriate times like suspend/resume.

[EMAIL PROTECTED]: cleanup]
Signed-off-by: Robert Hancock <[EMAIL PROTECTED]>
Cc: Jeff Garzik <[EMAIL PROTECTED]>
Cc: Tejun Heo <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
---

 drivers/ata/sata_nv.c |   31 +++++++++++++++++++++++++++++--
 1 file changed, 29 insertions(+), 2 deletions(-)

diff -puN 
drivers/ata/sata_nv.c~sata_nv-add-back-some-verbosity-into-adma-error_handler 
drivers/ata/sata_nv.c
--- 
a/drivers/ata/sata_nv.c~sata_nv-add-back-some-verbosity-into-adma-error_handler
+++ a/drivers/ata/sata_nv.c
@@ -1441,11 +1441,38 @@ static void nv_adma_error_handler(struct
                        }
                }
 
+               if (ata_tag_valid(ap->active_tag) || ap->sactive) {
+                       u32 notifier = readl(mmio + NV_ADMA_NOTIFIER);
+                       u32 notifier_error = readl(mmio + 
NV_ADMA_NOTIFIER_ERROR);
+                       u32 gen_ctl = readl(pp->gen_block + NV_ADMA_GEN_CTL);
+                       u32 status = readw(mmio + NV_ADMA_STAT);
+
+                       ata_port_printk(ap, KERN_ERR, "EH in ADMA mode, "
+                               "notifier 0x%X notifier_error 0x%X gen_ctl "
+                               "0x%X status 0x%X\n",
+                               notifier, notifier_error, gen_ctl, status);
+
+                       for (i = 0; i < NV_ADMA_MAX_CPBS; i++) {
+                               struct nv_adma_cpb *cpb = &pp->cpb[i];
+                               if ((ata_tag_valid(ap->active_tag) &&
+                                               i == ap->active_tag) ||
+                                               ap->sactive & (1 << i))
+                                       ata_port_printk(ap, KERN_ERR, "CPB %d: "
+                                               "ctl_flags 0x%x, resp_flags "
+                                               "0x%x\n",
+                                               i, cpb->ctl_flags,
+                                               cpb->resp_flags);
+                       }
+               }
+
                /* Push us back into port register mode for error handling. */
                nv_adma_register_mode(ap);
 
-               /* Mark all of the CPBs as invalid to prevent them from being 
executed */
-               for( i=0;i<NV_ADMA_MAX_CPBS;i++)
+               /*
+                * Mark all of the CPBs as invalid to prevent them from being
+                * executed
+               */
+               for (i = 0; i< NV_ADMA_MAX_CPBS; i++)
                        pp->cpb[i].ctl_flags &= ~NV_CPB_CTL_CPB_VALID;
 
                /* clear CPB fetch count */
_
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to