# Be quiet and do not echo the cmd
Q = @
# Try to use bash as shell for make
SHELL := $(shell if [ -x /bin/bash ]; then echo /bin/bash; else echo /bin/sh; fi)
# Compiler related stuff
LDQ = $(Q)echo -e " LD\t$@" && $(CCACHE) $(CC)
CCNQ = $(CCACHE) $(CC)
CCQ = $(Q)echo -e " CC\t$<" && $(CCNQ)
ifeq ($(DEBUG), 1)
STRIPQ = $(Q)true
else
STRIPQ = $(Q)echo -e " STRIP\t$@" && $(STRIP)
endif
# sparse related
C =
ifeq ($(C), 1)
CHECK = $(Q)echo -e " CHECK\t$<" && sparse
else
CHECK = $(Q)true
endif
# Flex/bison related
LEX = $(Q)echo -e " LEX\t$<" && flex
YAAC = $(Q)echo -e " YAAC\t$<" && bison
# Installation related
INST = echo -e " INST\t$(1)" && install -d $(2) && \
install --mode=644 -DC $(1) $(2)/$(shell basename $(1))
ifeq ("$(origin PREFIX)", "command line")
INSTX = echo -e " INST\t$(1)" && install -d $(2) && \
install -C $(1) $(2)/$(shell basename $(1))
else
INSTX = echo -e " INST\t$(1)" && install -C $(1) $(2)/$(shell basename $(1))
endif
MKDIR = echo -e " MKDIR\t$(1)" && mkdir -p $(1)
RM = echo -e " RM\t$(1)" && rm -rf $(1)
RMDIR = echo -e " RM\t$(1)" && rmdir --ignore-fail-on-non-empty $(1) 2> /dev/null || true
GZIP = gzip --best -c
# Git related
GIT_LAST_TAG = git describe --abbrev=0 v$(VERSION_SHORT)^
GIT_ARCHIVE = git archive --prefix=netsniff-ng-$(VERSION_SHORT)/ v$(VERSION_SHORT) | \
$(1) > ../netsniff-ng-$(VERSION_SHORT).tar.$(2)
GIT_TAG = git tag -a v$(VERSION_SHORT) -s -m "$(VERSION_SHORT) release"
GIT_LOG = git shortlog -n $(shell $(GIT_LAST_TAG))..HEAD
GIT_REM = git ls-files -o | xargs rm -rf
GIT_PEOPLE = git log --no-merges $(shell $(GIT_LAST_TAG))..HEAD | grep Author: | cut -d: -f2 | \
cut -d\< -f1 | sort | uniq -c | sort -nr
GIT_VERSION = git describe --always
# GPG related
GPG_SIGN = gpg -a --output ../netsniff-ng-$(VERSION_SHORT).tar.$(1).sign --detach-sig \
../netsniff-ng-$(VERSION_SHORT).tar.$(1)
nds-private-remove&id=030305d69fc6963c16003f50d7e8d74b02d0a143'>treecommitdiff
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+