Search Linux Wireless

Re: [PATCH v5 1/3] wifi: ath12k: prepare vif data structure for MLO handling

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

 





On 7/11/2024 10:56 AM, Jeff Johnson wrote:
On 7/9/2024 5:06 AM, Rameshkumar Sundaram wrote:
...
@@ -4569,12 +4685,17 @@ static int ath12k_mac_op_sta_state(struct ieee80211_hw *hw,
  				   enum ieee80211_sta_state old_state,
  				   enum ieee80211_sta_state new_state)
  {
+	struct ath12k_hw *ah = ath12k_hw_to_ah(hw);
+	struct ath12k_vif *ahvif = ath12k_vif_to_ahvif(vif);
  	struct ath12k *ar;
-	struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif);
  	struct ath12k_sta *arsta = ath12k_sta_to_arsta(sta);
+	struct ath12k_link_vif *arvif;
  	struct ath12k_peer *peer;
  	int ret = 0;
+ mutex_lock(&ah->conf_mutex);
+	arvif = &ahvif->deflink;
+
  	/* cancel must be done outside the mutex to avoid deadlock */

this is now inside the ah->conf_mutex -- is that ok?
seems this comment should be updated to explain *which* mutex(es) the cancel
must be done outside of?

ah->conf_mutex is not acquired in ath12k_sta_rc_update_wk() so cancel work will not result is lockup here.
Will update the comment with lock specifics.
  	if ((old_state == IEEE80211_STA_NONE &&
  	     new_state == IEEE80211_STA_NOTEXIST))
@@ -4583,9 +4704,9 @@ static int ath12k_mac_op_sta_state(struct ieee80211_hw *hw,
  	ar = ath12k_get_ar_by_vif(hw, vif);
  	if (!ar) {
  		WARN_ON_ONCE(1);
+		mutex_unlock(&ah->conf_mutex);

unlock before the WARN -- the WARN is not part of the critical section

Sure, will change this in next version.
  		return -EINVAL;
  	}
-
  	mutex_lock(&ar->conf_mutex);
if (old_state == IEEE80211_STA_NOTEXIST &&





[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux