Sfoglia il codice sorgente

qcacld-3.0: Release MLD sta info

Currently, sta_info is allocated for MLD address but never freed. Add
logic to free the station info for MLD address too.

Change-Id: If957bb5e77e83f2bf272f2d4d58bd3ab8d5e19e0
CRs-fixed: 3059099
Lincoln Tran 3 anni fa
parent
commit
289154d1c8
2 ha cambiato i file con 22 aggiunte e 1 eliminazioni
  1. 20 1
      core/hdd/src/wlan_hdd_hostapd.c
  2. 2 0
      core/hdd/src/wlan_hdd_sta_info.h

+ 20 - 1
core/hdd/src/wlan_hdd_hostapd.c

@@ -1632,6 +1632,8 @@ static void hdd_fill_station_info(struct hdd_adapter *adapter,
 		}
 	}
 
+	qdf_mem_copy(&stainfo->mld_addr, &event->sta_mld, QDF_MAC_ADDR_SIZE);
+
 	cache_sta_info =
 		hdd_get_sta_info_by_mac(&adapter->cache_sta_info_list,
 					event->staMac.bytes,
@@ -1909,7 +1911,8 @@ QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event,
 	tSap_StationSetKeyCompleteEvent *key_complete;
 	int ret = 0;
 	tSap_StationDisassocCompleteEvent *disassoc_comp;
-	struct hdd_station_info *stainfo, *cache_stainfo, *tmp = NULL;
+	struct hdd_station_info *stainfo, *cache_stainfo, *tmp = NULL,
+				*mld_sta_info;
 	mac_handle_t mac_handle;
 	struct sap_config *sap_config;
 	struct sap_context *sap_ctx = NULL;
@@ -2573,6 +2576,22 @@ QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event,
 			return QDF_STATUS_E_INVAL;
 		}
 
+		if (wlan_vdev_mlme_is_mlo_vdev(adapter->vdev)) {
+			mld_sta_info = hdd_get_sta_info_by_mac(
+						&adapter->sta_info_list,
+						stainfo->mld_addr.bytes,
+						STA_INFO_HOSTAPD_SAP_EVENT_CB);
+			if (!mld_sta_info) {
+				hdd_debug("Failed to find the MLD station");
+			} else {
+				hdd_softap_deregister_sta(adapter,
+							  &mld_sta_info);
+				hdd_put_sta_info_ref(&adapter->sta_info_list,
+						&mld_sta_info, true,
+						STA_INFO_HOSTAPD_SAP_EVENT_CB);
+			}
+		}
+
 		/* Send DHCP STOP indication to FW */
 		stainfo->dhcp_phase = DHCP_PHASE_ACK;
 		if (stainfo->dhcp_nego_status ==

+ 2 - 0
core/hdd/src/wlan_hdd_sta_info.h

@@ -169,6 +169,7 @@ char *sta_info_string_from_dbgid(wlan_sta_info_dbgid id);
  *           Broadcast uses station ID zero by default.
  * @sta_type: Type of station i.e. p2p client or infrastructure station
  * @sta_mac: MAC address of the station
+ * @mld_addr: MLD address of the station
  * @peer_state: Current Station state so HDD knows how to deal with packet
  *              queue. Most recent states used to change TLSHIM STA state.
  * @is_qos_enabled: Track QoS status of station
@@ -236,6 +237,7 @@ struct hdd_station_info {
 	uint8_t sta_id;
 	eStationType sta_type;
 	struct qdf_mac_addr sta_mac;
+	struct qdf_mac_addr mld_addr;
 	enum ol_txrx_peer_state peer_state;
 	bool is_qos_enabled;
 	bool is_deauth_in_progress;