PCI: Check for PCI_HEADER_TYPE_BRIDGE equality, not bitmask
authorBjorn Helgaas <bhelgaas@google.com>
Thu, 3 Dec 2015 19:18:18 +0000 (13:18 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Fri, 11 Dec 2015 01:38:06 +0000 (19:38 -0600)
commit93de6901766c6821538b74a092e47780a9120fac
tree05431f12c64191c2b8784afe2001b5a0f99b1a01
parent1ec218373b8ebda821aec00bb156a9c94fad9cd4
PCI: Check for PCI_HEADER_TYPE_BRIDGE equality, not bitmask

Bit 7 of the "Header Type" register indicates a multi-function device when
set.  Bits 0-6 contain encoded values, where 0x1 indicates a PCI-PCI
bridge.  It is incorrect to test this as though it were a mask.

For example, while the PCI 3.0 spec only defines values 0x0, 0x1, and 0x2,
it's conceivable that a future spec could define 0x3 to mean something
else; then tests for "(hdr_type & 0x7f) & PCI_HEADER_TYPE_BRIDGE" would
incorrectly succeed for this new 0x3 header type.

Test bits 0-6 of the Header Type for equality with PCI_HEADER_TYPE_BRIDGE.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
arch/powerpc/kernel/eeh_driver.c
drivers/pci/hotplug/ibmphp_pci.c
drivers/pci/pcie/aer/aerdrv_core.c