aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rtlwifi/pci.c
diff options
context:
space:
mode:
authorLarry Finger <Larry.Finger@lwfinger.net>2011-07-29 11:53:12 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-08-15 21:31:33 -0400
commitb7d9c861aec35bba7e809eef5b6a79fe3ff8b695 (patch)
tree0ad83f0f340b408922e1f03e1aef0956ebd93758 /drivers/net/wireless/rtlwifi/pci.c
parent07e1a60a732bbd4142d068302d09470d8441d1dc (diff)
rtlwifi: Fix kernel oops on ARM SOC
commit b6b67df3f24c45af0012ee3c8af2f62ca083ae18 upstream. This driver uses information from the self member of the pci_bus struct to get information regarding the bridge to which the PCIe device is attached. Unfortunately, this member is not established on all architectures, which leads to a kernel oops. Skipping the entire block that uses the self member to determine the bridge vendor will only affect RTL8192DE devices as that driver sets the ASPM support flag differently when the bridge vendor is Intel. If the self member is available, there is no functional change. This patch fixes Bugzilla No. 40212. Reported-by: Hubert Liao <liao.hubertt@gmail.com> Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/net/wireless/rtlwifi/pci.c')
-rw-r--r--drivers/net/wireless/rtlwifi/pci.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c
index 254b64ba4bf..c872a232427 100644
--- a/drivers/net/wireless/rtlwifi/pci.c
+++ b/drivers/net/wireless/rtlwifi/pci.c
@@ -1709,15 +1709,17 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev,
1709 pcipriv->ndis_adapter.devnumber = PCI_SLOT(pdev->devfn); 1709 pcipriv->ndis_adapter.devnumber = PCI_SLOT(pdev->devfn);
1710 pcipriv->ndis_adapter.funcnumber = PCI_FUNC(pdev->devfn); 1710 pcipriv->ndis_adapter.funcnumber = PCI_FUNC(pdev->devfn);
1711 1711
1712 /*find bridge info */ 1712 if (bridge_pdev) {
1713 pcipriv->ndis_adapter.pcibridge_vendorid = bridge_pdev->vendor; 1713 /*find bridge info if available */
1714 for (tmp = 0; tmp < PCI_BRIDGE_VENDOR_MAX; tmp++) { 1714 pcipriv->ndis_adapter.pcibridge_vendorid = bridge_pdev->vendor;
1715 if (bridge_pdev->vendor == pcibridge_vendors[tmp]) { 1715 for (tmp = 0; tmp < PCI_BRIDGE_VENDOR_MAX; tmp++) {
1716 pcipriv->ndis_adapter.pcibridge_vendor = tmp; 1716 if (bridge_pdev->vendor == pcibridge_vendors[tmp]) {
1717 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG, 1717 pcipriv->ndis_adapter.pcibridge_vendor = tmp;
1718 ("Pci Bridge Vendor is found index: %d\n", 1718 RT_TRACE(rtlpriv, COMP_INIT, DBG_DMESG,
1719 tmp)); 1719 ("Pci Bridge Vendor is found index:"
1720 break; 1720 " %d\n", tmp));
1721 break;
1722 }
1721 } 1723 }
1722 } 1724 }
1723 1725