From c415c77ea8069e4e4468b2b9a6a31769f47dcba7 Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Wed, 19 Jun 2013 16:54:41 +0800 Subject: [PATCH] net: Use tsc_invariant when it is necessary; mainly in time measure --- sys/net/altq/altq_subr.c | 10 +++++++--- sys/net/if_poll.c | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/sys/net/altq/altq_subr.c b/sys/net/altq/altq_subr.c index 9f58bd7660..87558dd8a9 100644 --- a/sys/net/altq/altq_subr.c +++ b/sys/net/altq/altq_subr.c @@ -809,9 +809,10 @@ init_machclk(void) #endif #if defined(__i386__) || defined(__x86_64__) - /* check if TSC is available */ - if ((cpu_feature & CPUID_TSC) == 0) + if (!tsc_present) { + /* No TSC */ machclk_usepcc = 0; + } if (ncpus > 1) { /* @@ -821,6 +822,9 @@ init_machclk(void) * across CPUs or not. */ machclk_usepcc = 0; + } else if (!tsc_invariant) { + /* Not invariant TSC */ + machclk_usepcc = 0; } #else machclk_usepcc = 0; @@ -842,7 +846,7 @@ init_machclk(void) * just use it. */ #ifdef _RDTSC_SUPPORTED_ - if (cpu_feature & CPUID_TSC) + if (tsc_present) machclk_freq = (uint64_t)tsc_frequency; #endif diff --git a/sys/net/if_poll.c b/sys/net/if_poll.c index bfb1b0feff..ffe84b5a29 100644 --- a/sys/net/if_poll.c +++ b/sys/net/if_poll.c @@ -316,7 +316,7 @@ sched_iopollmore(struct iopoll_ctx *io_ctx) static __inline void ifpoll_time_get(union ifpoll_time *t) { - if (__predict_true(tsc_present)) + if (tsc_invariant) t->tsc = rdtsc(); else microuptime(&t->tv); -- 2.41.0