]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Fix] Another fix for rdtcs
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 27 Oct 2017 13:09:40 +0000 (14:09 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 27 Oct 2017 13:09:40 +0000 (14:09 +0100)
Issue: #1885

CMakeLists.txt
config.h.in
src/libutil/util.c

index 0acfefb75883bc55fb1cc1e2fc3f8215592c442a..8256f5f3977d74762d6b9d1dacbb324868b862ba 100644 (file)
@@ -1123,18 +1123,18 @@ ENDIF()
 CHECK_C_SOURCE_RUNS("
 #include <x86intrin.h>
 int main(int argc, char **argv) {
-        unsigned l;
-        if (__builtin_ia32_rdtscp(&l)) {
+        __builtin_ia32_lfence ();
+        if (__builtin_ia32_rdtsc()) {
                 return 0;
         }
         return -1;
 }
-" HAVE_RDTSCP)
+" HAVE_RDTSC)
 
-IF(NOT HAVE_RDTSCP)
-       MESSAGE(STATUS "rdtscp intrinsic is -NOT- supported")
+IF(NOT HAVE_RDTSC)
+       MESSAGE(STATUS "rdtsc intrinsic is -NOT- supported")
 ELSE()
-       MESSAGE(STATUS "rdtscp intrinsic is supported")
+       MESSAGE(STATUS "rdtsc intrinsic is supported")
 ENDIF()
 
 IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
index 6f8d3c48ca5bd96d4de57b7409256988e25f2a81..ce3ee965034dcf08f62903d0c9c2bd61211f073d 100644 (file)
@@ -71,7 +71,7 @@
 #cmakedefine HAVE_POSIX_FALLOCATE 1
 #cmakedefine HAVE_PTHREAD_PROCESS_SHARED 1
 #cmakedefine HAVE_PWD_H          1
-#cmakedefine HAVE_RDTSCP         1
+#cmakedefine HAVE_RDTSC          1
 #cmakedefine HAVE_READPASSPHRASE_H  1
 #cmakedefine HAVE_SA_SIGINFO     1
 #cmakedefine HAVE_SANE_SHMEM     1
index 7cb2ff81a4c470ada806d70c543cb414de6650e6..9c2af41e3df4f34b632379ec00d1ed5cffa1cf67 100644 (file)
 #ifdef HAVE_SYS_RESOURCE_H
 #include <sys/resource.h>
 #endif
-#ifdef HAVE_RDTSCP
+#ifdef HAVE_RDTSC
+#ifdef __x86_64__
 #include <x86intrin.h>
 #endif
+#endif
 #include <math.h> /* for pow */
 
 #include "cryptobox.h"
@@ -1768,17 +1770,18 @@ rspamd_get_ticks (gboolean rdtsc_ok)
 {
        gdouble res;
 
-#ifdef HAVE_RDTSCP
-       guint tmp;
+#ifdef HAVE_RDTSC
+# ifdef __x86_64__
        guint64 r64;
 
        if (rdtsc_ok) {
-               r64 = __builtin_ia32_rdtscp (&tmp);
+               __builtin_ia32_lfence ();
+               r64 = __rdtsc ();
                /* Preserve lower 52 bits */
                res = r64 & ((1ULL << 53) - 1);
                return res;
        }
-
+# endif
 #endif
 #ifdef HAVE_CLOCK_GETTIME
        struct timespec ts;