Re: [BUG] Bisected Problem with LSI PCI FC Adapter

Dirk Gouders
2014-09-14T11:42:03Z

Andreas Noever <andreas.noever@gmail.com> writes:

> This is an implementation of fix 1 (Add a quirk to fix the _CRS information
> based on what amd_bus.c read from the hardware) which makes pci=nocrs ignore bus numbers from crs.
>
> If this works then we can add the board to the crs blacklist (Dirk can you attach the output of dmidecode to the bugzilla report?).

I attached the information to the bugzilla report.

Do you want me to test this fix as is or should I wait (e.g. for an
updated crs blacklist)?

Dirk

>
>
>
> ---
> arch/x86/pci/acpi.c | 7 +++----
> arch/x86/pci/bus_numa.c | 12 +-----------
> 2 files changed, 4 insertions(+), 15 deletions(-)
>
> diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c
> index cfd1b13..b073948 100644
> --- a/arch/x86/pci/acpi.c
> +++ b/arch/x86/pci/acpi.c
> @@ -522,15 +522,14 @@ struct pci_bus *pci_acpi_scan_root(struct acpi_pci_root *root)
> } else {
> probe_pci_root_info(info, device, busnum, domain);
>
> - /* insert busn res at first */
> - pci_add_resource(&resources, &root->secondary);
> /*
> * _CRS with no apertures is normal, so only fall back to
> * defaults or native bridge info if we're ignoring _CRS.
> */
> - if (pci_use_crs)
> + if (pci_use_crs) {
> + pci_add_resource(&resources, &root->secondary);
> add_resources(info, &resources);
> - else {
> + } else {
> free_pci_root_info_res(info);
> x86_pci_root_bus_resources(busnum, &resources);
> }
> diff --git a/arch/x86/pci/bus_numa.c b/arch/x86/pci/bus_numa.c
> index f3a2cfc..b735d0e 100644
> --- a/arch/x86/pci/bus_numa.c
> +++ b/arch/x86/pci/bus_numa.c
> @@ -31,8 +31,6 @@ void x86_pci_root_bus_resources(int bus, struct list_head *resources)
> {
> struct pci_root_info *info = x86_find_pci_root_info(bus);
> struct pci_root_res *root_res;
> - struct pci_host_bridge_window *window;
> - bool found = false;
>
> if (!info)
> goto default_resources;
> @@ -40,15 +38,7 @@ void x86_pci_root_bus_resources(int bus, struct list_head *resources)
> printk(KERN_DEBUG "PCI: root bus %02x: hardware-probed resources\n",
> bus);
>
> - /* already added by acpi ? */
> - list_for_each_entry(window, resources, list)
> - if (window->res->flags & IORESOURCE_BUS) {
> - found = true;
> - break;
> - }
> -
> - if (!found)
> - pci_add_resource(resources, &info->busn);
> + pci_add_resource(resources, &info->busn);
>
> list_for_each_entry(root_res, &info->resources, list) {
> struct resource *res;