From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Mark Langsdorf" Subject: Re: dom0 and apicid not equal to cpuid Date: Thu, 14 Feb 2008 16:16:39 -0600 Message-ID: <200802141616.39410.mark.langsdorf@amd.com> References: Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Keir Fraser Cc: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org On Friday 08 February 2008, Keir Fraser wrote: > On 8/2/08 21:19, "Keir Fraser" 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 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))