|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [Xen-devel] [PATCH]ACPI: re-enable mwait for xen cpuidle
On Tuesday, 2010-4-6 2:31 AM, Jeremy Fitzhardinge wrote:
>
> I had a closer look at the code, and I don't really understand it:
>
> if (acpi_processor_ffh_cstate_probe
> (pr->id,&cx, reg) == 0) {
> cx.entry_method = ACPI_CSTATE_FFH;
> [1] } else if (cx.type == ACPI_STATE_C1) {
> /*
> * C1 is a special case where FIXED_HARDWARE
> * can be handled in non-MWAIT way as well.
> * In that case, save this _CST entry info.
> * Otherwise, ignore this info and continue.
> */
> [2] cx.entry_method = ACPI_CSTATE_HALT;
> [3] snprintf(cx.desc, ACPI_CX_DESC_LEN, "ACPI HLT");
> } else {
> continue;
> }
> [4] if (cx.type == ACPI_STATE_C1&&
> (idle_halt || idle_nomwait)) {
> /*
> * In most cases the C1 space_id obtained from
> * _CST object is FIXED_HARDWARE access mode.
> * But when the option of idle=halt is added,
> * the entry_method type should be changed from
> * CSTATE_FFH to CSTATE_HALT.
> * When the option of idle=nomwait is added,
> * the C1 entry_method type should be
> * CSTATE_HALT.
> */
> [5] cx.entry_method = ACPI_CSTATE_HALT;
> [6] snprintf(cx.desc, ACPI_CX_DESC_LEN, "ACPI HLT");
> }
>
>
> What's the if() at [1] doing? If it succeeds, then it does [2,3] then
> falls into [4], which does the same test as [1] but also checks for
> idle_halt || idle_nomwait and then performs [5,6] which looks
> identical to [2,3]. It all seems a bit excessively convoluted, so
> I'm not quite sure how your patch interacts with this.
Those two if()s do the identical things for different condition.
When the acpi table tells a C-state w/ MWAIT entry method, but this C-state
can't pass the check - no MWAIT feature or this C-state info doesn't conform to
cpuid leaf5 info, then this C-state should be ignored. There is a exception. C1
can always be entered w/ halt instruction, so for C1 just turn back to HALT.
That is the if() at [1] doing.
The if() at [4] just tries to change the C1 entry_method to HALT if either
option 'idle=halt' or 'idle=nomwait' is specified even if the h/w really
support MWAIT.
My patch just ensure all row info in reg can be cached and passed to Xen. The
change to cx.entry_method doesn't impact my patch. The dom0 option 'idle=halt'
and 'idle=nomwait' should not be used. Xen cpuidle should be controlled by Xen
itself, all we did in dom0 is trying to get the completed acpi cstate info.
Jimmy
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |