svn commit: r329172 - in head/sys: kern sys
Ian Lepore
ian at FreeBSD.org
Mon Feb 12 17:33:16 UTC 2018
Author: ian
Date: Mon Feb 12 17:33:14 2018
New Revision: 329172
URL: https://svnweb.freebsd.org/changeset/base/329172
Log:
Add a set of convenience routines for RTC drivers to use for debug output,
and a debug.clock_show_io sysctl to control debugging output.
Modified:
head/sys/kern/subr_rtc.c
head/sys/sys/clock.h
Modified: head/sys/kern/subr_rtc.c
==============================================================================
--- head/sys/kern/subr_rtc.c Mon Feb 12 17:27:50 2018 (r329171)
+++ head/sys/kern/subr_rtc.c Mon Feb 12 17:33:14 2018 (r329172)
@@ -76,6 +76,10 @@ __FBSDID("$FreeBSD$");
#include "clock_if.h"
+static int show_io;
+SYSCTL_INT(_debug, OID_AUTO, clock_show_io, CTLFLAG_RWTUN, &show_io, 0,
+ "Enable debug printing of RTC clock I/O; 1=reads, 2=writes, 3=both.");
+
/* XXX: should be kern. now, it's no longer machdep. */
static int disable_rtc_set;
SYSCTL_INT(_machdep, OID_AUTO, disable_rtc_set, CTLFLAG_RW, &disable_rtc_set,
@@ -142,6 +146,60 @@ settime_task_func(void *arg, int pending)
ts.tv_nsec = 0;
}
CLOCK_SETTIME(rtc->clockdev, &ts);
+}
+
+static void
+clock_dbgprint_hdr(device_t dev, int rw)
+{
+ struct timespec now;
+
+ getnanotime(&now);
+ device_printf(dev, "%s at ", (rw & CLOCK_DBG_READ) ? "read " : "write");
+ clock_print_ts(&now, 9);
+ printf(": ");
+}
+
+void
+clock_dbgprint_bcd(device_t dev, int rw, const struct bcd_clocktime *bct)
+{
+
+ if (show_io & rw) {
+ clock_dbgprint_hdr(dev, rw);
+ clock_print_bcd(bct, 9);
+ printf("\n");
+ }
+}
+
+void
+clock_dbgprint_ct(device_t dev, int rw, const struct clocktime *ct)
+{
+
+ if (show_io & rw) {
+ clock_dbgprint_hdr(dev, rw);
+ clock_print_ct(ct, 9);
+ printf("\n");
+ }
+}
+
+void
+clock_dbgprint_err(device_t dev, int rw, int err)
+{
+
+ if (show_io & rw) {
+ clock_dbgprint_hdr(dev, rw);
+ printf("error = %d\n", err);
+ }
+}
+
+void
+clock_dbgprint_ts(device_t dev, int rw, const struct timespec *ts)
+{
+
+ if (show_io & rw) {
+ clock_dbgprint_hdr(dev, rw);
+ clock_print_ts(ts, 9);
+ printf("\n");
+ }
}
void
Modified: head/sys/sys/clock.h
==============================================================================
--- head/sys/sys/clock.h Mon Feb 12 17:27:50 2018 (r329171)
+++ head/sys/sys/clock.h Mon Feb 12 17:33:14 2018 (r329172)
@@ -191,6 +191,18 @@ void clock_print_bcd(const struct bcd_clocktime *bct,
void clock_print_ct(const struct clocktime *ct, int nsdig);
void clock_print_ts(const struct timespec *ts, int nsdig);
+/*
+ * Debugging helpers for RTC clock drivers. Print a [bcd_]clocktime or
+ * timespec, only if rtc clock debugging has been enabled. The rw argument is
+ * one of CLOCK_DBG_READ or CLOCK_DBG_WRITE.
+ */
+#define CLOCK_DBG_READ 0x01
+#define CLOCK_DBG_WRITE 0x02
+void clock_dbgprint_bcd(device_t dev, int rw, const struct bcd_clocktime *bct);
+void clock_dbgprint_ct(device_t dev, int rw, const struct clocktime *ct);
+void clock_dbgprint_err(device_t dev, int rw, int err);
+void clock_dbgprint_ts(device_t dev, int rw, const struct timespec *ts);
+
#endif /* _KERNEL */
#endif /* !_SYS_CLOCK_H_ */
More information about the svn-src-all
mailing list