X-Git-Url: https://git.liburcu.org/?p=urcu.git;a=blobdiff_plain;f=include%2Furcu%2Farch%2Fgeneric.h;fp=include%2Furcu%2Farch%2Fgeneric.h;h=be6e41e24d88a40f16d07ae08d7d391aeb650821;hp=4b56ed7aaff00788a5fb4fbce712a146c5198a5d;hb=86e8ab17bc98f890f7da1aa5af6ad9038820c618;hpb=5e1b7c840a2b21b8442b322cedbb70a790e49520 diff --git a/include/urcu/arch/generic.h b/include/urcu/arch/generic.h index 4b56ed7..be6e41e 100644 --- a/include/urcu/arch/generic.h +++ b/include/urcu/arch/generic.h @@ -153,8 +153,11 @@ extern "C" { #ifndef HAS_CAA_GET_CYCLES #define HAS_CAA_GET_CYCLES -#ifdef CONFIG_RCU_HAVE_CLOCK_GETTIME +#if defined(__APPLE__) +#include +#include +#include #include #include @@ -162,18 +165,21 @@ typedef uint64_t caa_cycles_t; static inline caa_cycles_t caa_get_cycles (void) { - struct timespec ts; + mach_timespec_t ts = { 0, 0 }; + static clock_serv_t clock_service; - if (caa_unlikely(clock_gettime(CLOCK_MONOTONIC, &ts))) + if (caa_unlikely(!clock_service)) { + if (host_get_clock_service(mach_host_self(), + SYSTEM_CLOCK, &clock_service)) + return -1ULL; + } + if (caa_unlikely(clock_get_time(clock_service, &ts))) return -1ULL; return ((uint64_t) ts.tv_sec * 1000000000ULL) + ts.tv_nsec; } -#elif defined(__APPLE__) +#elif defined(CONFIG_RCU_HAVE_CLOCK_GETTIME) -#include -#include -#include #include #include @@ -181,15 +187,9 @@ typedef uint64_t caa_cycles_t; static inline caa_cycles_t caa_get_cycles (void) { - mach_timespec_t ts = { 0, 0 }; - static clock_serv_t clock_service; + struct timespec ts; - if (caa_unlikely(!clock_service)) { - if (host_get_clock_service(mach_host_self(), - SYSTEM_CLOCK, &clock_service)) - return -1ULL; - } - if (caa_unlikely(clock_get_time(clock_service, &ts))) + if (caa_unlikely(clock_gettime(CLOCK_MONOTONIC, &ts))) return -1ULL; return ((uint64_t) ts.tv_sec * 1000000000ULL) + ts.tv_nsec; }