[Crash-utility] Problem with "xm save" x86-64 cores -crash.4.0-3.5

Dave Anderson anderson at redhat.com
Wed Oct 4 19:14:55 UTC 2006


Tejasvi Aswathanarayana wrote:

> > So, for starters, can you display how "pid_hash" is
> > declared in your kernel?
> >
> static struct hlist_head *pid_hash[PIDTYPE_MAX];
>
> > This is the code sequence in task_init() that selects
> > refresh_hlist_task_table() or refresh_hlist_task_table_v2():
> >
> >       } else {
> >               tt->pidhash_addr = symbol_value("pid_hash");
> >               if (!get_array_length("pid_hash", NULL, sizeof(void *)) &&
> >                   VALID_STRUCT(pid_link))
> >                       tt->refresh_task_table = refresh_hlist_task_table_v2;
> >               else
> >                       tt->refresh_task_table = refresh_hlist_task_table;
> >       }
>
> Yes, refresh_hlist_task_table is being selected, but because the "if"
> clause itself was failing.
>
> get_array_length("pid_hash",...)  = 1
> VALID_STRUCT(pid_link)  = 0
> VALID_MEMBER(pid_link_pid) = 0
> VALID_MEMBER(pid_hash_chain)) = 0
>
>         if (VALID_MEMBER(pid_link_pid) && VALID_MEMBER(pid_hash_chain)) {
>                         get_symbol_data("pid_hash", sizeof(ulong), &tt->pidhash_addr);
>                         tt->refresh_task_table = refresh_pid_hash_task_table;
>         } else {
>
> > Alternatively, if you want to make the vmlinux/dumpfile pair
> > available to me, I can take a look at it.
> Thanks, I will see how I can get you the files.
>
> > Another thing to check -- there are two places that print that
> > "cannot determine..." error message.  Can you verify that it's
> > happening in refresh_hlist_task_table()?  That's where the
> > previous reporter said that it happened on his system, but I
> > just want to make absolutely sure.
>
> I confirmed that the error message "crash: cannot determine pid_hash
> array dimensions " was  from the refresh_hlist_task_table() function
>

Very strange -- on two counts...

You're showing that get_array_length("pid_hash", ...) is returning 1,
whereas I'm presuming that the PIDTYPE_MAX enum would be equal
to 4.  That I don't understand...

And then, the error message in refresh_hlist_task_table() is subsequently
triggered because the same get_array_length() call returns a zero:

        if (!(plen = get_array_length("pid_hash", NULL, sizeof(void *))))
                error(FATAL, "cannot determine pid_hash array dimensions\n");

and so I'm sure I don't understand that either...

BTW, what the other guy did was to hardwire "plen" above to 4 (I presume he
used 4) and things worked OK.  Does that hack work with your dumpfile?

Anyway, please try to make the vmlinux/dumpfile pair available for download,
as I'd really like to tinker with them...

Dave

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20061004/7ec7da82/attachment.htm>


More information about the Crash-utility mailing list