Hi,

Can you guys test this diff for me and let me know what happens or if it
fixes your issue?

This is supposed to be applied on top of a clean current source tree.


Thank you,
Paul


Index: arch/amd64/amd64/tsc.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/tsc.c,v
retrieving revision 1.13
diff -u -p -u -p -r1.13 tsc.c
--- arch/amd64/amd64/tsc.c      9 Aug 2019 15:20:05 -0000       1.13
+++ arch/amd64/amd64/tsc.c      25 Aug 2019 15:25:40 -0000
@@ -210,7 +210,7 @@ cpu_recalibrate_tsc(struct timecounter *
 uint
 tsc_get_timecount(struct timecounter *tc)
 {
-       return rdtsc() + curcpu()->ci_tsc_skew;
+       return rdtsc();
 }
 
 void
Index: arch/amd64/include/cpufunc.h
===================================================================
RCS file: /cvs/src/sys/arch/amd64/include/cpufunc.h,v
retrieving revision 1.34
diff -u -p -u -p -r1.34 cpufunc.h
--- arch/amd64/include/cpufunc.h        28 Jun 2019 21:54:05 -0000      1.34
+++ arch/amd64/include/cpufunc.h        25 Aug 2019 15:25:40 -0000
@@ -283,13 +283,14 @@ mfence(void)
 }
 
 static __inline u_int64_t
-rdtsc(void)
+rdtsc_(void)
 {
        uint32_t hi, lo;
 
        __asm volatile("rdtsc" : "=d" (hi), "=a" (lo));
        return (((uint64_t)hi << 32) | (uint64_t) lo);
 }
+#define rdtsc() (rdtsc_() + curcpu()->ci_tsc_skew)
 
 static __inline u_int64_t
 rdpmc(u_int pmc)
Index: arch/amd64/include/pctr.h
===================================================================
RCS file: /cvs/src/sys/arch/amd64/include/pctr.h,v
retrieving revision 1.6
diff -u -p -u -p -r1.6 pctr.h
--- arch/amd64/include/pctr.h   25 Mar 2019 18:48:12 -0000      1.6
+++ arch/amd64/include/pctr.h   25 Aug 2019 15:25:40 -0000
@@ -51,7 +51,7 @@ struct pctrst {
 
 #define _PATH_PCTR     "/dev/pctr"
 
-#define rdtsc()                                                        \
+#define rdtsc1()                                                       \
 ({                                                             \
        u_int32_t hi, lo;                                       \
        __asm volatile("rdtsc" : "=d" (hi), "=a" (lo));         \

Reply via email to