From: Paul Blakey <pa...@mellanox.com>

Use sysconf(_SC_CLK_TCK) to read run time "number of clock ticks per
second" and use that to convert ticks to msecs.
This is how iproute does the conversion when parsing tc filters.

Signed-off-by: Paul Blakey <pa...@mellanox.com>
Reviewed-by: Roi Dayan <r...@mellanox.com>
---
 lib/tc.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/lib/tc.c b/lib/tc.c
index 401690e..b3fe52f 100644
--- a/lib/tc.c
+++ b/lib/tc.c
@@ -27,6 +27,7 @@
 #include <linux/tc_act/tc_vlan.h>
 #include <linux/gen_stats.h>
 #include <net/if.h>
+#include <unistd.h>
 
 #include "byte-order.h"
 #include "netlink-socket.h"
@@ -399,12 +400,23 @@ static const struct nl_policy gact_policy[] = {
                       .optional = false, },
 };
 
-#define JIFFIES_TO_MS(x) (x * 10)
+static int
+get_user_hz(void) {
+    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
+    static int user_hz = 100;
+
+    if (ovsthread_once_start(&once)) {
+        user_hz = sysconf(_SC_CLK_TCK);
+        ovsthread_once_done(&once);
+    }
+
+    return user_hz;
+}
 
 static void
 nl_parse_tcf(const struct tcf_t *tm, struct tc_flower *flower)
 {
-    flower->lastused = time_msec() - JIFFIES_TO_MS(tm->lastuse);
+    flower->lastused = time_msec() - (tm->lastuse * 1000 / get_user_hz());
 }
 
 static int
-- 
2.7.4

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to