Dave Anderson <anderson(a)redhat.com> writes:
> [BTW, current x86_get_pc() uses inactive_task_frame_ret_addr to
get
> pc. However, inactive_task_frame is only valid if task is sleeping
> state. (running task may overwrite inactive_task_frame already.) I'm
> not sure whether we should check is_task_active() or not. Even if
> checking is_task_active(), we can't get pc correctly anyway.]
Well, x86_get_pc() should only be called in the case of sleeping
tasks because each dumpfile type has its own function to try to
find the active task registers. For example, on a kdump:
cmd_bt()
back_trace()
get_kdump_regs()
get_netdump_regs()
get_netdump_regs_x86()
get_netdump_regs_x86() *should* find the starting point hooks.
If it fails to do so, it will default to machdep->get_stack_frame()
and ultimately x86_get_pc(). So if it gets there, the backtrace
is pretty much guaranteed to be invalid.
Ah, this might be because of the above hardirq_tasks[] bug.
Thanks.
--
OGAWA Hirofumi <hirofumi(a)mail.parknet.co.jp>