mirror_ubuntu-kernels/drivers/pci
Jim Quinlan 5fb8f2628e PCI: brcmstb: Prevent config space access when link is down
When the link is down, config accesses to downstream devices cause CPU
aborts.  Allow config accesses only when the link is up.

As the following scenario shows, this check is racy and cannot completely
avoid CPU aborts, but it makes them less likely:

  pci_generic_config_read
    addr = brcm_pcie_map_conf            # bus->ops->map_bus()
      brcm_pcie_link_up                  # returns "true"; link is up
    <link goes down>
    *val = readb(addr)                   # link is now down
    <CPU abort>

Note that config space accesses to the Root Port are not affected by link
status.

[bhelgaas: commit log, use PCIE_ECAM_REG() instead of magic 0xfff masks;
note that pci_generic_config_read32() masks low two bits already]
Link: https://lore.kernel.org/r/20220725151258.42574-4-jim2101024@gmail.com
Signed-off-by: Jim Quinlan <jim2101024@gmail.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Tested-by: Florian Fainelli <f.fainelli@gmail.com>
2022-07-27 11:52:54 -05:00
..
controller PCI: brcmstb: Prevent config space access when link is down 2022-07-27 11:52:54 -05:00
endpoint PCI: endpoint: Fix misused goto label 2022-03-07 11:42:12 +00:00
hotplug PCI: hotplug: Clean up include files 2022-04-05 11:13:33 -05:00
msi PCI/MSI: Remove bogus warning in pci_irq_get_affinity() 2022-02-04 09:54:20 +01:00
pcie IOMMU Updates for Linux v5.19 2022-05-31 09:56:54 -07:00
switch PCI/switchtec: Declare local state_names[] as static 2021-11-19 12:14:02 -06:00
access.c PCI: Reduce warnings on possible RW1C corruption 2022-03-04 15:59:52 -06:00
ats.c PCI: Allow PASID on fake PCIe devices without TLP prefixes 2021-08-26 14:21:42 -05:00
bus.c
ecam.c PCI: Dynamically map ECAM regions 2021-06-16 17:20:40 -05:00
host-bridge.c PCI: VMD: ACPI: Make ACPI companion lookup work for VMD bus 2021-09-02 17:59:58 +02:00
iov.c PCI/IOV: Fix wrong kernel-doc identifier 2022-03-07 12:06:10 -07:00
irq.c
Kconfig PCI/VGA: Move vgaarb to drivers/pci 2022-03-09 18:30:46 -06:00
Makefile PCI/VGA: Move vgaarb to drivers/pci 2022-03-09 18:30:46 -06:00
mmap.c
of.c IOMMU Updates for Linux v5.19 2022-05-31 09:56:54 -07:00
p2pdma.c PCI/P2PDMA: Whitelist Intel Skylake-E Root Ports at any devfn 2022-04-11 13:21:41 -05:00
pci-acpi.c pci-v5.19-changes 2022-05-27 15:25:10 -07:00
pci-bridge-emul.c Merge branch 'remotes/lorenzo/pci/mvebu' 2022-03-22 17:16:25 -05:00
pci-bridge-emul.h PCI: pci-bridge-emul: Add support for PCI Bridge Subsystem Vendor ID capability 2022-02-22 16:04:19 +00:00
pci-driver.c IOMMU Updates for Linux v5.19 2022-05-31 09:56:54 -07:00
pci-label.c PCI/sysfs: Use sysfs_emit() and sysfs_emit_at() in "show" functions 2021-06-03 22:14:47 -05:00
pci-mid.c PCI: PM: Do not use pci_platform_pm_ops for Intel MID PM 2021-09-27 17:13:21 +02:00
pci-pf-stub.c
pci-stub.c PCI: pci_stub: Set driver_managed_dma 2022-04-28 15:32:20 +02:00
pci-sysfs.c PCI: Use driver_set_override() instead of open-coding 2022-04-22 17:13:54 +02:00
pci.c PCI/PM: Fix bridge_d3_blacklist[] Elo i2 overwrite of Gigabyte X299 2022-05-31 15:06:19 -05:00
pci.h PCI: Add function for parsing 'slot-power-limit-milliwatt' DT property 2022-04-25 10:53:39 +01:00
probe.c pci-v5.17-changes 2022-01-16 08:08:11 +02:00
proc.c PCI: Remove unused assignments 2022-03-22 11:23:53 -05:00
quirks.c PCI/ASPM: Make Intel DG2 L1 acceptable latency unlimited 2022-04-07 12:00:36 -05:00
remove.c PCI: Remove reset_fn field from pci_dev 2021-08-17 17:44:38 -05:00
rom.c PCI: Prefer 'unsigned int' over bare 'unsigned' 2021-10-27 13:41:22 -05:00
search.c
setup-bus.c Merge branch 'pci/misc' 2022-03-22 17:16:21 -05:00
setup-irq.c PCI: Tidy comments 2021-09-28 13:43:17 -05:00
setup-res.c PCI: Work around Intel I210 ROM BAR overlap defect 2022-01-11 09:33:10 -06:00
slot.c PCI/sysfs: Use default_groups in kobj_type for slot attrs 2021-12-29 13:42:04 -06:00
syscall.c PCI: Return int from pciconfig_read() syscall 2021-08-03 16:55:48 -05:00
vc.c
vgaarb.c PCI/VGA: Replace full MIT license text with SPDX identifier 2022-03-09 18:31:34 -06:00
vpd.c PCI/VPD: Use pci_read_vpd_any() in pci_vpd_size() 2021-10-25 19:12:23 -05:00
xen-pcifront.c xen/pcifront: use xenbus_setup_ring() and xenbus_teardown_ring() 2022-05-19 14:22:02 +02:00