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

[Xen-changelog] [linux-2.6.18-xen] CPUIDLE: DOM0, enable C1 FFH

# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1225373683 0
# Node ID 2fb13b8cbe134fdb3f18ee21e641e52655066c62
# Parent  ac9a6209c679196a9ec1ff21d964258f36be439d
CPUIDLE: DOM0, enable C1 FFH

Get C1 info from acpi table and pass it to Xen. It is partially
backported from below kernel commit:

commit 991528d7348667924176f3e29addea0675298944
Author: Venkatesh Pallipadi <venkatesh.pallipadi@xxxxxxxxx>
Date:   Mon Sep 25 16:28:13 2006 -0700

    ACPI: Processor native C-states using MWAIT

    Intel processors starting with the Core Duo support
    support processor native C-state using the MWAIT instruction.
    Refer: Intel Architecture Software Developer's Manual

    Platform firmware exports the support for Native C-state to OS
    ACPI _PDC and _CST methods.
    Refer: Intel Processor Vendor-Specific ACPI: Interface

    With Processor Native C-state, we use 'MWAIT' instruction on the
    to enter different C-states (C1, C2, C3).  We won't use the
    special IO
    ports to enter C-state and no SMM mode etc required to enter
    Overall this will mean better C-state support.

    One major advantage of using MWAIT for all C-states is, with this
    and "treat interrupt as break event" feature of MWAIT, we can now get
    accurate timing for the time spent in C1, C2, ..  states.

    Signed-off-by: Venkatesh Pallipadi <venkatesh.pallipadi@xxxxxxxxx>
    Signed-off-by: Andrew Morton <akpm@xxxxxxxx>
    Signed-off-by: Len Brown <len.brown@xxxxxxxxx>

Signed-off-by: Wei Gang <gang.wei@xxxxxxxxx>
 drivers/acpi/processor_idle.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff -r ac9a6209c679 -r 2fb13b8cbe13 drivers/acpi/processor_idle.c
--- a/drivers/acpi/processor_idle.c     Thu Oct 30 13:18:07 2008 +0000
+++ b/drivers/acpi/processor_idle.c     Thu Oct 30 13:34:43 2008 +0000
@@ -654,7 +654,7 @@ static int acpi_processor_get_power_info
        if (nocst)
                return -ENODEV;
-       current_count = 1;
+       current_count = 0;
        /* Zero initialize C2 onwards and prepare for fresh CST lookup */
        for (i = 2; i < ACPI_PROCESSOR_MAX_POWER; i++)
@@ -728,13 +728,17 @@ static int acpi_processor_get_power_info
                cx.type = obj->integer.value;
+               /*
+                * Some buggy BIOSes won't list C1 in _CST -
+                * Let acpi_processor_get_power_info_default() handle them later
+                */
+               if (i == 1 && cx.type != ACPI_STATE_C1)
+                       current_count++;
                /* Following check doesn't apply to external control case */
                if (!processor_pm_external() &&
                    (cx.type != ACPI_STATE_C1) &&
                    (reg->space_id != ACPI_ADR_SPACE_SYSTEM_IO))
-                       continue;
-               if ((cx.type < ACPI_STATE_C2) || (cx.type > ACPI_STATE_C3))
                obj = (union acpi_object *)&(element->package.elements[2]);

Xen-changelog mailing list



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