On Tue, Apr 9, 2013 at 4:05 PM, Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx> wrote: > I tried to apply the patch below to the 3.8-stable tree, but it has > conflicts and doesn't apply. So I tried a straight-revert of > 8c33f51df406e1a1f7fa4e9b244845b7ebd61fa6, which did work fine, but I > noticed that it really doesn't look anything like the patch below. > > Is this patch a "logical" revert, and not a "literal" one? Yes. There were other changes after 8c33f51df that made a literal revert impossible in v3.9. Essentially we're just swapping the order of the _OSC code and the bus scan. I think the diffs look different because the straight revert shows moving the _OSC code, and the v3.9 patch (below) shows moving the bus scan. > Anyway, can someone send me a properly backported version so it can be > applied to the 3.8-stable tree? I think the straight revert should be fine. I can send it if you want, but it'll be the same as what "git revert 8c33f51df40" gives you :) Bjorn > On Fri, Apr 05, 2013 at 11:00:22PM -0400, Gregs git-bot wrote: >> commit: b8178f130e25c1bdac1c33e0996f1ff6e20ec08e >> From: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> >> Date: Mon, 1 Apr 2013 15:47:39 -0600 >> Subject: Revert "PCI/ACPI: Request _OSC control before scanning PCI root bus" >> >> This reverts commit 8c33f51df406e1a1f7fa4e9b244845b7ebd61fa6. >> >> Conflicts: >> drivers/acpi/pci_root.c >> >> This commit broke some pre-1.1 PCIe devices by leaving them with >> ASPM enabled. Previously, we had disabled ASPM on these devices >> because many of them don't implement it correctly (per 149e1637). >> >> Requesting _OSC control early means that aspm_disabled may be set >> before we scan the PCI bus and configure link ASPM state. But the >> ASPM configuration currently skips the check for pre-PCIe 1.1 devices >> when aspm_disabled is set, like this: >> >> acpi_pci_root_add >> acpi_pci_osc_support >> if (flags != base_flags) >> pcie_no_aspm >> aspm_disabled = 1 >> pci_acpi_scan_root >> ... >> pcie_aspm_init_link_state >> pcie_aspm_sanity_check >> if (!aspm_disabled) >> /* check for pre-PCIe 1.1 device */ >> >> Therefore, setting aspm_disabled early means that we leave ASPM enabled >> on these pre-PCIe 1.1 devices, which is a regression for some devices. >> >> The best fix would be to clean up the ASPM init so we can evaluate >> _OSC before scanning the bug (that way boot-time and hot-add discovery >> will work the same), but that requires significant rework. >> >> For now, we'll just revert the _OSC change as the lowest-risk fix. >> >> Reference: https://bugzilla.kernel.org/show_bug.cgi?id=55211 >> Signed-off-by: Bjorn Helgaas <bhelgaas@xxxxxxxxxx> >> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> >> Acked-by: Yinghai Lu <yinghai@xxxxxxxxxx> >> CC: stable@xxxxxxxxxxxxxxx # v3.8+ >> --- >> drivers/acpi/pci_root.c | 76 +++++++++++++++++++++++------------------------ >> 1 file changed, 37 insertions(+), 39 deletions(-) >> >> diff --git a/drivers/acpi/pci_root.c b/drivers/acpi/pci_root.c >> index 0ac546d..c740364 100644 >> --- a/drivers/acpi/pci_root.c >> +++ b/drivers/acpi/pci_root.c >> @@ -415,7 +415,6 @@ static int acpi_pci_root_add(struct acpi_device *device, >> struct acpi_pci_root *root; >> struct acpi_pci_driver *driver; >> u32 flags, base_flags; >> - bool is_osc_granted = false; >> >> root = kzalloc(sizeof(struct acpi_pci_root), GFP_KERNEL); >> if (!root) >> @@ -476,6 +475,30 @@ static int acpi_pci_root_add(struct acpi_device *device, >> flags = base_flags = OSC_PCI_SEGMENT_GROUPS_SUPPORT; >> acpi_pci_osc_support(root, flags); >> >> + /* >> + * TBD: Need PCI interface for enumeration/configuration of roots. >> + */ >> + >> + mutex_lock(&acpi_pci_root_lock); >> + list_add_tail(&root->node, &acpi_pci_roots); >> + mutex_unlock(&acpi_pci_root_lock); >> + >> + /* >> + * Scan the Root Bridge >> + * -------------------- >> + * Must do this prior to any attempt to bind the root device, as the >> + * PCI namespace does not get created until this call is made (and >> + * thus the root bridge's pci_dev does not exist). >> + */ >> + root->bus = pci_acpi_scan_root(root); >> + if (!root->bus) { >> + printk(KERN_ERR PREFIX >> + "Bus %04x:%02x not present in PCI namespace\n", >> + root->segment, (unsigned int)root->secondary.start); >> + result = -ENODEV; >> + goto out_del_root; >> + } >> + >> /* Indicate support for various _OSC capabilities. */ >> if (pci_ext_cfg_avail()) >> flags |= OSC_EXT_PCI_CONFIG_SUPPORT; >> @@ -494,6 +517,7 @@ static int acpi_pci_root_add(struct acpi_device *device, >> flags = base_flags; >> } >> } >> + >> if (!pcie_ports_disabled >> && (flags & ACPI_PCIE_REQ_SUPPORT) == ACPI_PCIE_REQ_SUPPORT) { >> flags = OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL >> @@ -514,54 +538,28 @@ static int acpi_pci_root_add(struct acpi_device *device, >> status = acpi_pci_osc_control_set(device->handle, &flags, >> OSC_PCI_EXPRESS_CAP_STRUCTURE_CONTROL); >> if (ACPI_SUCCESS(status)) { >> - is_osc_granted = true; >> dev_info(&device->dev, >> "ACPI _OSC control (0x%02x) granted\n", flags); >> + if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) { >> + /* >> + * We have ASPM control, but the FADT indicates >> + * that it's unsupported. Clear it. >> + */ >> + pcie_clear_aspm(root->bus); >> + } >> } else { >> - is_osc_granted = false; >> dev_info(&device->dev, >> "ACPI _OSC request failed (%s), " >> "returned control mask: 0x%02x\n", >> acpi_format_exception(status), flags); >> + pr_info("ACPI _OSC control for PCIe not granted, " >> + "disabling ASPM\n"); >> + pcie_no_aspm(); >> } >> } else { >> dev_info(&device->dev, >> - "Unable to request _OSC control " >> - "(_OSC support mask: 0x%02x)\n", flags); >> - } >> - >> - /* >> - * TBD: Need PCI interface for enumeration/configuration of roots. >> - */ >> - >> - mutex_lock(&acpi_pci_root_lock); >> - list_add_tail(&root->node, &acpi_pci_roots); >> - mutex_unlock(&acpi_pci_root_lock); >> - >> - /* >> - * Scan the Root Bridge >> - * -------------------- >> - * Must do this prior to any attempt to bind the root device, as the >> - * PCI namespace does not get created until this call is made (and >> - * thus the root bridge's pci_dev does not exist). >> - */ >> - root->bus = pci_acpi_scan_root(root); >> - if (!root->bus) { >> - printk(KERN_ERR PREFIX >> - "Bus %04x:%02x not present in PCI namespace\n", >> - root->segment, (unsigned int)root->secondary.start); >> - result = -ENODEV; >> - goto out_del_root; >> - } >> - >> - /* ASPM setting */ >> - if (is_osc_granted) { >> - if (acpi_gbl_FADT.boot_flags & ACPI_FADT_NO_ASPM) >> - pcie_clear_aspm(root->bus); >> - } else { >> - pr_info("ACPI _OSC control for PCIe not granted, " >> - "disabling ASPM\n"); >> - pcie_no_aspm(); >> + "Unable to request _OSC control " >> + "(_OSC support mask: 0x%02x)\n", flags); >> } >> >> pci_acpi_add_bus_pm_notifier(device, root->bus); >> -- >> 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html