Merge tag 'pci-v3.11-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaa...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 3 Jul 2013 23:31:35 +0000 (16:31 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 3 Jul 2013 23:31:35 +0000 (16:31 -0700)
Pull PCI changes from Bjorn Helgaas:
 "PCI device hotplug
    - Add pci_alloc_dev() interface (Gu Zheng)
    - Add pci_bus_get()/put() for reference counting (Jiang Liu)
    - Fix SR-IOV reference count issues (Jiang Liu)
    - Remove unused acpi_pci_roots list (Jiang Liu)

  MSI
    - Conserve interrupt resources on x86 (Alexander Gordeev)

  AER
    - Force fatal severity when component has been reset (Betty Dall)
    - Reset link below Root Port as well as Downstream Port (Betty Dall)
    - Fix "Firmware first" flag setting (Bjorn Helgaas)
    - Don't parse HEST for non-PCIe devices (Bjorn Helgaas)

  ASPM
    - Warn when we can't disable ASPM as driver requests (Bjorn Helgaas)

  Miscellaneous
    - Add CircuitCo PCI IDs (Darren Hart)
    - Add AMD CZ SATA and SMBus PCI IDs (Shane Huang)
    - Work around Ivytown NTB BAR size issue (Jon Mason)
    - Detect invalid initial BAR values (Kevin Hao)
    - Add pcibios_release_device() (Sebastian Ott)
    - Fix powerpc & sparc PCI_UNKNOWN power state usage (Bjorn Helgaas)"

* tag 'pci-v3.11-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (51 commits)
  MAINTAINERS: Add ACPI folks for ACPI-related things under drivers/pci
  PCI: Add CircuitCo vendor ID and subsystem ID
  PCI: Use pdev->pm_cap instead of pci_find_capability(..,PCI_CAP_ID_PM)
  PCI: Return early on allocation failures to unindent mainline code
  PCI: Simplify IOV implementation and fix reference count races
  PCI: Drop redundant setting of bus->is_added in virtfn_add_bus()
  unicore32/PCI: Remove redundant call of pci_bus_add_devices()
  m68k/PCI: Remove redundant call of pci_bus_add_devices()
  PCI / ACPI / PM: Use correct power state strings in messages
  PCI: Fix comment typo for pcie_pme_remove()
  PCI: Rename pci_release_bus_bridge_dev() to pci_release_host_bridge_dev()
  PCI: Fix refcount issue in pci_create_root_bus() error recovery path
  ia64/PCI: Clean up pci_scan_root_bus() usage
  PCI/AER: Reset link for devices below Root Port or Downstream Port
  ACPI / APEI: Force fatal AER severity when component has been reset
  PCI/AER: Remove "extern" from function declarations
  PCI/AER: Move AER severity defines to aer.h
  PCI/AER: Set dev->__aer_firmware_first only for matching devices
  PCI/AER: Factor out HEST device type matching
  PCI/AER: Don't parse HEST table for non-PCIe devices
  ...

1  2 
MAINTAINERS
arch/ia64/sn/kernel/io_init.c
arch/sparc/kernel/pci.c
drivers/acpi/apei/ghes.c
drivers/acpi/pci_root.c
drivers/ata/ahci.c
drivers/i2c/busses/Kconfig
drivers/pci/pcie/aer/aerdrv_core.c
include/acpi/acpi_bus.h
include/linux/aer.h

diff --cc MAINTAINERS
index 6d9578131c311a66367505038c43b40527e13590,ce6555036d67c25a142b479176fc5eddc02776a3..f4c2bc73fd24fdee23cc415b17105fba78be28d7
@@@ -242,8 -242,9 +242,11 @@@ F:        drivers/acpi
  F:    drivers/pnp/pnpacpi/
  F:    include/linux/acpi.h
  F:    include/acpi/
 +F:    Documentation/acpi
 +F:    Documentation/ABI/testing/sysfs-bus-acpi
+ F:    drivers/pci/*acpi*
+ F:    drivers/pci/*/*acpi*
+ F:    drivers/pci/*/*/*acpi*
  
  ACPI FAN DRIVER
  M:    Zhang Rui <rui.zhang@intel.com>
