From: Mathieu Desnoyers Date: Thu, 5 May 2016 20:57:52 +0000 (-0400) Subject: Fix: update sched instrumentation for kernel 4.4.0 X-Git-Tag: v2.6.6~13 X-Git-Url: http://git.liburcu.org/?p=lttng-modules.git;a=commitdiff_plain;h=b11672c7f30b9ffbad47a5c2178155f8caf0be0e Fix: update sched instrumentation for kernel 4.4.0 Due to upstream Linux kernel commit: commit c73464b1c8434ad4cbfd5369c3e724f3e8ffe5a4 Author: Peter Zijlstra Date: Mon Sep 28 18:06:56 2015 +0200 sched/core: Fix trace_sched_switch() Signed-off-by: Mathieu Desnoyers --- diff --git a/instrumentation/events/lttng-module/sched.h b/instrumentation/events/lttng-module/sched.h index d2e03f9d..347edb75 100644 --- a/instrumentation/events/lttng-module/sched.h +++ b/instrumentation/events/lttng-module/sched.h @@ -15,7 +15,21 @@ #ifndef _TRACE_SCHED_DEF_ #define _TRACE_SCHED_DEF_ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,0)) + +static inline long __trace_sched_switch_state(bool preempt, struct task_struct *p) +{ +#ifdef CONFIG_SCHED_DEBUG + BUG_ON(p != current); +#endif /* CONFIG_SCHED_DEBUG */ + /* + * Preemption ignores task state, therefore preempted tasks are always RUNNING + * (we will not have dequeued if state != RUNNING). + */ + return preempt ? TASK_RUNNING | TASK_STATE_MAX : p->state; +} + +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(3,19,0)) static inline long __trace_sched_switch_state(struct task_struct *p) { @@ -271,7 +285,13 @@ LTTNG_TRACEPOINT_EVENT_INSTANCE(sched_wakeup_template, sched_wakeup_new, */ LTTNG_TRACEPOINT_EVENT(sched_switch, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,0)) + TP_PROTO(bool preempt, + struct task_struct *prev, + struct task_struct *next), + + TP_ARGS(preempt, prev, next), +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) TP_PROTO(struct task_struct *prev, struct task_struct *next), @@ -297,7 +317,9 @@ LTTNG_TRACEPOINT_EVENT(sched_switch, tp_memcpy(next_comm, next->comm, TASK_COMM_LEN) tp_assign(prev_tid, prev->pid) tp_assign(prev_prio, prev->prio - MAX_RT_PRIO) -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,4,0)) + tp_assign(prev_state, __trace_sched_switch_state(preempt, prev)) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) tp_assign(prev_state, __trace_sched_switch_state(prev)) #else tp_assign(prev_state, prev->state)