Merge tag 'acpi-5.13-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
Pull ACPI fixes from Rafael Wysocki:
"These revert a problematic recent commit and fix a regression
introduced during the 5.12 development cycle.
Specifics:
- Revert recent commit that attempted to fix the FACS table reference
counting but introduced a problem with accessing the hardware
signature after hibernation (Zhang Rui).
- Fix regression in the _OSC handling that broke the loading of ACPI
tables on some systems (Mika Westerberg)"
* tag 'acpi-5.13-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
ACPI: Pass the same capabilities to the _OSC regardless of the query flag
Revert "ACPI: sleep: Put the FACS table after using it"
This commit is contained in:
@@ -330,32 +330,21 @@ static void acpi_bus_osc_negotiate_platform_control(void)
|
|||||||
if (ACPI_FAILURE(acpi_run_osc(handle, &context)))
|
if (ACPI_FAILURE(acpi_run_osc(handle, &context)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
capbuf_ret = context.ret.pointer;
|
|
||||||
if (context.ret.length <= OSC_SUPPORT_DWORD) {
|
|
||||||
kfree(context.ret.pointer);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Now run _OSC again with query flag clear and with the caps
|
|
||||||
* supported by both the OS and the platform.
|
|
||||||
*/
|
|
||||||
capbuf[OSC_QUERY_DWORD] = 0;
|
|
||||||
capbuf[OSC_SUPPORT_DWORD] = capbuf_ret[OSC_SUPPORT_DWORD];
|
|
||||||
kfree(context.ret.pointer);
|
kfree(context.ret.pointer);
|
||||||
|
|
||||||
|
/* Now run _OSC again with query flag clear */
|
||||||
|
capbuf[OSC_QUERY_DWORD] = 0;
|
||||||
|
|
||||||
if (ACPI_FAILURE(acpi_run_osc(handle, &context)))
|
if (ACPI_FAILURE(acpi_run_osc(handle, &context)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
capbuf_ret = context.ret.pointer;
|
capbuf_ret = context.ret.pointer;
|
||||||
if (context.ret.length > OSC_SUPPORT_DWORD) {
|
osc_sb_apei_support_acked =
|
||||||
osc_sb_apei_support_acked =
|
capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_APEI_SUPPORT;
|
||||||
capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_APEI_SUPPORT;
|
osc_pc_lpi_support_confirmed =
|
||||||
osc_pc_lpi_support_confirmed =
|
capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_PCLPI_SUPPORT;
|
||||||
capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_PCLPI_SUPPORT;
|
osc_sb_native_usb4_support_confirmed =
|
||||||
osc_sb_native_usb4_support_confirmed =
|
capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_NATIVE_USB4_SUPPORT;
|
||||||
capbuf_ret[OSC_SUPPORT_DWORD] & OSC_SB_NATIVE_USB4_SUPPORT;
|
|
||||||
}
|
|
||||||
|
|
||||||
kfree(context.ret.pointer);
|
kfree(context.ret.pointer);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1009,10 +1009,8 @@ static void acpi_sleep_hibernate_setup(void)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
acpi_get_table(ACPI_SIG_FACS, 1, (struct acpi_table_header **)&facs);
|
acpi_get_table(ACPI_SIG_FACS, 1, (struct acpi_table_header **)&facs);
|
||||||
if (facs) {
|
if (facs)
|
||||||
s4_hardware_signature = facs->hardware_signature;
|
s4_hardware_signature = facs->hardware_signature;
|
||||||
acpi_put_table((struct acpi_table_header *)facs);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#else /* !CONFIG_HIBERNATION */
|
#else /* !CONFIG_HIBERNATION */
|
||||||
static inline void acpi_sleep_hibernate_setup(void) {}
|
static inline void acpi_sleep_hibernate_setup(void) {}
|
||||||
|
|||||||
Reference in New Issue
Block a user