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

Re: [Xen-devel] expose MWAIT to dom0



On Mon, Aug 15, 2011 at 09:02:29AM +0100, Jan Beulich wrote:
> >>> On 15.08.11 at 07:35, "Tian, Kevin" <kevin.tian@xxxxxxxxx> wrote:
> > There're basically two methods to enter a given C-state: legacy (hlt + I/O 
> > read),
> > and native(using mwait). MWAIT is always preferred when both underlying CPU
> > and OS support, which is a more efficient way to conduct C-state transition.
> > 
> > Xen PM relies on Dom0 to parse ACPI Cx/Px information, which involves one
> > step to notify BIOS about a set of capabilities supported by OSPM. One 
> > capability
> > is about mwait support, which if true ACPI Cx entry contains entry 
> > parameters 
> > for mwait, or else I/O port information is provided. Xen PM later decides 
> > entry
> > method (i/o or mwait) based on parsed ACPI information from dom0.
> > 
> > However Xen doesn't expose MWAIT capability to dom0 due to changeset 17573:
> > 
> > This then brings a problem to Dom0 which thinks underlying CPU
> > doesn't report mwait, and thus notify BIOS to use old I/O based method.
> > 
> > Later a trick is integrated in Jeremy's pvops tree:
> > 
> > --- a/arch/x86/kernel/acpi/processor.c
> > +++ b/arch/x86/kernel/acpi/processor.c
> > @@ -60,7 +60,7 @@ static void init_intel_pdc(struct acpi_processor *pr, 
> > struct cpuinfo_x86 *c)
> >         /*
> >          * If mwait/monitor is unsupported, C2/C3_FFH will be disabled
> >          */
> > -       if (!cpu_has(c, X86_FEATURE_MWAIT))
> > +       if (!cpu_has(c, X86_FEATURE_MWAIT) && !xen_initial_domain())
> >                 buf[2] &= ~(ACPI_PDC_C_C2C3_FFH);
> >  
> >         obj->type = ACPI_TYPE_BUFFER;
> > 
> > Above trick is ugly and error-prone, since it always enable mwait 
> > regardless 
> > of actual CPU capability.
> 
> 3.x (and later 2.6.3x) don't look at the CPUID flag anymore, they just
> check boot_option_idle_override, which is being controlled from the
> command line or enforced for some particular systems based on DMI
> data.

Or in case when running under Xen (dom0):
(arch/x86/xen/setup.c)

428         disable_cpuidle();
429         boot_option_idle_override = IDLE_HALT;

Which ends up calling the xen_safe_halt which does the yield hypercall.

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


 


Rackspace

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