----- Original Message -----
On the kernel with CONFIG_RT_GROUP_SCHED=n, the "RT
PRIO_ARRAY" table of runq
command always empty, nevertheless exists "rt_sched_class" task.
This cause to substract offset "task_struct->rt - task_struct" only if there
is
my_q member (ie. CONFIG_RT_GROUP_SCHED=y). Therefore dump_RT_prio_array()
passes the address of "rt member of task_struct" to task_to_context().
This patch ensure to pass the address of "task_struct" to task_to_context().
But moving the task_addr assignment down to where you have placed it will
not work when OFFSET(task_struct_rt) is invalid. Look above the for loop,
where it has this:
if (VALID_MEMBER(task_struct_rt) &&
VALID_MEMBER(sched_rt_entity_run_list))
ld->list_head_offset = OFFSET(sched_rt_entity_run_list);
else
ld->list_head_offset = OFFSET(task_struct_run_list);
So it looks like it should be:
+ if (VALID_MEMBER(task_struct_rt)
+ task_addr -= OFFSET(task_struct_rt);
+ else
+ task_addr -= (task_struct_run_list);
And BTW, what does the failure look like?
Thanks,
Dave
---
task.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/task.c b/task.c
index 147ff5c..50c82c8 100644
--- a/task.c
+++ b/task.c
@@ -8688,9 +8688,9 @@ dump_RT_prio_array(ulong k_prio_array, char
*u_prio_array)
&rt_rq_buf[OFFSET(rt_rq_active)]);
FREEBUF(rt_rq_buf);
continue;
- } else
- task_addr -= OFFSET(task_struct_rt);
+ }
}
+ task_addr -= OFFSET(task_struct_rt);
if (!(tc = task_to_context(task_addr)))
continue;
--
1.9.1
--
Crash-utility mailing list
Crash-utility(a)redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility