iwlwifi: pcie: don't crash on invalid RX interrupt
If for some reason the device gives us an RX interrupt before we're ready for it, perhaps during device power-on with misconfigured IRQ causes mapping or so, we can crash trying to access the queues. Prevent that by checking that we actually have RXQs and that they were properly allocated. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
c5bf4fa142
commit
30f24eabab
|
@ -1429,10 +1429,15 @@ out_err:
|
||||||
static void iwl_pcie_rx_handle(struct iwl_trans *trans, int queue)
|
static void iwl_pcie_rx_handle(struct iwl_trans *trans, int queue)
|
||||||
{
|
{
|
||||||
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||||
struct iwl_rxq *rxq = &trans_pcie->rxq[queue];
|
struct iwl_rxq *rxq;
|
||||||
u32 r, i, count = 0;
|
u32 r, i, count = 0;
|
||||||
bool emergency = false;
|
bool emergency = false;
|
||||||
|
|
||||||
|
if (WARN_ON_ONCE(!trans_pcie->rxq || !trans_pcie->rxq[queue].bd))
|
||||||
|
return;
|
||||||
|
|
||||||
|
rxq = &trans_pcie->rxq[queue];
|
||||||
|
|
||||||
restart:
|
restart:
|
||||||
spin_lock(&rxq->lock);
|
spin_lock(&rxq->lock);
|
||||||
/* uCode's read index (stored in shared DRAM) indicates the last Rx
|
/* uCode's read index (stored in shared DRAM) indicates the last Rx
|
||||||
|
|
Loading…
Reference in New Issue