|
|
@@ -0,0 +1,40 @@
|
|
|
+From 10629d711ed780470937ecda50d9ffa0e925a4ee Mon Sep 17 00:00:00 2001
|
|
|
+From: Bjorn Helgaas <[email protected]>
|
|
|
+Date: Wed, 10 Apr 2013 09:56:54 -0600
|
|
|
+Subject: [PATCH 1/2] 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: Gabor Juhos <[email protected]>
|
|
|
+Signed-off-by: Bjorn Helgaas <[email protected]>
|
|
|
+---
|
|
|
+ include/linux/pci.h | 2 +-
|
|
|
+ 1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
+
|
|
|
+--- a/include/linux/pci.h
|
|
|
++++ b/include/linux/pci.h
|
|
|
+@@ -1824,7 +1824,7 @@ extern void pci_set_bus_of_node(struct p
|
|
|
+ extern void pci_release_bus_of_node(struct pci_bus *bus);
|
|
|
+
|
|
|
+ /* 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 *
|
|
|
+ pci_device_to_OF_node(const struct pci_dev *pdev)
|