iwlwifi: mvm: avoid clearing a just saved session protection id
authorShaul Triebitz <shaul.triebitz@intel.com>
Sat, 4 Dec 2021 11:10:47 +0000 (13:10 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jan 2022 10:04:37 +0000 (11:04 +0100)
[ Upstream commit 8e967c137df3b236d2075f9538cb888129425d1a ]

When scheduling a session protection the id is saved but
then it may be cleared when calling iwl_mvm_te_clear_data
(if a previous session protection is currently active).
Fix it by saving the id after calling iwl_mvm_te_clear_data.

Signed-off-by: Shaul Triebitz <shaul.triebitz@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20211204130722.b0743a588d14.I098fef6677d0dab3ef1b6183ed206a10bab01eb2@changeid
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/wireless/intel/iwlwifi/mvm/time-event.c

index f93f153..b8c645b 100644 (file)
@@ -1167,15 +1167,10 @@ void iwl_mvm_schedule_session_protection(struct iwl_mvm *mvm,
                        cpu_to_le32(FW_CMD_ID_AND_COLOR(mvmvif->id,
                                                        mvmvif->color)),
                .action = cpu_to_le32(FW_CTXT_ACTION_ADD),
+               .conf_id = cpu_to_le32(SESSION_PROTECT_CONF_ASSOC),
                .duration_tu = cpu_to_le32(MSEC_TO_TU(duration)),
        };
 
-       /* The time_event_data.id field is reused to save session
-        * protection's configuration.
-        */
-       mvmvif->time_event_data.id = SESSION_PROTECT_CONF_ASSOC;
-       cmd.conf_id = cpu_to_le32(mvmvif->time_event_data.id);
-
        lockdep_assert_held(&mvm->mutex);
 
        spin_lock_bh(&mvm->time_event_lock);
@@ -1189,6 +1184,11 @@ void iwl_mvm_schedule_session_protection(struct iwl_mvm *mvm,
        }
 
        iwl_mvm_te_clear_data(mvm, te_data);
+       /*
+        * The time_event_data.id field is reused to save session
+        * protection's configuration.
+        */
+       te_data->id = le32_to_cpu(cmd.conf_id);
        te_data->duration = le32_to_cpu(cmd.duration_tu);
        te_data->vif = vif;
        spin_unlock_bh(&mvm->time_event_lock);