iwlwifi: pnvm: don't try to load after failures
authorJohannes Berg <johannes.berg@intel.com>
Fri, 15 Jan 2021 11:05:51 +0000 (13:05 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Mon, 25 Jan 2021 13:52:56 +0000 (15:52 +0200)
If loading the PNVM file failed on the first try during the
interface up, the file is unlikely to show up later, and we
already don't try to reload it if it changes, so just don't
try loading it again and again.

This also fixes some issues where we may try to load it at
resume time, which may not be possible yet.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Fixes: 6972592850c0 ("iwlwifi: read and parse PNVM file")
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/iwlwifi.20210115130252.5ac6828a0bbe.I7d308358b21d3c0c84b1086999dbc7267f86e219@changeid
drivers/net/wireless/intel/iwlwifi/fw/pnvm.c

index ebd1a09a2fb8af29e98d35bb5eca7a515ab5d7e4..895a907acdf0fb881b667b0025923b7635c71e50 100644 (file)
@@ -232,7 +232,7 @@ int iwl_pnvm_load(struct iwl_trans *trans,
        if (!trans->sku_id[0] && !trans->sku_id[1] && !trans->sku_id[2])
                return 0;
 
-       /* load from disk only if we haven't done it before */
+       /* load from disk only if we haven't done it (or tried) before */
        if (!trans->pnvm_loaded) {
                const struct firmware *pnvm;
                char pnvm_name[64];
@@ -253,6 +253,12 @@ int iwl_pnvm_load(struct iwl_trans *trans,
                if (ret) {
                        IWL_DEBUG_FW(trans, "PNVM file %s not found %d\n",
                                     pnvm_name, ret);
+                       /*
+                        * Pretend we've loaded it - at least we've tried and
+                        * couldn't load it at all, so there's no point in
+                        * trying again over and over.
+                        */
+                       trans->pnvm_loaded = true;
                } else {
                        iwl_pnvm_parse(trans, pnvm->data, pnvm->size);