Message ID | 20220228181446.1975420-1-mario.limonciello@amd.com |
---|---|
State | Superseded |
Headers | show |
Series | [v3,1/3] ACPI: APEI: Adjust for acpi_run_osc logic changes | expand |
Hi, On Mon, Feb 28, 2022 at 12:14:46PM -0600, Mario Limonciello wrote: > @@ -343,10 +345,34 @@ static void acpi_bus_osc_negotiate_platform_control(void) > if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &handle))) > return; > > - if (ACPI_FAILURE(acpi_run_osc(handle, &context))) > + /* > + * Check if bits were masked, we need to negotiate > + * prevent potential endless loop by limited number of > + * negotiation cycles. > + */ > + for (i = 0; i < 5; i++) { > + status = acpi_run_osc(handle, &context); > + if (ACPI_SUCCESS(status) || status == AE_SUPPORT) { The previous patch says that AE_OK or AE_SUCCESS you need to free the result but here we get AE_SUPPORT and you still do the kfree(). Is that intented? > + capbuf_ret = context.ret.pointer; > + capbuf[OSC_SUPPORT_DWORD] = capbuf_ret[OSC_SUPPORT_DWORD]; > + kfree(context.ret.pointer); > + }
diff --git a/drivers/acpi/apei/apei-base.c b/drivers/acpi/apei/apei-base.c index c7fdb12c3310..f7d1aa687fd9 100644 --- a/drivers/acpi/apei/apei-base.c +++ b/drivers/acpi/apei/apei-base.c @@ -780,6 +780,7 @@ int apei_osc_setup(void) { static u8 whea_uuid_str[] = "ed855e0c-6c90-47bf-a62a-26de0fc5ad5c"; acpi_handle handle; + acpi_status status; u32 capbuf[3]; struct acpi_osc_context context = { .uuid_str = whea_uuid_str, @@ -792,12 +793,12 @@ int apei_osc_setup(void) capbuf[OSC_SUPPORT_DWORD] = 1; capbuf[OSC_CONTROL_DWORD] = 0; - if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &handle)) - || ACPI_FAILURE(acpi_run_osc(handle, &context))) + if (ACPI_FAILURE(acpi_get_handle(NULL, "\\_SB", &handle))) return -EIO; - else { - kfree(context.ret.pointer); - return 0; - } + status = acpi_run_osc(handle, &context); + if (status != AE_SUPPORT && status != AE_OK) + return -EIO; + kfree(context.ret.pointer); + return 0; } EXPORT_SYMBOL_GPL(apei_osc_setup);