Re: FAILED: Patch Upstream: Revert "PCI/ACPI: Request _OSC control before scanning PCI root bus"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]