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 commit e5322888e6 ("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:
Rafael J. Wysocki
2026-07-23 13:16:03 +02:00
parent 3b0eb670f3
commit 9bfb23e066

View File

@@ -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.