[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] Workings/effectiveness of the xen-acpi-processor driver
On 02.05.2012 18:08, Konrad Rzeszutek Wilk wrote: > On Wed, May 02, 2012 at 05:01:00PM +0200, Stefan Bader wrote: >> On 02.05.2012 00:35, Boris Ostrovsky wrote: >>> On 05/01/2012 04:02 PM, Konrad Rzeszutek Wilk wrote: >>>> On Thu, Apr 26, 2012 at 06:25:28PM +0200, Stefan Bader wrote: >>>>> On 26.04.2012 17:50, Konrad Rzeszutek Wilk wrote: >>>>>> On Wed, Apr 25, 2012 at 03:00:58PM +0200, Stefan Bader wrote: >>>>>>> Since there have been requests about that driver to get backported into >>>>>>> 3.2, I >>>>>>> was interested to find out what or how much would be gained by that. >>>>>>> >>>>>>> The first system I tried was an AMD based one (8 core Opteron >>>>>>> 6128@2GHz). >>>>>>> Which >>>>>>> was not very successful as the drivers bail out of the init function >>>>>>> because the >>>>>>> first call to acpi_processor_register_performance() returns -ENODEV. >>>>>>> There is >>>>>>> some frequency scaling when running without Xen, so I need to do some >>>>>>> more >>>>>>> debugging there. >>> >>> I believe this is caused by the somewhat under-enlightened xen_apic_read(): >>> >>> static u32 xen_apic_read(u32 reg) >>> { >>> return 0; >>> } >>> >>> This results in some data, most importantly boot_cpu_physical_apicid, not >>> being >>> set correctly and, in turn, causes x86_cpu_to_apicid to be broken. >>> >>> On larger AMD systems boot processor is typically APICID=0x20 (I don't have >>> Intel system handy to see how it looks there). >>> >>> As a quick and dirty test you can try: >>> >>> diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c >>> index edc2448..1f78998 100644 >>> --- a/arch/x86/kernel/apic/apic.c >>> +++ b/arch/x86/kernel/apic/apic.c >>> @@ -1781,6 +1781,7 @@ void __init register_lapic_address(unsigned long >>> address) >>> } >>> if (boot_cpu_physical_apicid == -1U) { >>> boot_cpu_physical_apicid = read_apic_id(); >>> + boot_cpu_physical_apicid = 32; >>> apic_version[boot_cpu_physical_apicid] = >>> GET_APIC_VERSION(apic_read(APIC_LVR)); >>> } >>> >>> >>> (Set it to whatever APICID on core0 is, I suspect it won't be zero). >>> >> >> Indeed, when I hack the above id to be 0x10 (as my dmesg tells) most of the >> BIOS >> bug messages are gone and the xen-acpi-processor driver successfully loads >> and >> seems to be switching frequencies ok (just a quick tight loop which made one >> cpu >> go from P4 to P0). > > OK. Can you try the attached patch pls? It should do the same thing > as what the debug patch does - get the _real_ APIC ID from the hypervisor. > (And as bonus it also removes the annoying: > > BIOS bug: APIC version is 0 for CPU 0/0x0, fixing up to 0x10 All the BIOS bug messages are gone from the Intel and the AMD box. Just the AMD box again fails to load the xen-acpi-processor driver. Though it must be a different exit. I had enabled acpi debugging for the modprobe call but this time there is no trace of any acpi messages. > > > diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c > index a8f8844..d816448 100644 > --- a/arch/x86/xen/enlighten.c > +++ b/arch/x86/xen/enlighten.c > @@ -811,7 +811,29 @@ static void xen_io_delay(void) > #ifdef CONFIG_X86_LOCAL_APIC > static u32 xen_apic_read(u32 reg) > { > - return 0; > + struct xen_platform_op op = { > + .cmd = XENPF_get_cpuinfo, > + .interface_version = XENPF_INTERFACE_VERSION, > + .u.pcpu_info.xen_cpuid = 0, > + }; > + int ret = 0; > + > + /* Shouldn't need this as APIC is turned off for PV, and we only > + * get called on the bootup processor. But just in case. */ > + if (!xen_initial_domain() || smp_processor_id()) > + return 0; > + > + if (reg == APIC_LVR) > + return 0x10; > + > + if (reg != APIC_ID) > + return 0; > + > + ret = HYPERVISOR_dom0_op(&op); > + if (ret) > + return 0; > + > + return op.u.pcpu_info.apic_id; > } > > static void xen_apic_write(u32 reg, u32 val) > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel Attachment:
dmesg.xen.4 Attachment:
signature.asc _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |