alistair23-linux/drivers/pci/host
Jon Derrick 3906b91844 PCI: vmd: Use SRCU as a local RCU to prevent delaying global RCU
SRCU lets synchronize_srcu() depend on VMD-local RCU primitives, preventing
long delays from locking up RCU in other systems.  VMD performs a
synchronize when removing a device, but will hit all IRQ lists if the
device uses all VMD vectors.  This patch will not help VMD's RCU
synchronization, but will isolate the read side delays to the VMD
subsystem.  Additionally, the use of SRCU in VMD's ISR will keep it
isolated from any other RCU waiters in the rest of the system.

Tested using concurrent FIO and NVMe resets:

  [global]
  rw=read
  bs=4k
  direct=1
  ioengine=libaio
  iodepth=32
  norandommap
  timeout=300
  runtime=1000000000

  [nvme0]
  cpus_allowed=0-63
  numjobs=8
  filename=/dev/nvme0n1

  [nvme1]
  cpus_allowed=0-63
  numjobs=8
  filename=/dev/nvme1n1

  while (true) do
    for i in /sys/class/nvme/nvme*; do
      echo "Resetting ${i##*/}"
      echo 1 > $i/reset_controller;
      sleep 5
    done;
  done

Signed-off-by: Jon Derrick <jonathan.derrick@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Keith Busch <keith.busch@intel.com>
2016-12-07 12:17:27 -06:00
..
Kconfig PCI: vmd: Use SRCU as a local RCU to prevent delaying global RCU 2016-12-07 12:17:27 -06:00
Makefile Merge branch 'pci/host-vmd' into next 2016-10-05 14:00:21 -05:00
pci-aardvark.c PCI: aardvark: Remove unused platform data 2016-10-11 19:44:04 -05:00
pci-dra7xx.c PCI: dra7xx: Reorder struct dra7xx_pcie 2016-10-12 00:05:54 -05:00
pci-exynos.c PCI: exynos: Reorder struct exynos_pcie 2016-10-11 21:30:52 -05:00
pci-host-common.c Merge branch 'pci/enumeration' into next 2016-10-03 09:43:19 -05:00
pci-host-generic.c Merge branches 'pci/demodularize-hosts' and 'pci/host-request-windows' into next 2016-08-01 12:23:57 -05:00
pci-hyperv.c PCI: hv: Handle hv_pci_generic_compl() error case 2016-09-06 12:23:30 -05:00
pci-imx6.c PCI: imx6: Remove unused return values 2016-10-11 22:26:28 -05:00
pci-keystone-dw.c PCI: keystone: Add app register accessors 2016-10-11 22:58:34 -05:00
pci-keystone.c PCI: keystone: Pass keystone_pcie, not address, to IRQ functions 2016-10-11 22:56:46 -05:00
pci-keystone.h PCI: keystone: Reorder struct keystone_pcie 2016-10-11 22:58:43 -05:00
pci-layerscape.c PCI: layerscape: Reorder struct ls_pcie 2016-10-11 23:15:58 -05:00
pci-mvebu.c PCI: mvebu: Use existing of_node pointer 2016-10-11 23:19:05 -05:00
pci-rcar-gen2.c PCI: rcar-gen2: Add local struct device pointers 2016-10-11 23:34:57 -05:00
pci-tegra.c PCI: tegra: Remove unused platform data 2016-10-11 23:45:32 -05:00
pci-thunder-ecam.c Merge branches 'pci/demodularize-hosts' and 'pci/host-request-windows' into next 2016-08-01 12:23:57 -05:00
pci-thunder-pem.c Merge branches 'pci/demodularize-hosts' and 'pci/host-request-windows' into next 2016-08-01 12:23:57 -05:00
pci-versatile.c PCI: versatile: Fix pci_remap_iospace() failure path 2016-09-06 12:41:15 -05:00
pci-xgene-msi.c
pci-xgene.c PCI: xgene: Add register accessors 2016-10-11 23:54:31 -05:00
pcie-altera-msi.c Merge branches 'pci/host-aardvark', 'pci/host-altera', 'pci/host-artpec', 'pci/host-designware', 'pci/host-hv', 'pci/host-keystone', 'pci/host-rcar', 'pci/host-rockchip', 'pci/host-tegra' and 'pci/host-xilinx' into next 2016-10-05 13:59:14 -05:00
pcie-altera.c PCI: altera: Simplify TLP_CFG_DW1 usage 2016-10-11 19:57:49 -05:00
pcie-armada8k.c PCI: armada: Reorder struct armada8k_pcie 2016-10-11 20:33:01 -05:00
pcie-artpec6.c PCI: artpec6: Add resource name comments 2016-10-11 20:49:40 -05:00
pcie-designware-plat.c PCI: designware-plat: Remove unused platform data 2016-10-11 08:38:46 -05:00
pcie-designware.c PCI: designware: Swap order of dw_pcie_writel_unroll() reg/val arguments 2016-10-11 08:34:47 -05:00
pcie-designware.h PCI: designware: Export dw_pcie_readl_rc(), dw_pcie_writel_rc() 2016-10-11 08:31:52 -05:00
pcie-hisi.c PCI: hisi: Reorder struct hisi_pcie 2016-10-12 00:08:32 -05:00
pcie-iproc-bcma.c PCI: iproc: Validate CSR base in BCMA setup code 2016-10-11 22:38:51 -05:00
pcie-iproc-msi.c
pcie-iproc-platform.c PCI: iproc: Set drvdata at end of probe function 2016-10-11 22:36:38 -05:00
pcie-iproc.c PCI: iproc: Hard-code PCIe capability offset instead of searching 2016-10-11 22:44:22 -05:00
pcie-iproc.h
pcie-qcom.c PCI: qcom: Reorder struct qcom_pcie 2016-10-11 23:27:46 -05:00
pcie-rcar.c PCI: rcar: Remove DRV_NAME macro 2016-10-11 23:34:49 -05:00
pcie-rockchip.c PCI: rockchip: Indent "if" statement body 2016-10-12 07:14:09 -05:00
pcie-spear13xx.c PCI: spear: Clean up struct device usage 2016-10-11 08:45:47 -05:00
pcie-xilinx-nwl.c PCI: xilinx-nwl: Remove unused platform data 2016-10-12 00:00:51 -05:00
pcie-xilinx.c PCI: xilinx: Removed unused xilinx_pcie_assign_msi() argument 2016-10-12 00:00:00 -05:00
vmd.c PCI: vmd: Use SRCU as a local RCU to prevent delaying global RCU 2016-12-07 12:17:27 -06:00