Patch "wifi: iwlwifi: clear trans->state earlier upon error" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    wifi: iwlwifi: clear trans->state earlier upon error

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     wifi-iwlwifi-clear-trans-state-earlier-upon-error.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit ae0409853c28b2c804c175e2197552069d038ec3
Author: Emmanuel Grumbach <emmanuel.grumbach@xxxxxxxxx>
Date:   Sun Aug 25 19:17:01 2024 +0300

    wifi: iwlwifi: clear trans->state earlier upon error
    
    [ Upstream commit 094513f8a2fbddee51b055d8035f995551f98fce ]
    
    When the firmware crashes, we first told the op_mode and only then,
    changed the transport's state. This is a problem if the op_mode's
    nic_error() handler needs to send a host command: it'll see that the
    transport's state still reflects that the firmware is alive.
    
    Today, this has no consequences since we set the STATUS_FW_ERROR bit and
    that will prevent sending host commands. iwl_fw_dbg_stop_restart_recording
    looks at this bit to know not to send a host command for example.
    
    To fix the hibernation, we needed to reset the firmware without having
    an error and checking STATUS_FW_ERROR to see whether the firmware is
    alive will no longer hold, so this change is necessary as well.
    
    Change the flow a bit.
    Change trans->state before calling the op_mode's nic_error() method and
    check trans->state instead of STATUS_FW_ERROR. This will keep the
    current behavior of iwl_fw_dbg_stop_restart_recording upon firmware
    error, and it'll allow us to call iwl_fw_dbg_stop_restart_recording
    safely even if STATUS_FW_ERROR is clear, but yet, the firmware is not
    alive.
    
    Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@xxxxxxxxx>
    Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@xxxxxxxxx>
    Link: https://patch.msgid.link/20240825191257.9d7427fbdfd7.Ia056ca57029a382c921d6f7b6a6b28fc480f2f22@changeid
    [I missed this was a dependency for the hibernation fix, changed
     the commit message a bit accordingly]
    Signed-off-by: Johannes Berg <johannes.berg@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
index f34a02b33ccd4..fc630a0d9c83c 100644
--- a/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
+++ b/drivers/net/wireless/intel/iwlwifi/fw/dbg.c
@@ -2862,7 +2862,7 @@ void iwl_fw_dbg_stop_restart_recording(struct iwl_fw_runtime *fwrt,
 {
 	int ret __maybe_unused = 0;
 
-	if (test_bit(STATUS_FW_ERROR, &fwrt->trans->status))
+	if (!iwl_trans_fw_running(fwrt->trans))
 		return;
 
 	if (fw_has_capa(&fwrt->fw->ucode_capa,
diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
index a2919a32d7081..d2b31599340fc 100644
--- a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
+++ b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h
@@ -1393,8 +1393,8 @@ static inline void iwl_trans_fw_error(struct iwl_trans *trans, bool sync)
 
 	/* prevent double restarts due to the same erroneous FW */
 	if (!test_and_set_bit(STATUS_FW_ERROR, &trans->status)) {
-		iwl_op_mode_nic_error(trans->op_mode, sync);
 		trans->state = IWL_TRANS_NO_FW;
+		iwl_op_mode_nic_error(trans->op_mode, sync);
 	}
 }
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux