Re: [PATCH v2] ACPI: PCI: Avoid misleading _OSC messages for non-PCIe host bridges without _OSC
"Rafael J. Wysocki (Intel)" <[email protected]> Fri, 7 Aug 2026 17:12:40 +0200
| Newsgroups | gmane.linux.kernel,gmane.linux.acpi.devel,gmane.linux.kernel.pci |
|---|---|
| Message-ID | <CAJZ5v0g0MeLGgzHGihBXH3YBnDt4KGdq2uR8-F3H9b4Fszpx2Q@mail.gmail.com> |
On Thu, Aug 6, 2026 at 1:21 PM KONDO KAZUMA(近藤 和真) <[email protected]> wrote: > > After commit 7d703df7f4f5 ("ACPI: bus: Split _OSC evaluation out of > acpi_run_osc()"), the _OSC evaluation path now returns AE_ERROR to > negotiate_os_control() instead of propagating AE_NOT_FOUND from > acpi_evaluate_object(). > > This has not caused any functional issues so far, but it produces > additional misleading messages for non-PCIe host bridges without _OSC on > some Intel servers: > > kernel: ACPI: Enabled 2 GPEs in block 00 to 7F > kernel: ACPI: PCI Root Bridge [UNC0] (domain 0000 [bus fe]) > kernel: acpi PNP0A03:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI EDR HPX-Type3] > + kernel: acpi PNP0A03:00: _OSC: OS requested [PCIeHotplug SHPCHotplug PME AER PCIeCapability LTR DPC] > + kernel: acpi PNP0A03:00: _OSC: platform willing to grant [PCIeHotplug SHPCHotplug PME AER PCIeCapability LTR DPC] > + kernel: acpi PNP0A03:00: _OSC: platform retains control of PCIe features (AE_ERROR) > kernel: PCI host bridge to bus 0000:fe > > Previously, negotiate_os_control() silently ignored AE_NOT_FOUND for > non-PCIe host bridges without _OSC, but after the above change, it no > longer does so. > > As a result, negotiate_os_control() logs messages as if the OS had > negotiated with the platform via _OSC, even though the non-PCIe host > bridge has no _OSC method and no such negotiation actually occurs. > > Skip _OSC negotiation for non-PCIe host bridges that do not define an > _OSC method before attempting to evaluate it. > > Fixes: 7d703df7f4f5 ("ACPI: bus: Split _OSC evaluation out of acpi_run_osc()") > Link: https://lore.kernel.org/linux-acpi/[email protected]/ > Suggested-by: Rafael J. Wysocki <[email protected]> > Signed-off-by: Kazuma Kondo <[email protected]> > --- > Changes in v2: > - Set *no_aspm to 1 when skipping _OSC negotiation. > - Updated the debug message and the comment. > - Link to v1: https://lore.kernel.org/linux-acpi/[email protected]/ > > drivers/acpi/pci_root.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c > index 4c06c3ffd0cb..cab29a75a276 100644 > --- a/drivers/acpi/pci_root.c > +++ b/drivers/acpi/pci_root.c > @@ -574,6 +574,17 @@ static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm) > return; > } > > + if (!is_pcie(root) && !is_cxl(root) && > + !acpi_has_method(handle, "_OSC")) { > + dev_dbg(&device->dev, "_OSC: Skipping a non-PCIe host bridge without _OSC\n"); > + > + /* > + * No ASPM for non-PCIe host bridges > + */ > + *no_aspm = 1; > + return; > + } > + > support = calculate_support(); > > decode_osc_support(root, "OS supports", support); > @@ -615,10 +626,6 @@ static void negotiate_os_control(struct acpi_pci_root *root, int *no_aspm) > */ > *no_aspm = 1; > > - /* _OSC is optional for PCI host bridges */ > - if (status == AE_NOT_FOUND && !is_pcie(root)) > - return; > - > if (control) { > decode_osc_control(root, "OS requested", requested); > decode_osc_control(root, "platform willing to grant", control); > -- Applied as 7.3 material with some minor modifications, thanks!