From: Mathieu Desnoyers Date: Fri, 27 Nov 2015 19:57:44 +0000 (-0500) Subject: Fix: update sched instrumentation for kernel 4.4.0 X-Git-Tag: v2.7.1~2 X-Git-Url: http://git.lttng.org/?p=lttng-modules.git;a=commitdiff_plain;h=fe82875e135cdbc9889f4e37b89309664038fbd2 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 2efff161..f23db75b 100644 --- a/instrumentation/events/lttng-module/sched.h +++ b/instrumentation/events/lttng-module/sched.h @@ -24,7 +24,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) { @@ -228,7 +242,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), @@ -244,7 +264,9 @@ LTTNG_TRACEPOINT_EVENT(sched_switch, ctf_array_text(char, prev_comm, prev->comm, TASK_COMM_LEN) ctf_integer(pid_t, prev_tid, prev->pid) ctf_integer(int, 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)) + ctf_integer(long, prev_state, __trace_sched_switch_state(preempt, prev)) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) ctf_integer(long, prev_state, __trace_sched_switch_state(prev)) #else ctf_integer(long, prev_state, prev->state)