Em Tue, Jan 03, 2017 at 12:42:42PM +0100, Daniel Bristot de Oliveira escreveu: > From: Daniel Bristot de Oliveiva <bris...@redhat.com> > > Currently, the sched:sched_switch tracepoint reports deadline tasks > with priority -1. But when reading the trace via perf script I've > got the following output: > > # ./d & # (d is a deadline task, see [1]) > # perf record -e sched:sched_switch -a sleep 1 > # perf script > ... > swapper 0 [000] 2146.962441: sched:sched_switch: swapper/0:0 > [120] R ==> d:2593 [4294967295] > d 2593 [000] 2146.972472: sched:sched_switch: d:2593 > [4294967295] R ==> g:2590 [4294967295] > > The task d reports the wrong priority [4294967295]. This happens because > the "int prio" is stored in an unsigned long long val. Although it is > set as a %lld, as int is shorter than unsigned long long, > trace_seq_printf prints it as a positive number. > > The fix is just to cast the val as an int, and print it as a %d, > as in the sched:sched_switch tracepoint's "format". > > The output with the fix is: > > # ./d & > # perf record -e sched:sched_switch -a sleep 1 > # perf script > ... > swapper 0 [000] 4306.374037: sched:sched_switch: swapper/0:0 > [120] R ==> d:10941 [-1] > d 10941 [000] 4306.383823: sched:sched_switch: d:10941 [-1] R > ==> swapper/0:0 [120] > > [1] gcc -o d d.c - from http://bristot.me/lkml/d.c > > Signed-off-by: Daniel Bristot de Oliveira <bris...@redhat.com> > Cc: Steven Rostedt <rost...@goodmis.org> > Cc: Ingo Molnar <mi...@redhat.com> > Cc: Peter Zijlstra <pet...@infradead.org> > Cc: Arnaldo Carvalho de Melo <a...@kernel.org> > Cc: Alexander Shishkin <alexander.shish...@linux.intel.com> > Cc: Jiri Olsa <jo...@redhat.com> > Cc: linux-kernel@vger.kernel.org
you missed the delimiter here: --- Without it, I get: [acme@jouet linux]$ am /wb/1.patch Applying: tools lib traceevent: Fix prev/next_prio for deadline tasks fatal: patch with only garbage at line 3 Patch failed at 0001 tools lib traceevent: Fix prev/next_prio for deadline tasks The copy of the patch that failed is found in: .git/rebase-apply/patch When you have resolved this problem, run "git am --continue". If you prefer to skip this patch, run "git am --skip" instead. To restore the original branch and stop patching, run "git am --abort". [acme@jouet linux]$ git am --abort I added it manually and applied, please consider using 'git format-patch' next time :-) > > diff --git a/tools/lib/traceevent/plugin_sched_switch.c > b/tools/lib/traceevent/plugin_sched_switch.c > index f1ce600..ec30c2f 100644 > --- a/tools/lib/traceevent/plugin_sched_switch.c > +++ b/tools/lib/traceevent/plugin_sched_switch.c > @@ -111,7 +111,7 @@ static int sched_switch_handler(struct trace_seq *s, > trace_seq_printf(s, "%lld ", val); > > if (pevent_get_field_val(s, event, "prev_prio", record, &val, 0) == 0) > - trace_seq_printf(s, "[%lld] ", val); > + trace_seq_printf(s, "[%d] ", (int) val); > > if (pevent_get_field_val(s, event, "prev_state", record, &val, 0) == 0) > write_state(s, val); > @@ -129,7 +129,7 @@ static int sched_switch_handler(struct trace_seq *s, > trace_seq_printf(s, "%lld", val); > > if (pevent_get_field_val(s, event, "next_prio", record, &val, 0) == 0) > - trace_seq_printf(s, " [%lld]", val); > + trace_seq_printf(s, " [%d]", (int) val); > > return 0; > } > -- > 2.9.3