X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-clock.h;h=91cbbe62862261401038776da5297557f1dfe130;hb=0efb2ad7fc448283184e43d6fb0915febae45384;hp=7d9c99a66a19c3b55209b86fa91d97f062dcf5bf;hpb=d0b96690836f4b876096f3dc14801f8e25281a77;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/ust-clock.h b/src/bin/lttng-sessiond/ust-clock.h index 7d9c99a66..91cbbe628 100644 --- a/src/bin/lttng-sessiond/ust-clock.h +++ b/src/bin/lttng-sessiond/ust-clock.h @@ -1,83 +1,102 @@ /* - * Copyright (C) 2010 Pierre-Marc Fournier - * Copyright (C) 2011 Mathieu Desnoyers + * Copyright (C) 2010 Pierre-Marc Fournier + * Copyright (C) 2011 Mathieu Desnoyers * - * 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. + * SPDX-License-Identifier: GPL-2.0-only * - * 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 */ #ifndef _UST_CLOCK_H #define _UST_CLOCK_H -#include +#include #include #include #include #include -#include - -#include - -/* TRACE CLOCK */ - -/* - * Currently using the kernel MONOTONIC clock, waiting for kernel-side - * LTTng to implement mmap'd trace clock. - */ +#include +#include +#include -/* Choosing correct trace clock */ +#include static __inline__ uint64_t trace_clock_read64(void) { - struct timespec ts; + uint64_t clock_value = 0; + lttng_ust_clock_read64_function read64_cb; - clock_gettime(CLOCK_MONOTONIC, &ts); - return ((uint64_t) ts.tv_sec * 1000000000ULL) + ts.tv_nsec; + if (lttng_ust_trace_clock_get_read64_cb(&read64_cb)) { + goto end; + } + + clock_value = read64_cb(); +end: + return clock_value; } static __inline__ uint64_t trace_clock_freq(void) { - return 1000000000ULL; + uint64_t frequency = 0; + lttng_ust_clock_freq_function get_freq_cb; + + if (lttng_ust_trace_clock_get_freq_cb(&get_freq_cb)) { + goto end; + } + + frequency = get_freq_cb(); +end: + return frequency; } static __inline__ int trace_clock_uuid(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, UUID_STR_LEN - 1, fp); - if (len < UUID_STR_LEN - 1) { + int ret; + lttng_ust_clock_uuid_function get_uuid_cb; + + if (lttng_ust_trace_clock_get_uuid_cb(&get_uuid_cb)) { ret = -EINVAL; goto end; } - uuid[UUID_STR_LEN - 1] = '\0'; + + ret = get_uuid_cb(uuid); end: - fclose(fp); return ret; + +} + +static __inline__ +const char *trace_clock_name(void) +{ + const char *name; + lttng_ust_clock_name_function get_name_cb; + + if (lttng_ust_trace_clock_get_name_cb(&get_name_cb)) { + name = NULL; + goto end; + } + + name = get_name_cb(); +end: + return name; +} + +static __inline__ +const char *trace_clock_description(void) +{ + const char *description; + lttng_ust_clock_description_function get_description_cb; + + if (lttng_ust_trace_clock_get_description_cb(&get_description_cb)) { + description = NULL; + goto end; + } + + description = get_description_cb(); +end: + return description; } #endif /* _UST_CLOCK_H */