From: Tomas Jedlicka Date: Thu, 30 Mar 2017 13:22:47 +0000 (-0400) Subject: dtrace: DTrace walltime lock-free implementation X-Git-Tag: v4.1.12-98.0.20170517_2143~35^2~1 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=2030a00e9d90477544aec48220d865979b8ab57c;p=users%2Fjedix%2Flinux-maple.git 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 --- 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;