----- Original Message -----
----- Original Message -----
>
> Hi Dave
>
> I found a problem with the runq command in the function
> dump_CFS_runqueues in task.c. The problem is in:
>
> if (!(rq_sp = per_cpu_symbol_search("per_cpu__runqueues")))
>
> error(FATAL, "per-cpu runqueues does not exist\n");
>
> as that code does not support single core systems. However the rest
> of the function seems to handle single core correctly, so by just
> adding one line:
>
> if (!(rq_sp = per_cpu_symbol_search("per_cpu__runqueues")))
> if (!(rq_sp = symbol_search("runqueues")))
> error(FATAL, "per-cpu runqueues does not exist\n");
>
> the runq command works as it should. Of course the text in the error
> message should also be updated to something more proper.
>
Interesting -- as it turns out, I've only got one sample x86_64 UP
kernel vmcore, and even though it's non-smp, a "per_cpu__runqueues"
symbol exists that points to the single runqueue. But it's a 2.6.31
UP kernel, and per-cpu handling has changed since then.
Anyway I see see the problem with the sample UP 2.6.38 ARM vmcore you
guys sent me, and note that it also breaks the "runq -t" option as well.
But that is also fixable by applying the same patch.
I take that back -- the per_cpu_symbol_search() function should find
the non-percpu symbol and return its syment pointer. And because that
function fails, other command(s) that call per_cpu_symbol_search() will
fail with your vmcore as well. For example, the "timer" command:.
crash> runq
runq: per-cpu runqueues does not exist
crash> timer
timer: zero-size memory allocation! (called from 811c199)
crash>
This doesn't appear to be ARM-specific, but to be safe, the fix I'm
going with is this:
--- ARM_crash-6.0.8/symbols.c.orig
+++ ARM_crash-6.0.8/symbols.c
@@ -4789,6 +4789,9 @@ per_cpu_symbol_search(char *symbol)
if ((sp = symbol_search(new))) {
if ((sp->type == 'V') || (is_percpu_symbol(sp)))
return sp;
+ if ((sp->type == 'd') &&
+ (st->__per_cpu_start == st->__per_cpu_end))
+ return sp;
}
} else {
if ((sp = symbol_search(symbol))) {
Dave