2011/7/27 John W. Linville [off-list ref]:
On Wed, Jul 27, 2011 at 05:20:15PM +0800, hubert Liao wrote:
quoted
Hi,
We got an oops when insmod rtl8192ce module (the board is an ARM soc),
accroding the oops message, find it's because in rtl_pci_probe() called
_rtl_pci_find_adapter(),
in this funcation, the pdev->bus->self is a NULL pointer .
static boot _rtl_pci_find_adapter(strcut pci_dev *dev,
struct ieee80211_hw *hw)
{
struct pci_dev *bridge_pdev = pdev->bus->self; //line 1601
...
pcipriv->ndis_adapter.pcibridge_vendorid = bridge_pdev->vendor; <-- [oops
here] line 1700
...
}
here, I just want to know why the bus->self is NULL?
pdev is coming straight from what is passed to the PCI probe routine.
It seems like pdev->bus->self should already be set before that
happens.
Yes, I think it should be initialized when added the pci bus bridge,
I have checked the mach-kirkwood(my board is arch/arm/mach-kirkwood)
pcie related code, and I think when system initialized should call
kirkwood_pcie_init() ->
kirkwood_pcie_scan_bus() ->
pci_scan_bus() ->
pci_bus_add_devices()
if the pci_bus->self was initialized in pci_bus_add_devices()?
Maybe the code is too complex for me , I really can not find where
set the “->self" member?
Please open a bug at bugzilla.kernel.org to help us keep track of
this -- thanks!
I have committed it the url,
https://bugzilla.kernel.org/show_bug.cgi?id=40212
John
--
John W. Linville Someday the world will need a hero, and you
linville@tuxdriver.com might be all we have. Be ready.