mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-30 14:33:24 -04:00
ACPI: bus: Avoid confusing complaints regarding missing _OSC features
The platform firmware on some platforms sets OSC_CAPABILITIES_MASK_ERROR in _OSC error bits even though it actually acknowledges all of the requested features which after commite5322888e6("ACPI: bus: Rework the handling of \_SB._OSC platform features") causes the kernel to complain unnecessarily. Avoid the confusing complaints by explicitly checking for that case in acpi_osc_handshake(). Fixes:e5322888e6("ACPI: bus: Rework the handling of \_SB._OSC platform features") Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Tested-by: Saverio Miroddi <saverio.pub2@gmail.com> [ rjw: Fixed a typo in the new comment ] Link: https://patch.msgid.link/6315683.lOV4Wx5bFT@rafael.j.wysocki Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
@@ -335,7 +335,7 @@ static int acpi_osc_handshake(acpi_handle handle, const char *uuid_str,
|
||||
.length = bufsize * sizeof(u32),
|
||||
};
|
||||
struct acpi_buffer output;
|
||||
u32 *retbuf, test;
|
||||
u32 *retbuf, test, errors;
|
||||
guid_t guid;
|
||||
int ret, i;
|
||||
|
||||
@@ -395,10 +395,18 @@ static int acpi_osc_handshake(acpi_handle handle, const char *uuid_str,
|
||||
* Clear the feature bits in capbuf[] that have not been acknowledged.
|
||||
* After that, capbuf[] contains the resultant feature mask.
|
||||
*/
|
||||
for (i = OSC_QUERY_DWORD + 1; i < bufsize; i++)
|
||||
for (i = OSC_QUERY_DWORD + 1, test = 0; i < bufsize; i++) {
|
||||
test |= capbuf[i] & ~retbuf[i];
|
||||
capbuf[i] &= retbuf[i];
|
||||
}
|
||||
|
||||
if (retbuf[OSC_QUERY_DWORD] & OSC_ERROR_MASK) {
|
||||
errors = retbuf[OSC_QUERY_DWORD] & OSC_ERROR_MASK;
|
||||
/*
|
||||
* Some platforms set OSC_CAPABILITIES_MASK_ERROR even though they
|
||||
* acknowledge all of the requested features, so avoid complaining in
|
||||
* those cases unless any other error bits are also set.
|
||||
*/
|
||||
if (errors && (test || errors != OSC_CAPABILITIES_MASK_ERROR)) {
|
||||
/*
|
||||
* Complain about the unexpected errors and print diagnostic
|
||||
* information related to them.
|
||||
|
||||
Reference in New Issue
Block a user