index 2b00adedc45ea52b2d28bb5ad733c66aab153d26,e2c7733e18a7cc443575011702944152550ef7d6..0b5ce82d203dd5a908d01609b6f7377d2053161d
@@@ -258,27 -316,17 +258,20 @@@ sn_pci_controller_fixup(int segment, in
         */
        controller->platform_data = prom_bussoft_ptr;
  
 -      sn_legacy_pci_window_fixup(controller,
 -                                 prom_bussoft_ptr->bs_legacy_io,
 -                                 prom_bussoft_ptr->bs_legacy_mem);
 -      for (i = 0; i < controller->windows; i++)
 -              pci_add_resource_offset(&resources,
 -                                      &controller->window[i].resource,
 -                                      controller->window[i].offset);
 +      sn_legacy_pci_window_fixup(res,
 +                      prom_bussoft_ptr->bs_legacy_io,
 +                      prom_bussoft_ptr->bs_legacy_mem);
 +      pci_add_resource_offset(&resources,     &res[0],
 +                      prom_bussoft_ptr->bs_legacy_io);
 +      pci_add_resource_offset(&resources,     &res[1],
 +                      prom_bussoft_ptr->bs_legacy_mem);
 +
        bus = pci_scan_root_bus(NULL, busnum, &pci_root_ops, controller,
                                &resources);
--      if (bus == NULL)
-               goto error_return; /* error, or bus already scanned */
-       bus->sysdata = controller;
-       return;
- error_return:
-       kfree(res);
-       kfree(controller);
-       return;
++      if (bus == NULL) {
++              kfree(res);
+               kfree(controller);
++      }
  }
  
  /*
Simple merge
index fcd7d91cec34af25ed8ccfc32188a24b677c641b,ab315515908eb921caa1f0768d5c79aceb6293a2..ec9b57d428a1e028a0cdf3215e3ebddad9634818
@@@ -452,11 -453,18 +453,20 @@@ static void ghes_do_proc(struct ghes *g
                                devfn = PCI_DEVFN(pcie_err->device_id.device,
                                                  pcie_err->device_id.function);
                                aer_severity = cper_severity_to_aer(sev);
+                               /*
+                                * If firmware reset the component to contain
+                                * the error, we must reinitialize it before
+                                * use, so treat it as a fatal AER error.
+                                */
+                               if (gdata->flags & CPER_SEC_RESET)
+                                       aer_severity = AER_FATAL;
                                aer_recover_queue(pcie_err->device_id.segment,
                                                  pcie_err->device_id.bus,
 -                                                devfn, aer_severity);
 +                                                devfn, aer_severity,
 +                                                (struct aer_capability_regs *)
 +                                                pcie_err->aer_info);
                        }
  
                }
index e427dc516c76d1d8d73b5a91c7d4f1f73b83cfbf,122b4dc7b0faed4653189e2f01e987f12c2208b0..5917839321b8bb01254f57e0cde630f637ff76b2
@@@ -639,11 -620,9 +620,11 @@@ static void _handle_hotplug_event_root(
        switch (type) {
        case ACPI_NOTIFY_BUS_CHECK:
                /* bus enumerate */
-               printk(KERN_DEBUG "%s: Bus check notify on %s\n", __func__,
-                                (char *)buffer.pointer);
+               acpi_handle_printk(KERN_DEBUG, handle,
+                                  "Bus check notify on %s\n", __func__);
 -              if (!root)
 +              if (root)
 +                      acpiphp_check_host_bridge(handle);
 +              else
                        handle_root_bridge_insertion(handle);
  
                break;
Simple merge
Simple merge
Simple merge
Simple merge
index 737f90ab4b6235abd340b1c47d9308591c138e8b,55bb3dc4b2db954eaf590aa93f550dfc36e82768..4dbaa7081530ac7f770bbb7ce5f5211372469ae8
@@@ -49,11 -53,10 +53,11 @@@ static inline int pci_cleanup_aer_uncor
  }
  #endif
  
- extern void cper_print_aer(struct pci_dev *dev,
-                          int cper_severity, struct aer_capability_regs *aer);
- extern int cper_severity_to_aer(int cper_severity);
- extern void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn,
-                             int severity,
-                             struct aer_capability_regs *aer_regs);
 -void cper_print_aer(const char *prefix, struct pci_dev *dev, int cper_severity,
++void cper_print_aer(struct pci_dev *dev, int cper_severity,
+                   struct aer_capability_regs *aer);
+ int cper_severity_to_aer(int cper_severity);
+ void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn,
 -                     int severity);
++                     int severity,
++                     struct aer_capability_regs *aer_regs);
  #endif //_AER_H_