summaryrefslogtreecommitdiff
path: root/sys/dev/ata
diff options
context:
space:
mode:
authorjdolecek <jdolecek@NetBSD.org>2018-08-06 20:07:05 +0000
committerjdolecek <jdolecek@NetBSD.org>2018-08-06 20:07:05 +0000
commita42609d2e2948ae11603b97e482db77df22f826d (patch)
tree6be61e21c3751e3ab865367d9e1d9f217d2d43b0 /sys/dev/ata
parentfcf43b6326d45dc4a2746363a04fee9ab40ca5dd (diff)
add wddebug() which dumps some status for attached disks; indended for
debugging of PR kern/52783
Diffstat (limited to 'sys/dev/ata')
-rw-r--r--sys/dev/ata/ata_subr.c32
-rw-r--r--sys/dev/ata/atavar.h6
-rw-r--r--sys/dev/ata/wd.c27
3 files changed, 60 insertions, 5 deletions
diff --git a/sys/dev/ata/ata_subr.c b/sys/dev/ata/ata_subr.c
index a94107dfeb7..e274cd16b88 100644
--- a/sys/dev/ata/ata_subr.c
+++ b/sys/dev/ata/ata_subr.c
@@ -1,4 +1,4 @@
-/* $NetBSD: ata_subr.c,v 1.4 2017/10/20 07:06:07 jdolecek Exp $ */
+/* $NetBSD: ata_subr.c,v 1.5 2018/08/06 20:07:05 jdolecek Exp $ */
/*
* Copyright (c) 1998, 2001 Manuel Bouyer. All rights reserved.
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ata_subr.c,v 1.4 2017/10/20 07:06:07 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ata_subr.c,v 1.5 2018/08/06 20:07:05 jdolecek Exp $");
#include "opt_ata.h"
@@ -436,3 +436,31 @@ ata_channel_lock_owned(struct ata_channel *chp)
{
KASSERT(mutex_owned(&chp->ch_lock));
}
+
+#ifdef ATADEBUG
+void
+atachannel_debug(struct ata_channel *chp)
+{
+ struct ata_queue *chq = chp->ch_queue;
+
+ printf(" ch %s flags 0x%x ndrives %d\n",
+ device_xname(chp->atabus), chp->ch_flags, chp->ch_ndrives);
+ printf(" que: flags 0x%x avail 0x%x used 0x%x\n",
+ chq->queue_flags, chq->queue_xfers_avail, chq->active_xfers_used);
+ printf(" act %d freez %d open %u\n",
+ chq->queue_active, chq->queue_freeze, chq->queue_openings);
+
+#if 0
+ printf(" xfers:\n");
+ for(int i=0; i < chq->queue_openings; i++) {
+ struct ata_xfer *xfer = &chq->queue_xfers[i];
+
+ printf(" #%d sl %d drv %d retr %d fl %x",
+ i, xfer->c_slot, xfer->c_drive, xfer->c_retries,
+ xfer->c_flags);
+ printf(" data %p bcount %d skip %d\n",
+ xfer->c_databuf, xfer->c_bcount, xfer->c_skip);
+ }
+#endif
+}
+#endif /* ATADEBUG */
diff --git a/sys/dev/ata/atavar.h b/sys/dev/ata/atavar.h
index fa5535de914..9145bad3985 100644
--- a/sys/dev/ata/atavar.h
+++ b/sys/dev/ata/atavar.h
@@ -1,4 +1,4 @@
-/* $NetBSD: atavar.h,v 1.97 2018/06/01 18:13:30 macallan Exp $ */
+/* $NetBSD: atavar.h,v 1.98 2018/08/06 20:07:05 jdolecek Exp $ */
/*
* Copyright (c) 1998, 2001 Manuel Bouyer.
@@ -575,6 +575,10 @@ bool ata_waitdrain_xfer_check(struct ata_channel *, struct ata_xfer *);
void atacmd_toncq(struct ata_xfer *, uint8_t *, uint16_t *, uint16_t *,
uint8_t *);
+#ifdef ATADEBUG
+void atachannel_debug(struct ata_channel *);
+#endif
+
#endif /* _KERNEL */
#endif /* _DEV_ATA_ATAVAR_H_ */
diff --git a/sys/dev/ata/wd.c b/sys/dev/ata/wd.c
index 11354fcab4d..2deaa7fb76a 100644
--- a/sys/dev/ata/wd.c
+++ b/sys/dev/ata/wd.c
@@ -1,4 +1,4 @@
-/* $NetBSD: wd.c,v 1.439 2018/06/03 18:38:35 jdolecek Exp $ */
+/* $NetBSD: wd.c,v 1.440 2018/08/06 20:07:05 jdolecek Exp $ */
/*
* Copyright (c) 1998, 2001 Manuel Bouyer. All rights reserved.
@@ -54,7 +54,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.439 2018/06/03 18:38:35 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wd.c,v 1.440 2018/08/06 20:07:05 jdolecek Exp $");
#include "opt_ata.h"
#include "opt_wd.h"
@@ -2162,3 +2162,26 @@ wd_sysctl_detach(struct wd_softc *wd)
sysctl_teardown(&wd->nodelog);
}
+#ifdef ATADEBUG
+int wddebug(void);
+
+int
+wddebug(void)
+{
+ struct wd_softc *wd;
+ struct dk_softc *dksc;
+ int unit;
+
+ for (unit = 0; unit <= 3; unit++) {
+ wd = device_lookup_private(&wd_cd, unit);
+ if (wd == NULL)
+ continue;
+ dksc = &wd->sc_dksc;
+ printf("%s fl %x bufq %p:\n",
+ dksc->sc_xname, wd->sc_flags, bufq_peek(dksc->sc_bufq));
+
+ atachannel_debug(wd->drvp->chnl_softc);
+ }
+ return 0;
+}
+#endif /* ATADEBUG */