I have tested your new solution and, as expected, it solves the problems I see. Thanks. Jan Jan Karlsson Senior Software Engineer MIB Sony Mobile Communications Tel: +46703062174 sonymobile.com -----Original Message----- From: crash-utility-bounces@xxxxxxxxxx [mailto:crash-utility-bounces@xxxxxxxxxx] On Behalf Of Dave Anderson Sent: torsdag den 12 juli 2012 16:56 To: Discussion list for crash utility usage, maintenance and development Subject: Re: Problem in runq command ----- 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 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility