[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] dom0 and apicid not equal to cpuid

On Friday 08 February 2008, Keir Fraser wrote:
> On 8/2/08 21:19, "Keir Fraser" <Keir.Fraser@xxxxxxxxxxxx> wrote:
> >> I know some of the code needs to be added to mpparse-xen.c,
> >> but it looks like the relevant code was #ifdef'd out in
> >> the first place.  Does anyone know why the code to match
> >> cpuids to apicids was removed and what would need to be
> >> done to restore it?
> > 
> > Probably most of the things that depend on it are actually managed by Xen
> > itself. Possibly this assumption is wrong and the code needs to be re-added,
> > or perhaps the problem is actually within Xen?
> > 
> > Can you point out the specific troubling code in our Linux tree (e.g., the
> > specific #if0'ed code, and also the place where the kernel ultimately gets
> > confused and the request fails)?
> Also, a link to the upstream patch, or area of code in an upstream kernel,
> that you think needs to be added would be useful too.

Simpler solution that the one I proposed above: Fix the APIC to ACPI mappings
in drivers/xen/core/smpboot.c.  That doesn't require pinning vcpus or knowing
about the underlying APIC/ACPI/CPU ID interaction.  

Patch for this solution below:

Xen dom0 arbitrarily assigns APIC ID x to CPU ID x.  Make dom0 also assign
the APIC ID to ACPI ID mapping in the same way.

Signed-off-by: Mark Langsdorf <mark.langsdorf@xxxxxxx>

diff -r 08e85e79c65d drivers/xen/core/smpboot.c
--- a/drivers/xen/core/smpboot.c        Mon Feb 11 11:05:27 2008 +0000
+++ b/drivers/xen/core/smpboot.c        Thu Feb 14 16:12:41 2008 -0600
@@ -269,6 +269,7 @@ void __init smp_prepare_cpus(unsigned in
        cpu_2_logical_apicid[0] = 0;
        x86_cpu_to_apicid[0] = 0;
+       x86_acpiid_to_apicid[0] = 0;
        current_thread_info()->cpu = 0;
@@ -317,6 +318,7 @@ void __init smp_prepare_cpus(unsigned in
                cpu_2_logical_apicid[cpu] = cpu;
                x86_cpu_to_apicid[cpu] = cpu;
+               x86_acpiid_to_apicid[cpu] = cpu;
                idle = fork_idle(cpu);
                if (IS_ERR(idle))

Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.