From 33673ee7b705adb6b24350c30966d4937d41ed95 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 20 Jan 2014 11:31:30 -0500 Subject: [PATCH] Update sched instrumentation to Linux 3.13 Signed-off-by: Mathieu Desnoyers --- instrumentation/events/lttng-module/sched.h | 38 ++++++++++++++++++--- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/instrumentation/events/lttng-module/sched.h b/instrumentation/events/lttng-module/sched.h index 25faad0e..9e490cfe 100644 --- a/instrumentation/events/lttng-module/sched.h +++ b/instrumentation/events/lttng-module/sched.h @@ -15,7 +15,24 @@ #ifndef _TRACE_SCHED_DEF_ #define _TRACE_SCHED_DEF_ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)) + +static inline long __trace_sched_switch_state(struct task_struct *p) +{ + long state = p->state; + +#ifdef CONFIG_PREEMPT + /* + * For all intents and purposes a preempted task is a running task. + */ + if (task_preempt_count(p) & PREEMPT_ACTIVE) + state = TASK_RUNNING | TASK_STATE_MAX; +#endif + + return state; +} + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) static inline long __trace_sched_switch_state(struct task_struct *p) { @@ -26,11 +43,24 @@ static inline long __trace_sched_switch_state(struct task_struct *p) * For all intents and purposes a preempted task is a running task. */ if (task_thread_info(p)->preempt_count & PREEMPT_ACTIVE) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) state = TASK_RUNNING | TASK_STATE_MAX; -#else - state = TASK_RUNNING; #endif + + return state; +} + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + +static inline long __trace_sched_switch_state(struct task_struct *p) +{ + long state = p->state; + +#ifdef CONFIG_PREEMPT + /* + * For all intents and purposes a preempted task is a running task. + */ + if (task_thread_info(p)->preempt_count & PREEMPT_ACTIVE) + state = TASK_RUNNING; #endif return state; -- 2.34.1