[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] dom0 and apicid not equal to cpuid
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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |