[CPUFREQ] pcc driver should check for pcch method before calling _OSC
The pcc specification documents an _OSC method that's incompatible with the one defined as part of the ACPI spec. This shouldn't be a problem as both are supposed to be guarded with a UUID. Unfortunately approximately nobody (including HP, who wrote this spec) properly check the UUID on entry to the _OSC call. Right now this could result in surprising behaviour if the pcc driver performs an _OSC call on a machine that doesn't implement the pcc specification. Check whether the PCCH method exists first in order to reduce this probability. Signed-off-by: Matthew Garrett <mjg@redhat.com> Cc: Naga Chumbalkar <nagananda.chumbalkar@hp.com> Signed-off-by: Dave Jones <davej@redhat.com>
This commit is contained in:
Родитель
6f90388ac9
Коммит
47f8bcf362
|
@ -397,13 +397,17 @@ static int __init pcc_cpufreq_probe(void)
|
||||||
struct pcc_memory_resource *mem_resource;
|
struct pcc_memory_resource *mem_resource;
|
||||||
struct pcc_register_resource *reg_resource;
|
struct pcc_register_resource *reg_resource;
|
||||||
union acpi_object *out_obj, *member;
|
union acpi_object *out_obj, *member;
|
||||||
acpi_handle handle, osc_handle;
|
acpi_handle handle, osc_handle, pcch_handle;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
status = acpi_get_handle(NULL, "\\_SB", &handle);
|
status = acpi_get_handle(NULL, "\\_SB", &handle);
|
||||||
if (ACPI_FAILURE(status))
|
if (ACPI_FAILURE(status))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
status = acpi_get_handle(handle, "PCCH", &pcch_handle);
|
||||||
|
if (ACPI_FAILURE(status))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
status = acpi_get_handle(handle, "_OSC", &osc_handle);
|
status = acpi_get_handle(handle, "_OSC", &osc_handle);
|
||||||
if (ACPI_SUCCESS(status)) {
|
if (ACPI_SUCCESS(status)) {
|
||||||
ret = pcc_cpufreq_do_osc(&osc_handle);
|
ret = pcc_cpufreq_do_osc(&osc_handle);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче