linux/include
Mark Rustad 619d6ccdd9 PCI: Add dev_flags bit to access VPD through function 0
[ Upstream commit 91a37c794c ]

commit 932c435cab upstream.

Add a dev_flags bit, PCI_DEV_FLAGS_VPD_REF_F0, to access VPD through
function 0 to provide VPD access on other functions.  This is for hardware
devices that provide copies of the same VPD capability registers in
multiple functions.  Because the kernel expects that each function has its
own registers, both the locking and the state tracking are affected by VPD
accesses to different functions.

On such devices for example, if a VPD write is performed on function 0,
*any* later attempt to read VPD from any other function of that device will
hang.  This has to do with how the kernel tracks the expected value of the
F bit per function.

Concurrent accesses to different functions of the same device can not only
hang but also corrupt both read and write VPD data.

When hangs occur, typically the error message:

  vpd r/w failed.  This is likely a firmware bug on this device.

will be seen.

Never set this bit on function 0 or there will be an infinite recursion.

Signed-off-by: Mark Rustad <mark.d.rustad@intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Acked-by: Alexander Duyck <alexander.h.duyck@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
History 2015-12-02 22:35:38 -05:00
..
acpi ACPICA: Tables: Fix an issue that FACS initialization is performed twice 2015-08-04 14:33:56 -04:00
asm-generic mmu_gather: move minimal range calculations into generic code 2015-03-28 09:22:01 -04:00
clocksource ARM: pxa: Add non device-tree timer link to clocksource 2014-07-23 12:02:39 +02:00
crypto crypto: LLVMLinux: Add macro to remove use of VLAIS in crypto code 2014-10-14 10:51:22 +02:00
drm drm/radeon: add new OLAND pci id 2015-09-16 10:01:30 -04:00
dt-bindings The fixes for the clock framework are all regressions in drivers, plus a 2014-11-25 17:52:56 -08:00
keys KEYS: Restore partial ID matching functionality for asymmetric keys 2014-10-06 15:21:05 +01:00
kvm arm/arm64: KVM: Keep elrsr/aisr in sync with software model 2015-05-11 07:07:37 -04:00
linux PCI: Add dev_flags bit to access VPD through function 0 2015-12-02 22:35:38 -05:00
math-emu math-emu: fix floating-point to integer overflow detection 2014-01-07 18:36:24 -06:00
media Merge branch 'patchwork' into v4l_for_linus 2014-10-09 14:00:54 -03:00
memory ddr: add LPDDR2 data from JESD209-2 2012-05-02 00:04:06 -07:00
misc cxl: Add new header for call backs and structs 2014-10-08 20:15:43 +11:00
net net: add pfmemalloc check in sk_add_backlog() 2015-11-13 13:16:51 -05:00
pcmcia pcmcia/ds.h: introduce helper for pcmcia_driver module boilerplate 2013-03-15 12:26:03 -07:00
ras PCI/AER: Rename PCI_ERR_UNC_TRAIN to PCI_ERR_UNC_UND 2014-09-25 09:42:40 -06:00
rdma IB/mlx5, iser, isert: Add Signature API additions 2014-10-09 00:10:53 -07:00
rxrpc include/rxrpc/types.h: Remove unused header 2014-08-29 20:33:39 -07:00
scsi SCSI: add 1024 max sectors black list flag 2015-08-06 14:49:50 -04:00
soc/tegra ARM: tegra: Convert PMC to a driver 2014-07-17 14:58:43 +02:00
sound ASoC: wm8904: Correct number of EQ registers 2015-11-15 12:51:48 -05:00
target target/iscsi: Fix np_ip bracket issue by removing np_ip 2015-10-27 22:12:52 -04:00
trace regmap: introduce regmap_name to fix syscon regmap trace events 2015-04-16 20:11:29 -04:00
uapi if_link: Add an additional parameter to ifla_vf_info for RSS querying 2015-10-27 09:31:42 -04:00
video fbdev changes for 3.18 2014-10-18 18:03:02 -07:00
xen x86/xen: Support kexec/kdump in HVM guests by doing a soft reset 2015-10-27 22:13:13 -04:00
Kbuild UAPI: remove empty Kbuild files 2013-04-30 17:04:09 -07:00