Author: np
Date: Wed Mar  9 21:07:09 2011
New Revision: 219436
URL: http://svn.freebsd.org/changeset/base/219436

Log:
  Display holdoff timers and packet counts as a list of numbers.
  
  MFC after:    1 week

Modified:
  head/sys/dev/cxgbe/t4_main.c

Modified: head/sys/dev/cxgbe/t4_main.c
==============================================================================
--- head/sys/dev/cxgbe/t4_main.c        Wed Mar  9 17:15:11 2011        
(r219435)
+++ head/sys/dev/cxgbe/t4_main.c        Wed Mar  9 21:07:09 2011        
(r219436)
@@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
 #include <dev/pci/pcivar.h>
 #include <dev/pci/pci_private.h>
 #include <sys/firmware.h>
+#include <sys/sbuf.h>
 #include <sys/smp.h>
 #include <sys/socket.h>
 #include <sys/sockio.h>
@@ -272,6 +273,7 @@ static void t4_get_regs(struct adapter *
 static void cxgbe_tick(void *);
 static int t4_sysctls(struct adapter *);
 static int cxgbe_sysctls(struct port_info *);
+static int sysctl_int_array(SYSCTL_HANDLER_ARGS);
 static int sysctl_holdoff_tmr_idx(SYSCTL_HANDLER_ARGS);
 static int sysctl_holdoff_pktc_idx(SYSCTL_HANDLER_ARGS);
 static int sysctl_qsize_rxq(SYSCTL_HANDLER_ARGS);
@@ -2294,15 +2296,13 @@ t4_sysctls(struct adapter *sc)
        SYSCTL_ADD_INT(ctx, children, OID_AUTO, "core_clock", CTLFLAG_RD,
            &sc->params.vpd.cclk, 0, "core clock frequency (in KHz)");
 
-       /* XXX: this doesn't seem to show up */
-       SYSCTL_ADD_OPAQUE(ctx, children, OID_AUTO, "holdoff_tmr",
-           CTLFLAG_RD, &intr_timer, sizeof(intr_timer), "IU",
-           "interrupt holdoff timer values (us)");
-
-       /* XXX: this doesn't seem to show up */
-       SYSCTL_ADD_OPAQUE(ctx, children, OID_AUTO, "holdoff_pktc",
-           CTLFLAG_RD, &intr_pktcount, sizeof(intr_pktcount), "IU",
-           "interrupt holdoff packet counter values");
+       SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "holdoff_timers",
+           CTLTYPE_STRING | CTLFLAG_RD, &intr_timer, sizeof(intr_timer),
+           sysctl_int_array, "A", "interrupt holdoff timer values (us)");
+
+       SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "holdoff_pkt_counts",
+           CTLTYPE_STRING | CTLFLAG_RD, &intr_pktcount, sizeof(intr_pktcount),
+           sysctl_int_array, "A", "interrupt holdoff packet counter values");
 
        return (0);
 }
@@ -2505,6 +2505,22 @@ cxgbe_sysctls(struct port_info *pi)
 }
 
 static int
+sysctl_int_array(SYSCTL_HANDLER_ARGS)
+{
+       int rc, *i;
+       struct sbuf sb;
+
+       sbuf_new(&sb, NULL, 32, SBUF_AUTOEXTEND);
+       for (i = arg1; arg2; arg2 -= sizeof(int), i++)
+               sbuf_printf(&sb, "%d ", *i);
+       sbuf_trim(&sb);
+       sbuf_finish(&sb);
+       rc = sysctl_handle_string(oidp, sbuf_data(&sb), sbuf_len(&sb), req);
+       sbuf_delete(&sb);
+       return (rc);
+}
+
+static int
 sysctl_holdoff_tmr_idx(SYSCTL_HANDLER_ARGS)
 {
        struct port_info *pi = arg1;
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to