:100000000105D4F953E9FF17035338FF20040FC04B
:1000100002002102060315390401416C6C69656414
:100020002054656C657369732C4B2E4B00457468C6
:1000300065726E6574204C414E20436172640043CA
:10004000656E747265434F4D004C412D50434D0019
:10005000FF1A0602100000020B1B08810108E06075
:1000600000021F1B08820108E06020021F1B08839A
:100070000108E06040021F1B08840108E060600284
:100080001F1B08850108E06080021F1B088601080D
:10009000E060A0021F1B08870108E060C0021F1B70
:1000A00008880108E060E0021F1B08890108E06081
:1000B00000031F1B088A0108E06020031F1B088B38
:1000C0000108E06040031F1B088C0108E06060032A
:1000D0001F1B088D0108E06080031F1B088E0108AC
:1000E000E060A0031F1B088F0108E060C0031F1B16
:0D00F00008900108E060E0031F1400FF000D
:00000001FF
#
# Replacement CIS for Allied Telesis LA-PCM
#
'cgit logo'/>
PCI/ASPM: Handle PCI-to-PCIe bridges as roots of PCIe hierarchies
In a struct pcie_link_state, link->root points to the pcie_link_state of
the root of the PCIe hierarchy. For the topmost link, this points to
itself (link->root = link). For others, we copy the pointer from the
parent (link->root = link->parent->root).
Previously we recognized that Root Ports originated PCIe hierarchies, but
we treated PCI/PCI-X to PCIe Bridges as being in the middle of the
hierarchy, and when we tried to copy the pointer from link->parent->root,
there was no parent, and we dereferenced a NULL pointer:
BUG: unable to handle kernel NULL pointer dereference at 0000000000000090
IP: [<ffffffff9e424350>] pcie_aspm_init_link_state+0x170/0x820
Recognize that PCI/PCI-X to PCIe Bridges originate PCIe hierarchies just
like Root Ports do, so link->root for these devices should also point to
itself.
Fixes: 51ebfc92b72b ("PCI: Enumerate switches below PCI-to-PCIe bridges")
Link: https://bugzilla.kernel.org/show_bug.cgi?id=193411
Link: https://bugzilla.opensuse.org/show_bug.cgi?id=1022181
Tested-by: lists@ssl-mail.com
Tested-by: Jayachandran C. <jnair@caviumnetworks.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
CC: stable@vger.kernel.org # v4.2+