Commit 10629d71 authored by Bjorn Helgaas's avatar Bjorn Helgaas

PCI: Remove __weak annotation from pcibios_get_phb_of_node decl

The __weak annotation on the pcibios_get_phb_of_node() declaration
causes *every* definition to be marked "weak."  The linker then
selects one based on link order, which may be the wrong one.

Gabor found that on MIPS, the linker selected the generic implementation
from drivers/pci even though arch/mips supplied a definition without the
__weak annotation:

$ mipsel-openwrt-linux-readelf -s arch/mips/pci/built-in.o \
    drivers/pci/built-in.o vmlinux.o | grep pcibios_get_phb_of_node
      86: 0000046c    12 FUNC    WEAK   DEFAULT    2 pcibios_get_phb_of_node
    1430: 00012e2c   104 FUNC    WEAK   DEFAULT    2 pcibios_get_phb_of_node
   31898: 0017e4ec   104 FUNC    WEAK   DEFAULT    2 pcibios_get_phb_of_node

This removes the __weak annotation from the pcibios_get_phb_of_node()
declaration so arch-specific non-weak implementations work reliably.
Suggested-by: default avatarGabor Juhos <juhosg@openwrt.org>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
parent f6161aa1
...@@ -1823,7 +1823,7 @@ extern void pci_set_bus_of_node(struct pci_bus *bus); ...@@ -1823,7 +1823,7 @@ extern void pci_set_bus_of_node(struct pci_bus *bus);
extern void pci_release_bus_of_node(struct pci_bus *bus); extern void pci_release_bus_of_node(struct pci_bus *bus);
/* Arch may override this (weak) */ /* Arch may override this (weak) */
extern struct device_node * __weak pcibios_get_phb_of_node(struct pci_bus *bus); extern struct device_node *pcibios_get_phb_of_node(struct pci_bus *bus);
static inline struct device_node * static inline struct device_node *
pci_device_to_OF_node(const struct pci_dev *pdev) pci_device_to_OF_node(const struct pci_dev *pdev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment