* [PATCH 0/1] tracing/sched: Fix task states in sched_switch event
@ 2010-05-16 22:18 Carsten Emde
2010-05-16 22:18 ` [PATCH 1/1] fix-task-states-in-sched_switch-event.patch Carsten Emde
0 siblings, 1 reply; 6+ messages in thread
From: Carsten Emde @ 2010-05-16 22:18 UTC (permalink / raw)
To: LKML
Cc: Ingo Molnar, Steven Rostedt, Andrew Morton, Frederic Weisbecker,
Peter Zijlstra
Hi Ingo,
> The whole enumeration there is pointless in that .c file - it tells nothing
> to the code reader.
> If it cannot be expressed in a meaningful way then introduce
> TASK_STATE_STRINGS_INIT construct that is defined next to the strings (in a
> .h file or so) - that way it's a coherent whole.
The updated patch
- has all definitions at a common place,
- adapts the related comment,
- makes the string array declaration in fs/proc/array.c a one-liner.
Carsten.
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/1] fix-task-states-in-sched_switch-event.patch
2010-05-16 22:18 [PATCH 0/1] tracing/sched: Fix task states in sched_switch event Carsten Emde
@ 2010-05-16 22:18 ` Carsten Emde
2010-05-17 12:22 ` Peter Zijlstra
0 siblings, 1 reply; 6+ messages in thread
From: Carsten Emde @ 2010-05-16 22:18 UTC (permalink / raw)
To: LKML
Cc: Ingo Molnar, Steven Rostedt, Andrew Morton, Frederic Weisbecker,
Peter Zijlstra, Peter Zijlstra, Carsten Emde
[-- Attachment #1: fix-task-states-in-sched_switch-event.patch --]
[-- Type: text/plain, Size: 5815 bytes --]
The sched_switch trace event displays erroneous character codes of task
states, after a new task state was added in the scheduler code but
omitted to add in the trace event code.
Define character codes of task states individually. In addition, define
task state descriptions needed in /proc and in the sched_switch trace
event at the same place. This will help to keep the task state bits,
characters and descriptions in sync should they ever need to be changed
again.
CC: Ingo Molnar <mingo@elte.hu>
CC: Steven Rostedt <rostedt@goodmis.org>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Frederic Weisbecker <fweisbec@gmail.com>
CC: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <20100513133539.GA17107@elte.hu>
Signed-off-by: Carsten Emde <C.Emde@osadl.org>
---
fs/proc/array.c | 19 -------------
include/linux/sched.h | 62 ++++++++++++++++++++++++++++++++++++++++---
include/trace/events/sched.h | 12 ++++++--
3 files changed, 69 insertions(+), 24 deletions(-)
Index: head/fs/proc/array.c
===================================================================
--- head.orig/fs/proc/array.c
+++ head/fs/proc/array.c
@@ -125,24 +125,7 @@ static inline void task_name(struct seq_
seq_printf(m, "\n");
}
-/*
- * The task state array is a strange "bitmap" of
- * reasons to sleep. Thus "running" is zero, and
- * you can test for combinations of others with
- * simple bit tests.
- */
-static const char *task_state_array[] = {
- "R (running)", /* 0 */
- "S (sleeping)", /* 1 */
- "D (disk sleep)", /* 2 */
- "T (stopped)", /* 4 */
- "t (tracing stop)", /* 8 */
- "Z (zombie)", /* 16 */
- "X (dead)", /* 32 */
- "x (dead)", /* 64 */
- "K (wakekill)", /* 128 */
- "W (waking)", /* 256 */
-};
+static const char *task_state_array[] = TASK_STATE_STRINGS_INIT;
static inline const char *get_task_state(struct task_struct *tsk)
{
Index: head/include/linux/sched.h
===================================================================
--- head.orig/include/linux/sched.h
+++ head/include/linux/sched.h
@@ -170,34 +170,90 @@ print_cfs_rq(struct seq_file *m, int cpu
#endif
/*
- * Task state bitmask. NOTE! These bits are also
- * encoded in fs/proc/array.c: get_task_state().
+ * The task state array is a strange "bitmap" of
+ * reasons to sleep. Thus, the first element is zero,
+ * and you can test for combinations of others with
+ * simple bit tests.
*
* We have two separate sets of flags: task->state
* is about runnability, while task->exit_state are
* about the task exiting. Confusing, but this way
* modifying one set can't modify the other one by
* mistake.
+ *
+ * NOTE: When adding or removing task_states, the
+ * variables TASK_STATE_MAX, TASK_STATE_TO_CHAR_STR,
+ * and TASK_STATE_STRINGS_INIT (below) and the
+ * TP_printk function of the sched_switch event
+ * (in include/trace/events/sched.h) must be adapted
+ * as well.
*/
#define TASK_RUNNING 0
+#define TASK_STATE_0 "R"
+#define TASK_STATE_NAME_0 "running"
+
#define TASK_INTERRUPTIBLE 1
+#define TASK_STATE_1 "S"
+#define TASK_STATE_NAME_1 "sleeping"
+
#define TASK_UNINTERRUPTIBLE 2
+#define TASK_STATE_2 "D"
+#define TASK_STATE_NAME_2 "disk sleep"
+
#define __TASK_STOPPED 4
+#define TASK_STATE_4 "T"
+#define TASK_STATE_NAME_4 "stopped"
+
#define __TASK_TRACED 8
+#define TASK_STATE_8 "t"
+#define TASK_STATE_NAME_8 "tracing stop"
+
/* in tsk->exit_state */
#define EXIT_ZOMBIE 16
+#define TASK_STATE_16 "Z"
+#define TASK_STATE_NAME_16 "zombie"
+
#define EXIT_DEAD 32
+#define TASK_STATE_32 "X"
+#define TASK_STATE_NAME_32 "dead"
+
/* in tsk->state again */
#define TASK_DEAD 64
+#define TASK_STATE_64 "x"
+#define TASK_STATE_NAME_64 "dead"
+
#define TASK_WAKEKILL 128
+#define TASK_STATE_128 "K"
+#define TASK_STATE_NAME_128 "wakekill"
+
#define TASK_WAKING 256
+#define TASK_STATE_256 "W"
+#define TASK_STATE_NAME_256 "waking"
+
#define TASK_STATE_MAX 512
-#define TASK_STATE_TO_CHAR_STR "RSDTtZXxKW"
+#define TASK_STATE_TO_CHAR_STR \
+ TASK_STATE_0 TASK_STATE_1 TASK_STATE_2 TASK_STATE_4 TASK_STATE_8 \
+ TASK_STATE_16 TASK_STATE_32 TASK_STATE_64 TASK_STATE_128 TASK_STATE_256
extern char ___assert_task_state[1 - 2*!!(
sizeof(TASK_STATE_TO_CHAR_STR)-1 != ilog2(TASK_STATE_MAX)+1)];
+#define TASK_STATE_STRING(num) TASK_STATE_##num " (" TASK_STATE_NAME_##num ")"
+#define TASK_STATE_STRINGS_INIT \
+ { \
+ TASK_STATE_STRING(0), \
+ TASK_STATE_STRING(1), \
+ TASK_STATE_STRING(2), \
+ TASK_STATE_STRING(4), \
+ TASK_STATE_STRING(8), \
+ TASK_STATE_STRING(16), \
+ TASK_STATE_STRING(32), \
+ TASK_STATE_STRING(64), \
+ TASK_STATE_STRING(128), \
+ TASK_STATE_STRING(256) \
+ }
+
/* Convenience macros for the sake of set_task_state */
#define TASK_KILLABLE (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)
#define TASK_STOPPED (TASK_WAKEKILL | __TASK_STOPPED)
Index: head/include/trace/events/sched.h
===================================================================
--- head.orig/include/trace/events/sched.h
+++ head/include/trace/events/sched.h
@@ -149,11 +149,17 @@ TRACE_EVENT(sched_switch,
__entry->prev_comm, __entry->prev_pid, __entry->prev_prio,
__entry->prev_state ?
__print_flags(__entry->prev_state, "|",
- { 1, "S"} , { 2, "D" }, { 4, "T" }, { 8, "t" },
- { 16, "Z" }, { 32, "X" }, { 64, "x" },
- { 128, "W" }) : "R",
+ { 1, TASK_STATE_1} , { 2, TASK_STATE_2 },
+ { 4, TASK_STATE_4 }, { 8, TASK_STATE_8 },
+ { 16, TASK_STATE_16 }, { 32, TASK_STATE_32 },
+ { 64, TASK_STATE_64 }, { 128, TASK_STATE_128 },
+ { 256, TASK_STATE_256 }
+ ) : TASK_STATE_0,
__entry->next_comm, __entry->next_pid, __entry->next_prio)
);
+#if TASK_STATE_MAX != 512
+#error "Please add new task state array in __print_flags() above."
+#endif
/*
* Tracepoint for a task being migrated:
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/1] fix-task-states-in-sched_switch-event.patch
2010-05-16 22:18 ` [PATCH 1/1] fix-task-states-in-sched_switch-event.patch Carsten Emde
@ 2010-05-17 12:22 ` Peter Zijlstra
2010-05-17 15:21 ` Carsten Emde
0 siblings, 1 reply; 6+ messages in thread
From: Peter Zijlstra @ 2010-05-17 12:22 UTC (permalink / raw)
To: Carsten Emde
Cc: LKML, Ingo Molnar, Steven Rostedt, Andrew Morton,
Frederic Weisbecker
On Mon, 2010-05-17 at 00:18 +0200, Carsten Emde wrote:
> #define TASK_RUNNING 0
> +#define TASK_STATE_0 "R"
> +#define TASK_STATE_NAME_0 "running"
> +
> #define TASK_INTERRUPTIBLE 1
> +#define TASK_STATE_1 "S"
> +#define TASK_STATE_NAME_1 "sleeping"
> +
> #define TASK_UNINTERRUPTIBLE 2
> +#define TASK_STATE_2 "D"
> +#define TASK_STATE_NAME_2 "disk sleep"
> +
> #define __TASK_STOPPED 4
> +#define TASK_STATE_4 "T"
> +#define TASK_STATE_NAME_4 "stopped"
> +
> #define __TASK_TRACED 8
> +#define TASK_STATE_8 "t"
> +#define TASK_STATE_NAME_8 "tracing stop"
> +
> /* in tsk->exit_state */
> #define EXIT_ZOMBIE 16
> +#define TASK_STATE_16 "Z"
> +#define TASK_STATE_NAME_16 "zombie"
> +
> #define EXIT_DEAD 32
> +#define TASK_STATE_32 "X"
> +#define TASK_STATE_NAME_32 "dead"
> +
> /* in tsk->state again */
> #define TASK_DEAD 64
> +#define TASK_STATE_64 "x"
> +#define TASK_STATE_NAME_64 "dead"
> +
> #define TASK_WAKEKILL 128
> +#define TASK_STATE_128 "K"
> +#define TASK_STATE_NAME_128 "wakekill"
> +
> #define TASK_WAKING 256
> +#define TASK_STATE_256 "W"
> +#define TASK_STATE_NAME_256 "waking"
Since we all love vile macro magic, is the below any better?
include/linux/task_states.h
TASK_STATE(RUNNING, "R", "running")
TASK_STATE(INTERRUPTIBLE, "S", "sleeping")
...
include/linux/sched.h
enum {
#define TASK_STATE(tstate, tstate_c, tstate_s) __TASK_##tstate,
#include <linux/task_states.h>
#undef TASK_STATE
};
enum {
#define TASK_STATE(tstate, tstate_c, tstate_s) \
TASK_##tstate = 1 << __TASK_##tstate,
#include <linux/task_states.h>
#undef TASK_STATE
};
const char *task_state_to_char =
#define TASK_STATE(tstate, tstate_c, tstate_s) tstate_c
#include <linux/task_states.h>
#undef TASK_STATE
;
const char *task_state_to_string[] = {
#define TASK_STATE(tstate, tstate_c, tstate_s) tstate_s,
#include <linux/task_states.h>
#undef TASK_STATE
};
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/1] fix-task-states-in-sched_switch-event.patch
2010-05-17 12:22 ` Peter Zijlstra
@ 2010-05-17 15:21 ` Carsten Emde
2010-05-17 16:54 ` Peter Zijlstra
0 siblings, 1 reply; 6+ messages in thread
From: Carsten Emde @ 2010-05-17 15:21 UTC (permalink / raw)
To: Peter Zijlstra
Cc: LKML, Ingo Molnar, Steven Rostedt, Andrew Morton,
Frederic Weisbecker
[-- Attachment #1: Type: text/plain, Size: 3227 bytes --]
Hi Peter,
>> #define TASK_RUNNING 0
>> +#define TASK_STATE_0 "R"
>> +#define TASK_STATE_NAME_0 "running"
>> +
>> #define TASK_INTERRUPTIBLE 1
>> +#define TASK_STATE_1 "S"
>> +#define TASK_STATE_NAME_1 "sleeping"
>> +
>> #define TASK_UNINTERRUPTIBLE 2
>> +#define TASK_STATE_2 "D"
>> +#define TASK_STATE_NAME_2 "disk sleep"
>> +
>> #define __TASK_STOPPED 4
>> +#define TASK_STATE_4 "T"
>> +#define TASK_STATE_NAME_4 "stopped"
>> +
>> #define __TASK_TRACED 8
>> +#define TASK_STATE_8 "t"
>> +#define TASK_STATE_NAME_8 "tracing stop"
>> +
>> /* in tsk->exit_state */
>> #define EXIT_ZOMBIE 16
>> +#define TASK_STATE_16 "Z"
>> +#define TASK_STATE_NAME_16 "zombie"
>> +
>> #define EXIT_DEAD 32
>> +#define TASK_STATE_32 "X"
>> +#define TASK_STATE_NAME_32 "dead"
>> +
>> /* in tsk->state again */
>> #define TASK_DEAD 64
>> +#define TASK_STATE_64 "x"
>> +#define TASK_STATE_NAME_64 "dead"
>> +
>> #define TASK_WAKEKILL 128
>> +#define TASK_STATE_128 "K"
>> +#define TASK_STATE_NAME_128 "wakekill"
>> +
>> #define TASK_WAKING 256
>> +#define TASK_STATE_256 "W"
>> +#define TASK_STATE_NAME_256 "waking"
>
> Since we all love vile macro magic, is the below any better?
>
> include/linux/task_states.h
>
> TASK_STATE(RUNNING, "R", "running")
> TASK_STATE(INTERRUPTIBLE, "S", "sleeping")
> ...
Well, yes, this looks very nice and is perfectly readable and
maintainable.
> enum {
> #define TASK_STATE(tstate, tstate_c, tstate_s) __TASK_##tstate,
> #include<linux/task_states.h>
> #undef TASK_STATE
> };
>
> enum {
> #define TASK_STATE(tstate, tstate_c, tstate_s) \
> TASK_##tstate = 1<< __TASK_##tstate,
> #include<linux/task_states.h>
> #undef TASK_STATE
> };
>
> const char *task_state_to_char =
> #define TASK_STATE(tstate, tstate_c, tstate_s) tstate_c
> #include<linux/task_states.h>
> #undef TASK_STATE
> ;
>
> const char *task_state_to_string[] = {
> #define TASK_STATE(tstate, tstate_c, tstate_s) tstate_s,
> #include<linux/task_states.h>
> #undef TASK_STATE
> };
I find this section less convincing (although certainly
indistinguishable from magic).
In addition, we need to take care of the various state name prefixes
TASK, __TASK and EXIT and name clashes:
TASK_RUNNING
TASK_INTERRUPTIBLE
TASK_UNINTERRUPTIBLE
__TASK_STOPPED
__TASK_TRACED
EXIT_ZOMBIE
EXIT_DEAD
TASK_DEAD
TASK_WAKEKILL
TASK_WAKING
And we still need to maintain the defines in include/trace/events/
sched.h:
{ 1, TASK_STATE_1 } , { 2, TASK_STATE_2 },
{ 4, TASK_STATE_4 }, { 8, TASK_STATE_8 },
{ 16, TASK_STATE_16 }, { 32, TASK_STATE_32 },
{ 64, TASK_STATE_64 }, { 128, TASK_STATE_128 },
{ 256, TASK_STATE_256 }
) : TASK_STATE_0,
If we could use a general approach for all states, I would immediately
go for your proposal. But since we anyway need to define the states
individually, I would vote for the current version of the patch.
Or would you prefer to simply apply a minimal fix to correct the
erroneous output of the sched_switch event and to leave the rest as an
exercise for the future?
Carsten.
[-- Attachment #2: fix-just-task-states-in-sched_switch-event.patch --]
[-- Type: text/plain, Size: 604 bytes --]
---
include/trace/events/sched.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Index: head/include/trace/events/sched.h
===================================================================
--- head.orig/include/trace/events/sched.h
+++ head/include/trace/events/sched.h
@@ -151,7 +151,7 @@ TRACE_EVENT(sched_switch,
__print_flags(__entry->prev_state, "|",
{ 1, "S"} , { 2, "D" }, { 4, "T" }, { 8, "t" },
{ 16, "Z" }, { 32, "X" }, { 64, "x" },
- { 128, "W" }) : "R",
+ { 128, "K" }, { 256, "W" }) : "R",
__entry->next_comm, __entry->next_pid, __entry->next_prio)
);
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/1] fix-task-states-in-sched_switch-event.patch
2010-05-17 15:21 ` Carsten Emde
@ 2010-05-17 16:54 ` Peter Zijlstra
2010-05-17 17:27 ` Carsten Emde
0 siblings, 1 reply; 6+ messages in thread
From: Peter Zijlstra @ 2010-05-17 16:54 UTC (permalink / raw)
To: Carsten Emde
Cc: LKML, Ingo Molnar, Steven Rostedt, Andrew Morton,
Frederic Weisbecker
On Mon, 2010-05-17 at 17:21 +0200, Carsten Emde wrote:
> > Since we all love vile macro magic, is the below any better?
> >
> > include/linux/task_states.h
> >
> > TASK_STATE(RUNNING, "R", "running")
> > TASK_STATE(INTERRUPTIBLE, "S", "sleeping")
> > ...
> Well, yes, this looks very nice and is perfectly readable and
> maintainable.
>
> > enum {
> > #define TASK_STATE(tstate, tstate_c, tstate_s) __TASK_##tstate,
> > #include<linux/task_states.h>
> > #undef TASK_STATE
> > };
> >
> > enum {
> > #define TASK_STATE(tstate, tstate_c, tstate_s) \
> > TASK_##tstate = 1<< __TASK_##tstate,
> > #include<linux/task_states.h>
> > #undef TASK_STATE
> > };
> >
> > const char *task_state_to_char =
> > #define TASK_STATE(tstate, tstate_c, tstate_s) tstate_c
> > #include<linux/task_states.h>
> > #undef TASK_STATE
> > ;
> >
> > const char *task_state_to_string[] = {
> > #define TASK_STATE(tstate, tstate_c, tstate_s) tstate_s,
> > #include<linux/task_states.h>
> > #undef TASK_STATE
> > };
> I find this section less convincing (although certainly
> indistinguishable from magic).
>
> In addition, we need to take care of the various state name prefixes
> TASK, __TASK and EXIT and name clashes:
> TASK_RUNNING
> TASK_INTERRUPTIBLE
> TASK_UNINTERRUPTIBLE
> __TASK_STOPPED
> __TASK_TRACED
> EXIT_ZOMBIE
> EXIT_DEAD
> TASK_DEAD
> TASK_WAKEKILL
> TASK_WAKING
We could manually add:
#define EXIT_ZOMBIE TASK_ZOMBIE
#define EXIT_DEAD TASK_DEAD
But those two __TASK ones are unfortunate indeed.
> And we still need to maintain the defines in include/trace/events/
> sched.h:
> { 1, TASK_STATE_1 } , { 2, TASK_STATE_2 },
> { 4, TASK_STATE_4 }, { 8, TASK_STATE_8 },
> { 16, TASK_STATE_16 }, { 32, TASK_STATE_32 },
> { 64, TASK_STATE_64 }, { 128, TASK_STATE_128 },
> { 256, TASK_STATE_256 }
> ) : TASK_STATE_0,
#define TASK_STATE(tstate, tstate_c, tstate_s) \
{ __TASK_##tstate, tstate_c },
#include <linux/task_state.h>
#undef TASK_STATE
Should get you mostly there I guess, trick would be making the user deal
with { 0, "R" }
> If we could use a general approach for all states, I would immediately
> go for your proposal. But since we anyway need to define the states
> individually, I would vote for the current version of the patch.
>
> Or would you prefer to simply apply a minimal fix to correct the
> erroneous output of the sched_switch event and to leave the rest as an
> exercise for the future?
Dunno, I guess we can do with your version, just wanted to mention this
method.
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 1/1] fix-task-states-in-sched_switch-event.patch
2010-05-17 16:54 ` Peter Zijlstra
@ 2010-05-17 17:27 ` Carsten Emde
0 siblings, 0 replies; 6+ messages in thread
From: Carsten Emde @ 2010-05-17 17:27 UTC (permalink / raw)
To: Peter Zijlstra
Cc: LKML, Ingo Molnar, Steven Rostedt, Andrew Morton,
Frederic Weisbecker
On 05/17/2010 06:54 PM, Peter Zijlstra wrote:
> On Mon, 2010-05-17 at 17:21 +0200, Carsten Emde wrote:
>
>>> Since we all love vile macro magic, is the below any better?
>>>
>>> include/linux/task_states.h
>>>
>>> TASK_STATE(RUNNING, "R", "running")
>>> TASK_STATE(INTERRUPTIBLE, "S", "sleeping")
>>> ...
>> Well, yes, this looks very nice and is perfectly readable and
>> maintainable.
>>
>>> enum {
>>> #define TASK_STATE(tstate, tstate_c, tstate_s) __TASK_##tstate,
>>> #include<linux/task_states.h>
>>> #undef TASK_STATE
>>> };
>>>
>>> enum {
>>> #define TASK_STATE(tstate, tstate_c, tstate_s) \
>>> TASK_##tstate = 1<< __TASK_##tstate,
>>> #include<linux/task_states.h>
>>> #undef TASK_STATE
>>> };
>>>
>>> const char *task_state_to_char =
>>> #define TASK_STATE(tstate, tstate_c, tstate_s) tstate_c
>>> #include<linux/task_states.h>
>>> #undef TASK_STATE
>>> ;
>>>
>>> const char *task_state_to_string[] = {
>>> #define TASK_STATE(tstate, tstate_c, tstate_s) tstate_s,
>>> #include<linux/task_states.h>
>>> #undef TASK_STATE
>>> };
>> I find this section less convincing (although certainly
>> indistinguishable from magic).
>>
>> In addition, we need to take care of the various state name prefixes
>> TASK, __TASK and EXIT and name clashes:
>> TASK_RUNNING
>> TASK_INTERRUPTIBLE
>> TASK_UNINTERRUPTIBLE
>> __TASK_STOPPED
>> __TASK_TRACED
>> EXIT_ZOMBIE
>> EXIT_DEAD
>> TASK_DEAD
>> TASK_WAKEKILL
>> TASK_WAKING
>
> We could manually add:
>
> #define EXIT_ZOMBIE TASK_ZOMBIE
> #define EXIT_DEAD TASK_DEAD
>
> But those two __TASK ones are unfortunate indeed.
>
>> And we still need to maintain the defines in include/trace/events/
>> sched.h:
>> { 1, TASK_STATE_1 } , { 2, TASK_STATE_2 },
>> { 4, TASK_STATE_4 }, { 8, TASK_STATE_8 },
>> { 16, TASK_STATE_16 }, { 32, TASK_STATE_32 },
>> { 64, TASK_STATE_64 }, { 128, TASK_STATE_128 },
>> { 256, TASK_STATE_256 }
>> ) : TASK_STATE_0,
>
> #define TASK_STATE(tstate, tstate_c, tstate_s) \
> { __TASK_##tstate, tstate_c },
> #include<linux/task_state.h>
> #undef TASK_STATE
>
> Should get you mostly there I guess, trick would be making the user deal
> with { 0, "R" }
>
>> If we could use a general approach for all states, I would immediately
>> go for your proposal. But since we anyway need to define the states
>> individually, I would vote for the current version of the patch.
>>
>> Or would you prefer to simply apply a minimal fix to correct the
>> erroneous output of the sched_switch event and to leave the rest as an
>> exercise for the future?
>
> Dunno, I guess we can do with your version, just wanted to mention this
> method.
Yes, thanks, your method is great - much better than using intermediate
scripts and similar. However, this approach works best, if you start
with a new design and you are free to arrange everything to build on
it. At least, we should have this approach in mind when making upgrade
changes in the related code - maybe, your method will fit better one
day.
Carsten.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2010-05-17 17:29 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-16 22:18 [PATCH 0/1] tracing/sched: Fix task states in sched_switch event Carsten Emde
2010-05-16 22:18 ` [PATCH 1/1] fix-task-states-in-sched_switch-event.patch Carsten Emde
2010-05-17 12:22 ` Peter Zijlstra
2010-05-17 15:21 ` Carsten Emde
2010-05-17 16:54 ` Peter Zijlstra
2010-05-17 17:27 ` Carsten Emde
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox