Neil Horman wrote:
How do you figure? bnx2_cnic_probe is only called from is_cnic_dev
(which still
makes me shake my head a bit). is_cnic_dev is only called from
cnic_netdev_event, which holds the rtnl_lock. Since the event we
trigger on is
called from NETDEV_REGISTER or NETDEV_UP, I don't see how we can wind
up
suspending the device prior to caling bnx2_cnic_probe.
Consider NETDEV_REGISTER -> NETDEV_UP -> NETDEV_DOWN
During NETDEV_DOWN, we shutdown the device, but the netdev is still
registered.
Then we load cnic. The NETDEV events will be replayed when we call
netdev_register_notifier() and cnic will get the NETDEV_REGISTER event.
We'll then call bnx2_cnic_probe() but the device is down.