[Crash-utility] [patch] crash on a KVM-generated dump

Sami Liedes sliedes at cc.hut.fi
Fri Oct 8 14:07:31 UTC 2010


On Fri, Oct 08, 2010 at 09:31:02AM -0400, Dave Anderson wrote:
> I don't think that this is associated with KVM, but rather the kernel
> version used.  It should be pretty easy to debug on your end, because it
> boils down to these initializations at the top of x86_64_per_cpu_init()
>
>         irq_sp = per_cpu_symbol_search("per_cpu__irq_stack_union");
>         cpu_sp = per_cpu_symbol_search("per_cpu__cpu_number");
>
> If it's a UP kernel, and if "irq_sp" does not get set, then isize would
> be left uninitialized.

It's a uniprocessor amd64 kernel. Neither irq_sp nor cpu_sp get set.

I have

crash> sym irq_stack_union
ffffffff81a1c000 (D) irq_stack_union
crash> sym cpu_number
symbol not found: cpu_number

It's not accepted by per_cpu_symbol_search() because its type is not
'V' and because it's not between __per_cpu_start and __per_cpu_end.
__per_cpu_start and __per_cpu_end are the same; I don't know if
there's something wrong with that.

(gdb) b x86_64_per_cpu_init
Breakpoint 1 at 0x4eb49c: file x86_64.c, line 823.
(gdb) r
[...]
Breakpoint 1, x86_64_per_cpu_init () at x86_64.c:823
823             ms = machdep->machspec;
(gdb) n
825             irq_sp = per_cpu_symbol_search("per_cpu__irq_stack_union");
(gdb) s
per_cpu_symbol_search (symbol=0x8a46d7 "per_cpu__irq_stack_union") at symbols.c:4106
4106            if (STRNEQ(symbol, "per_cpu__")) {
(gdb) n
4107                    if ((sp = symbol_search(symbol)))
(gdb)
4109                    new = symbol + strlen("per_cpu__");
(gdb)
4110                    if ((sp = symbol_search(new))) {
(gdb) print new
$1 = 0x8a46e0 "irq_stack_union"
(gdb) n
4111                            if ((sp->type == 'V') ||
(gdb) l
4106            if (STRNEQ(symbol, "per_cpu__")) {
4107                    if ((sp = symbol_search(symbol)))
4108                            return sp;
4109                    new = symbol + strlen("per_cpu__");
4110                    if ((sp = symbol_search(new))) {
4111                            if ((sp->type == 'V') ||
4112                                ((sp->value >= st->__per_cpu_start) &&
4113                                (sp->value < st->__per_cpu_end)))
4114                                    return sp;
4115                    }
(gdb) print sp->type
$2 = 68 'D'
(gdb) print sp->value
$3 = 18446744071589445632
(gdb) p/x sp->value
$4 = 0xffffffff81a1c000
(gdb) p/x st->__per_cpu_start
$5 = 0xffffffff81ae7000
(gdb) p/x st->__per_cpu_end
$6 = 0xffffffff81ae7000

	Sami
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20101008/c9747594/attachment.sig>


More information about the Crash-utility mailing list