2011/7/27 John W. Linville<linville@xxxxxxxxxxxxx>:On Wed, Jul 27, 2011 at 05:20:15PM +0800, hubert Liao wrote:Yes, I think it should be initialized when added the pci bus bridge,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.
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?