Author: imp
Date: Fri Nov  2 17:50:57 2018
New Revision: 340074
URL: https://svnweb.freebsd.org/changeset/base/340074

Log:
  Add sysctl_usec_to_sbintime and sysctl_msec_to_sbintime.
  
  These functions are used to present a sbintime_t as either a number of
  microseconds or a number of milliseconds respectively.
  
  Sponsored by: Netflix

Modified:
  head/sys/kern/kern_sysctl.c
  head/sys/sys/sysctl.h

Modified: head/sys/kern/kern_sysctl.c
==============================================================================
--- head/sys/kern/kern_sysctl.c Fri Nov  2 17:05:40 2018        (r340073)
+++ head/sys/kern/kern_sysctl.c Fri Nov  2 17:50:57 2018        (r340074)
@@ -1692,6 +1692,53 @@ retry:
 }
 
 /*
+ * Based on on sysctl_handle_int() convert microseconds to a sbintime.
+ */
+int
+sysctl_usec_to_sbintime(SYSCTL_HANDLER_ARGS)
+{
+       int error;
+       int64_t tt;
+       sbintime_t sb;
+
+       tt = *(int64_t *)arg1;
+       sb = ustosbt(tt);
+
+       error = sysctl_handle_64(oidp, &sb, 0, req);
+       if (error || !req->newptr)
+               return (error);
+
+       tt = sbttous(sb);
+       *(int64_t *)arg1 = tt;
+
+       return (0);
+}
+
+/*
+ * Based on on sysctl_handle_int() convert milliseconds to a sbintime.
+ */
+int
+sysctl_msec_to_sbintime(SYSCTL_HANDLER_ARGS)
+{
+       int error;
+       int64_t tt;
+       sbintime_t sb;
+
+       tt = *(int64_t *)arg1;
+       sb = mstosbt(tt);
+
+       error = sysctl_handle_64(oidp, &sb, 0, req);
+       if (error || !req->newptr)
+               return (error);
+
+       tt = sbttoms(sb);
+       *(int64_t *)arg1 = tt;
+
+       return (0);
+}
+
+
+/*
  * Transfer functions to/from kernel space.
  * XXX: rather untested at this point
  */

Modified: head/sys/sys/sysctl.h
==============================================================================
--- head/sys/sys/sysctl.h       Fri Nov  2 17:05:40 2018        (r340073)
+++ head/sys/sys/sysctl.h       Fri Nov  2 17:50:57 2018        (r340074)
@@ -216,6 +216,9 @@ int sysctl_handle_counter_u64_array(SYSCTL_HANDLER_ARG
 int sysctl_handle_uma_zone_max(SYSCTL_HANDLER_ARGS);
 int sysctl_handle_uma_zone_cur(SYSCTL_HANDLER_ARGS);
 
+int sysctl_msec_to_sbintime(SYSCTL_HANDLER_ARGS);
+int sysctl_usec_to_sbintime(SYSCTL_HANDLER_ARGS);
+
 int sysctl_dpcpu_int(SYSCTL_HANDLER_ARGS);
 int sysctl_dpcpu_long(SYSCTL_HANDLER_ARGS);
 int sysctl_dpcpu_quad(SYSCTL_HANDLER_ARGS);
@@ -796,6 +799,42 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry);
        sysctl_add_oid(ctx, parent, nbr, name,                          \
            CTLTYPE_INT | CTLFLAG_MPSAFE | CTLFLAG_RD | (access),       \
            __ptr, 0, sysctl_handle_uma_zone_cur, "I", __DESCR(descr),  \
+           NULL);                                                      \
+})
+
+/* OID expressing a sbintime_t as microseconds */
+#define        SYSCTL_SBINTIME_USEC(parent, nbr, name, access, ptr, descr)     
\
+       SYSCTL_OID(parent, nbr, name,                                   \
+           CTLTYPE_INT | CTLFLAG_MPSAFE | CTLFLAG_RD | (access),       \
+           (ptr), 0, sysctl_usec_to_sbintime, "Q", descr);             \
+       CTASSERT(((access) & CTLTYPE) == 0 ||                           \
+           ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S64)
+#define        SYSCTL_ADD_SBINTIME_USEC(ctx, parent, nbr, name, access, ptr, 
descr) \
+({                                                                     \
+       sbintime_t *__ptr = (ptr);                                      \
+       CTASSERT(((access) & CTLTYPE) == 0 ||                           \
+           ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S64);         \
+       sysctl_add_oid(ctx, parent, nbr, name,                          \
+           CTLTYPE_INT | CTLFLAG_MPSAFE | CTLFLAG_RD | (access),       \
+           __ptr, 0, sysctl_usec_to_sbintime, "Q", __DESCR(descr),     \
+           NULL);                                                      \
+})
+
+/* OID expressing a sbintime_t as milliseconds */
+#define        SYSCTL_SBINTIME_MSEC(parent, nbr, name, access, ptr, descr)     
\
+       SYSCTL_OID(parent, nbr, name,                                   \
+           CTLTYPE_INT | CTLFLAG_MPSAFE | CTLFLAG_RD | (access),       \
+           (ptr), 0, sysctl_msec_to_sbintime, "Q", descr);             \
+       CTASSERT(((access) & CTLTYPE) == 0 ||                           \
+           ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S64)
+#define        SYSCTL_ADD_SBINTIME_MSEC(ctx, parent, nbr, name, access, ptr, 
descr) \
+({                                                                     \
+       sbintime_t *__ptr = (ptr);                                      \
+       CTASSERT(((access) & CTLTYPE) == 0 ||                           \
+           ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_S64);         \
+       sysctl_add_oid(ctx, parent, nbr, name,                          \
+           CTLTYPE_INT | CTLFLAG_MPSAFE | CTLFLAG_RD | (access),       \
+           __ptr, 0, sysctl_msec_to_sbintime, "Q", __DESCR(descr),     \
            NULL);                                                      \
 })
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to