WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

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

To: "Keir Fraser" <Keir.Fraser@xxxxxxxxxxxx>
Subject: Re: [Xen-devel] dom0 and apicid not equal to cpuid
From: "Mark Langsdorf" <mark.langsdorf@xxxxxxx>
Date: Wed, 13 Feb 2008 16:52:01 -0600
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Wed, 13 Feb 2008 14:53:00 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <C3D87132.1C623%Keir.Fraser@xxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <C3D87132.1C623%Keir.Fraser@xxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: KMail/1.9.6 (enterprise 20070904.708012)
On Wednesday 13 February 2008, Keir Fraser wrote:
> 
> On 12/2/08 19:09, "Langsdorf, Mark" <mark.langsdorf@xxxxxxx> wrote:
> 
> >> It's fine not to change this case if you don't want to. It
> >> would probably logically belong in a separate patch anyway.
> > 
> > Is there an easy way to get Xen to pass the "cpufreq=dom0-kernel"
> > hypervisor argument onto to the Linux command line?  I can
> > add a separate parament to Linux easily enough, but I'd like it
> > if the end-user didn't need to add it twice.
> 
> I'm happy to fix this aspect myself when I check your patch in.

I'm not exactly sure if this is what you wanted or not, but it's
the minimum patch that resolves the issue on my system and it
should be the correct logic path.

Replace the hard coded values in the dom0_vcpus_pinned case with
with the correct logic to get Xen to do the right thing.

I'm happy to add a platform call if that's what you wanted instead.

-Mark Langsdorf
Operating System Research Center
AMD

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


diff -r 08e85e79c65d arch/x86_64/kernel/setup-xen.c
--- a/arch/x86_64/kernel/setup-xen.c    Mon Feb 11 11:05:27 2008 +0000
+++ b/arch/x86_64/kernel/setup-xen.c    Wed Feb 13 16:39:58 2008 -0600
@@ -107,6 +107,9 @@ DEFINE_PER_CPU(int, nr_multicall_ents);
 /* Raw start-of-day parameters from the hypervisor. */
 start_info_t *xen_start_info;
 EXPORT_SYMBOL(xen_start_info);
+
+int dom0_vcpus_pinned;
+EXPORT_SYMBOL(dom0_vcpus_pinned);
 #endif
 
 /*
@@ -412,6 +415,9 @@ static __init void parse_cmdline_early (
                        skip_ioapic_setup = 0;
                        ioapic_force = 1;
                }
+#else
+               if (fullarg(from, "cpufreq=dom0-kernel") || fullarg(from, 
"pin_dom0_vcpus"))
+                       dom0_vcpus_pinned = 1;
 #endif
                        
                if (!memcmp(from, "mem=", 4))
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        Wed Feb 13 16:39:58 2008 -0600
@@ -70,6 +70,8 @@ unsigned int maxcpus = NR_CPUS;
 unsigned int maxcpus = NR_CPUS;
 #endif
 
+extern int dom0_vcpus_pinned;
+
 void __init prefill_possible_map(void)
 {
        int i, rc;
@@ -267,9 +269,13 @@ void __init smp_prepare_cpus(unsigned in
        boot_cpu_data.apicid = 0;
        cpu_data[0] = boot_cpu_data;
 
-       cpu_2_logical_apicid[0] = 0;
-       x86_cpu_to_apicid[0] = 0;
-
+       if (dom0_vcpus_pinned) {
+               cpu_2_logical_apicid[0] = 4;
+               x86_cpu_to_apicid[0] = 4;
+       } else {
+               cpu_2_logical_apicid[0] = 0;
+               x86_cpu_to_apicid[0] = 0;
+       }
        current_thread_info()->cpu = 0;
 
        for (cpu = 0; cpu < NR_CPUS; cpu++) {
@@ -315,8 +321,13 @@ void __init smp_prepare_cpus(unsigned in
                cpu_data[cpu] = boot_cpu_data;
                cpu_data[cpu].apicid = cpu;
 
-               cpu_2_logical_apicid[cpu] = cpu;
-               x86_cpu_to_apicid[cpu] = cpu;
+               if (dom0_vcpus_pinned) {
+                       cpu_2_logical_apicid[cpu] = cpu + 4;
+                       x86_cpu_to_apicid[cpu] = cpu + 4;
+               } else {
+                       cpu_2_logical_apicid[cpu] = cpu;
+                       x86_cpu_to_apicid[cpu] = cpu;
+               }
 
                idle = fork_idle(cpu);
                if (IS_ERR(idle))



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel