X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=liblttng-ust%2Fclock.h;h=203cce063d2595b12b84cbb7f18948d970fca712;hb=6ba6fd60507f8e045bdc4f1be14e9d99c6a15f7f;hp=388ed658cbb9761a3c206c890ed620a396d3f92b;hpb=f9364363c8982127d66c2a29cb1fa21760bd00e5;p=lttng-ust.git diff --git a/liblttng-ust/clock.h b/liblttng-ust/clock.h index 388ed658..203cce06 100644 --- a/liblttng-ust/clock.h +++ b/liblttng-ust/clock.h @@ -1,20 +1,8 @@ /* - * Copyright (C) 2010 Pierre-Marc Fournier - * Copyright (C) 2011 Mathieu Desnoyers + * SPDX-License-Identifier: LGPL-2.1-only * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; version 2.1 of - * the License. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * Copyright (C) 2010 Pierre-Marc Fournier + * Copyright (C) 2011 Mathieu Desnoyers */ #ifndef _UST_CLOCK_H @@ -31,7 +19,7 @@ #include "lttng-ust-uuid.h" -struct lttng_trace_clock { +struct lttng_ust_trace_clock { uint64_t (*read64)(void); uint64_t (*freq)(void); int (*uuid)(char *uuid); @@ -39,7 +27,8 @@ struct lttng_trace_clock { const char *(*description)(void); }; -extern struct lttng_trace_clock *lttng_trace_clock; +extern struct lttng_ust_trace_clock *lttng_ust_trace_clock + __attribute__((visibility("hidden"))); void lttng_ust_clock_init(void); @@ -50,59 +39,17 @@ uint64_t trace_clock_read64_monotonic(void) { struct timespec ts; - clock_gettime(CLOCK_MONOTONIC, &ts); - return ((uint64_t) ts.tv_sec * 1000000000ULL) + ts.tv_nsec; -} - -static __inline__ -uint64_t trace_clock_freq_monotonic(void) -{ - return 1000000000ULL; -} - -static __inline__ -int trace_clock_uuid_monotonic(char *uuid) -{ - int ret = 0; - size_t len; - FILE *fp; - - /* - * boot_id needs to be read once before being used concurrently - * to deal with a Linux kernel race. A fix is proposed for - * upstream, but the work-around is needed for older kernels. - */ - fp = fopen("/proc/sys/kernel/random/boot_id", "r"); - if (!fp) { - return -ENOENT; - } - len = fread(uuid, 1, LTTNG_UST_UUID_STR_LEN - 1, fp); - if (len < LTTNG_UST_UUID_STR_LEN - 1) { - ret = -EINVAL; - goto end; + if (caa_unlikely(clock_gettime(CLOCK_MONOTONIC, &ts))) { + ts.tv_sec = 0; + ts.tv_nsec = 0; } - uuid[LTTNG_UST_UUID_STR_LEN - 1] = '\0'; -end: - fclose(fp); - return ret; -} - -static __inline__ -const char *trace_clock_name_monotonic(void) -{ - return "monotonic"; -} - -static __inline__ -const char *trace_clock_description_monotonic(void) -{ - return "Monotonic Clock"; + return ((uint64_t) ts.tv_sec * 1000000000ULL) + ts.tv_nsec; } static __inline__ uint64_t trace_clock_read64(void) { - struct lttng_trace_clock *ltc = CMM_LOAD_SHARED(lttng_trace_clock); + struct lttng_ust_trace_clock *ltc = CMM_LOAD_SHARED(lttng_ust_trace_clock); if (caa_likely(!ltc)) { return trace_clock_read64_monotonic(); @@ -112,57 +59,4 @@ uint64_t trace_clock_read64(void) } } -static __inline__ -uint64_t trace_clock_freq(void) -{ - struct lttng_trace_clock *ltc = CMM_LOAD_SHARED(lttng_trace_clock); - - if (!ltc) { - return trace_clock_freq_monotonic(); - } else { - cmm_read_barrier_depends(); /* load ltc before content */ - return ltc->freq(); - } -} - -static __inline__ -int trace_clock_uuid(char *uuid) -{ - struct lttng_trace_clock *ltc = CMM_LOAD_SHARED(lttng_trace_clock); - - cmm_read_barrier_depends(); /* load ltc before content */ - /* Use default UUID cb when NULL */ - if (!ltc || !ltc->uuid) { - return trace_clock_uuid_monotonic(uuid); - } else { - return ltc->uuid(uuid); - } -} - -static __inline__ -const char *trace_clock_name(void) -{ - struct lttng_trace_clock *ltc = CMM_LOAD_SHARED(lttng_trace_clock); - - if (!ltc) { - return trace_clock_name_monotonic(); - } else { - cmm_read_barrier_depends(); /* load ltc before content */ - return ltc->name(); - } -} - -static __inline__ -const char *trace_clock_description(void) -{ - struct lttng_trace_clock *ltc = CMM_LOAD_SHARED(lttng_trace_clock); - - if (!ltc) { - return trace_clock_description_monotonic(); - } else { - cmm_read_barrier_depends(); /* load ltc before content */ - return ltc->description(); - } -} - #endif /* _UST_CLOCK_H */