Help Identifying Point Of Failure: setup_local_APIC(void)

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

Help Identifying Point Of Failure: setup_local_APIC(void)

John L. Poole
I am trying to isolate the point of failure during the loading of the
Xen kernel
on my Supermicro Atom board using Gentoo.  I've recently posted details
in other postings
to [xen-users].

I created a patch of apic.c and smpboot.c  to help with this effort.
The patch is at:

A log of a session where the kernel hangs after masking the 5th CPU
(there should be 7 masked) is at:
See lines 192-163.

(The pastebins are live for 30 days.)

My debugging shows that the function setup_local_APIC(void) completes
its task.
So the failure is occurring at a higher level. setup_local_APIC(void)
starts at line 524 and ends at line 691.
(Note, my patched version is from Gentoo's 4.11.1-rc1 and
has slightly different numbering since I added some lines.)

Here is a link to the function in apic.c:;a=blob;f=xen/arch/x86/apic.c;h=2a2432619e3edce2cdbc275abbd4e80ffcdcd9f0;hb=HEAD#l524

I tried to isolate the steps up to calling function setup_local_APIC,
but my lack of knowledge of programming in C and using macros
is preventing me from completely identifying the point of failure.

I tried to determine where  setup_local_APIC  is called from
and inserted print statements in smpboot.c

# find . -type f |xargs grep -n setup_local_APIC
./xen/arch/x86/apic.c:523:void setup_local_APIC(void)
./xen/arch/x86/apic.c:1402:    setup_local_APIC();
./xen/arch/x86/smpboot.c:192:    Dprintk("CALLIN, before
./xen/arch/x86/smpboot.c:194:    setup_local_APIC();
./xen/arch/x86/smpboot.c:1157:    setup_local_APIC();
./xen/include/asm-x86/apic.h:177:extern void setup_local_APIC (void);
/mnt/extra/portagetemp/portage/app-emulation/xen-4.11.1-r1/work/xen-4.11.1 #

However, there looks to be some sort of hook in apic.h;a=blob;f=xen/include/asm-x86/mach-default/smpboot_hooks.h;h=14e1ee52a37d3bd779f9933047724124bfe6fd2d;hb=HEAD#l39 

I am assuming that "setup_local_APIC()" is the same call to the same
as "setup_local_APIC(void)" and that these are two different way of
calling the same function.

Can someone help me by pointing  me to the code that operates after the
of setup_local_APIC(void).  It appears setup_local_APIC(void) is called
in an iterative
fashion to loop through all the remaining CPUs, and I do not seem to be
able to find
that loop point if there is one.  Or is there some sort of callback that
loops automatically?

Thank you.

Email Rider

John Laurence Poole

Xen-users mailing list
[hidden email]