From 2030a00e9d90477544aec48220d865979b8ab57c Mon Sep 17 00:00:00 2001 From: Tomas Jedlicka Date: Thu, 30 Mar 2017 09:22:47 -0400 Subject: [PATCH] dtrace: DTrace walltime lock-free implementation DTrace walltimestamp is now based on reading current kernel timespec without taking locks. Orabug: 25715256 Signed-off-by: Tomas Jedlicka Reviewed-by: Kris Van Hees Acked-by: Nick Alcock --- include/linux/dtrace_os.h | 4 +++- kernel/dtrace/dtrace_os.c | 11 ++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/include/linux/dtrace_os.h b/include/linux/dtrace_os.h index 90952301a013..e3200c2d6c84 100644 --- a/include/linux/dtrace_os.h +++ b/include/linux/dtrace_os.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2011-2014 Oracle, Inc. */ +/* Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved. */ #ifndef _LINUX_DTRACE_OS_H_ #define _LINUX_DTRACE_OS_H_ @@ -36,6 +36,8 @@ typedef enum dtrace_vtime_state { extern dtrace_vtime_state_t dtrace_vtime_active; +extern ktime_t dtrace_get_walltime(void); + extern void dtrace_vtime_enable(void); extern void dtrace_vtime_disable(void); extern void dtrace_vtime_switch(struct task_struct *, struct task_struct *); diff --git a/kernel/dtrace/dtrace_os.c b/kernel/dtrace/dtrace_os.c index 2a6941772fba..72d0746748c6 100644 --- a/kernel/dtrace/dtrace_os.c +++ b/kernel/dtrace/dtrace_os.c @@ -2,7 +2,7 @@ * FILE: dtrace_os.c * DESCRIPTION: Dynamic Tracing: OS support functions - part of kernel core * - * Copyright (C) 2010-2014 Oracle Corporation + * Copyright (c) 2010, 2017, Oracle and/or its affiliates. All rights reserved. */ #include @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -335,6 +336,14 @@ void dtrace_psinfo_free(struct task_struct *tsk) \*---------------------------------------------------------------------------*/ dtrace_vtime_state_t dtrace_vtime_active = 0; +ktime_t dtrace_get_walltime(void) +{ + struct timespec t = __current_kernel_time(); + + return ns_to_ktime(timespec64_to_ns(&t)); +} +EXPORT_SYMBOL(dtrace_get_walltime); + void dtrace_vtime_enable(void) { dtrace_vtime_state_t old, new; -- 2.50.1