iwlwifi: pcie: fix rb_allocator workqueue allocation
authorJohannes Berg <johannes.berg@intel.com>
Fri, 28 Feb 2020 23:24:54 +0000 (04:54 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 11 Mar 2020 06:53:00 +0000 (07:53 +0100)
commit 8188a18ee2e48c9a7461139838048363bfce3fef upstream

We don't handle failures in the rb_allocator workqueue allocation
correctly. To fix that, move the code earlier so the cleanup is
easier and we don't have to undo all the interrupt allocations in
this case.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
[Ajay: Rewrote this patch for v4.9.y, as 4.9.y codebase is different from mainline]
Signed-off-by: Ajay Kaher <akaher@vmware.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/intel/iwlwifi/pcie/rx.c

index a2ebe46bcfc5b89267d2ea77a92a0012230b3fc5..395bbe2c0f983a5767842ba944e8ac48b8fb6966 100644 (file)
@@ -898,9 +898,13 @@ int iwl_pcie_rx_init(struct iwl_trans *trans)
                        return err;
        }
        def_rxq = trans_pcie->rxq;
-       if (!rba->alloc_wq)
+       if (!rba->alloc_wq) {
                rba->alloc_wq = alloc_workqueue("rb_allocator",
                                                WQ_HIGHPRI | WQ_UNBOUND, 1);
+               if (!rba->alloc_wq)
+                       return -ENOMEM;
+       }
+
        INIT_WORK(&rba->rx_alloc, iwl_pcie_rx_allocator_work);
 
        cancel_work_sync(&rba->rx_alloc);