cx_lowest and CPU usage
Nate Lawson
nate at root.org
Fri Feb 15 23:29:14 UTC 2008
Andriy Gapon wrote:
> 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);
>
>
I've reviewed it, this patch is correct.
--
Nate
More information about the freebsd-acpi
mailing list