cx_lowest and CPU usage

Andriy Gapon avg at icyb.net.ua
Thu Feb 14 09:09:35 UTC 2008


on 13/02/2008 18:56 Andriy Gapon said the following:
> on 11/02/2008 23:33 Andriy Gapon said the following:
>> Hmm, it seems that the quirk is only honored if you actually try to use
>> C3 state, but it doesn't exclude the state from the available states.
>> This is OK, but seems to be a little bit non-user-friendly.
>>
> 
> 
> It seems that the following code in acpi_cpu_generic_cx_probe() should
> have a check for the quirk (for C3 to not be present in the available
> states):
> 
> /* Validate and allocate resources for C3 (P_LVL3). */
> if (AcpiGbl_FADT->Plvl3Lat <= 1000) {
>     gas.Address = sc->cpu_p_blk + 5;
>     acpi_bus_alloc_gas(sc->cpu_dev, &cx_ptr->res_type, &sc->cpu_rid, &gas,
>         &cx_ptr->p_lvlx, RF_SHAREABLE);
>     if (cx_ptr->p_lvlx != NULL) {
>         sc->cpu_rid++;
>         cx_ptr->type = ACPI_STATE_C3;
>         cx_ptr->trans_lat = AcpiGbl_FADT->Plvl3Lat;
>         cx_ptr++;
>         sc->cpu_cx_count++;
>     }
> }
> 
> I will test this hypothesis tonight.
> It is definite that my system goes through this routine, because DSDT
> doesn't have _CST defined.
> 
> 

The following patch did help to eliminate C3 from cx_supported.
Sorry, the patch is a copy/paste, tabs lost, but the change is tiny.

@@ -590,7 +595,7 @@
        return;

     /* Validate and allocate resources for C3 (P_LVL3). */
-    if (AcpiGbl_FADT.C3Latency <= 1000) {
+    if (AcpiGbl_FADT.C3Latency <= 1000 && (cpu_quirks &
CPU_QUIRK_NO_C3) == 0) {
        gas.Address = sc->cpu_p_blk + 5;
        acpi_bus_alloc_gas(sc->cpu_dev, &cx_ptr->res_type, &sc->cpu_rid,
&gas,
            &cx_ptr->p_lvlx, RF_SHAREABLE);


-- 
Andriy Gapon


More information about the freebsd-acpi mailing list