[PATCH 3/8] wifi: ath12k: Refactor sta state machine
Baochen Qiang
quic_bqiang at quicinc.com
Wed Oct 23 19:58:56 PDT 2024
On 10/23/2024 9:29 PM, Kalle Valo wrote:
> +static void ath12k_mac_station_post_remove(struct ath12k *ar,
> + struct ath12k_link_vif *arvif,
> + struct ath12k_link_sta *arsta)
> +{
> + struct ieee80211_vif *vif = ath12k_ahvif_to_vif(arvif->ahvif);
> + struct ieee80211_sta *sta = ath12k_ahsta_to_sta(arsta->ahsta);
> + struct ath12k_sta *ahsta = arsta->ahsta;
> + struct ath12k_peer *peer;
> +
> + lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
> +
> + ath12k_mac_dec_num_stations(arvif, arsta);
> +
> + spin_lock_bh(&ar->ab->base_lock);
> +
> + peer = ath12k_peer_find(ar->ab, arvif->vdev_id, sta->addr);
> + if (peer && peer->sta == sta) {
> + ath12k_warn(ar->ab, "Found peer entry %pM n vdev %i after it was supposedly removed\n",
> + vif->addr, arvif->vdev_id);
> + peer->sta = NULL;
> + list_del(&peer->list);
> + kfree(peer);
> + ar->num_peers--;
> + }
> +
> + spin_unlock_bh(&ar->ab->base_lock);
> +
> + kfree(arsta->rx_stats);
> + arsta->rx_stats = NULL;
> +
> + if (arsta->link_id < IEEE80211_MLD_MAX_NUM_LINKS) {
> + rcu_assign_pointer(ahsta->link[arsta->link_id], NULL);
> + synchronize_rcu();
> + ahsta->links_map &= ~(BIT(arsta->link_id));
should we put this ahead of rcu_assign_pointer()?
> + arsta->link_id = ATH12K_INVALID_LINK_ID;
> + arsta->ahsta = NULL;
> + }
> +}
> +
More information about the ath12k
mailing list