Message ID | nycvar.YFH.7.76.2103021025410.12405@cbobk.fhfr.pm (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Kalle Valo |
Headers | show |
Series | iwlwifi: don't call netif_napi_add() with rxq->lock held (was Re: Lockdep warning in iwl_pcie_rx_handle()) | expand |
On Tue, 2021-03-02 at 10:27 +0100, Jiri Kosina wrote: > On Mon, 1 Mar 2021, Johannes Berg wrote: > > > > I am getting the splat below with Linus' tree as of today (5.11-rc1, > > > fe07bfda2fb). I haven't started to look into the code yet, but apparently > > > this has been already reported by Heiner here: > > > > > > https://www.spinics.net/lists/linux-wireless/msg208353.html > > > > > > so before I start digging deep into it (the previous kernel this > > > particular machine had is 5.9, so I'd rather avoid lenghty bisect for now > > > in case someone has already looked into it and has ideas where the problem > > > is), I thought I'd ask whether this has been root-caused elsewhere > > > already. > > > > Yeah, I'm pretty sure we have a fix for this, though I'm not sure right > > now where it is in the pipeline. > > > > It's called "iwlwifi: pcie: don't add NAPI under rxq->lock" but right > > now I can't find it in any of the public archives. > > I was not able to find that patch anywhere indeed, but in the meantime I > fixed it by the patch below. Please consider merging either of the fixes. I checked my queue and I realized that the patch Johannes mentioned was marked as a fix for a fix and my script had issues with recursive fixes. It normally squashes fixes to patches before the latter are sent out. My bad. Kalle, please take Jiri's v2 to wireless-drivers.git. I'll give my ack separately in reply to v2. -- Cheers, Luca.
diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c index 1bccaa034284..6262dd9043aa 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/rx.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/rx.c @@ -1063,11 +1063,12 @@ static int _iwl_pcie_rx_init(struct iwl_trans *trans) iwl_pcie_rx_init_rxb_lists(rxq); + spin_unlock_bh(&rxq->lock); + if (!rxq->napi.poll) netif_napi_add(&trans_pcie->napi_dev, &rxq->napi, iwl_pcie_dummy_napi_poll, 64); - spin_unlock_bh(&rxq->lock); } /* move the pool to the default queue and allocator ownerships */