On Thu, 2010-11-18 at 15:19 +0200, juuso.oikarinen@xxxxxxxxx wrote: > From: Juuso Oikarinen <juuso.oikarinen@xxxxxxxxx> > > It is possible that the op_remove_interface function is invoked exactly at > the same time has hw recovery is started. In this case it is possible for the > interface to be already removed in the op_remove_interface call, which > currently leads to a kernel warning and a subsequent kernel crash. > > Fix this by ignoring the op_remove_interface call if the interface is already > down at that point. > > Signed-off-by: Juuso Oikarinen <juuso.oikarinen@xxxxxxxxx> > --- [...] > diff --git a/drivers/net/wireless/wl12xx/main.c b/drivers/net/wireless/wl12xx/main.c > index 31f0e2f..11b0477 100644 > --- a/drivers/net/wireless/wl12xx/main.c > +++ b/drivers/net/wireless/wl12xx/main.c > @@ -1157,10 +1157,16 @@ static void wl1271_op_remove_interface(struct ieee80211_hw *hw, > struct wl1271 *wl = hw->priv; > > mutex_lock(&wl->mutex); > - WARN_ON(wl->vif != vif); > - __wl1271_op_remove_interface(wl); > - mutex_unlock(&wl->mutex); > + /* > + * wl->vif can be null here if someone shuts down the interface > + * just when hardware recovery has been started. > + */ > + if (wl->vif) { > + WARN_ON(wl->vif != vif); > + __wl1271_op_remove_interface(wl); > + } Should you still remove the interface if the vif you received is wrong? Surely, something is totally wrong if you get a different vif, but maybe removing the interface here will just confuse things even more? > + mutex_unlock(&wl->mutex); > cancel_work_sync(&wl->recovery_work); > } > -- Cheers, Luca. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html