[PATCH 37/76] staging: rtl8723au: Do not embed struct wlan_bssid_ex in struct survey_event

Jes.Sorensen at redhat.com Jes.Sorensen at redhat.com
Mon Jun 9 13:16:29 UTC 2014


From: Jes Sorensen <Jes.Sorensen at redhat.com>

Instead allocate it separately and reference it from survey_event.
This will allow for us to pass it on later without having to copy it.

Signed-off-by: Jes Sorensen <Jes.Sorensen at redhat.com>
---
 drivers/staging/rtl8723au/core/rtw_mlme.c     | 5 ++++-
 drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 9 +++++++--
 drivers/staging/rtl8723au/include/rtw_event.h | 2 +-
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 639dfca..71ff753 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -640,7 +640,7 @@ void rtw_survey_event_cb23a(struct rtw_adapter *adapter, const u8 *pbuf)
 	struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
 	struct survey_event *survey = (struct survey_event *)pbuf;
 
-	pnetwork = &survey->bss;
+	pnetwork = survey->bss;
 
 	RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,
 		 ("rtw_survey_event_cb23a, ssid=%s\n", pnetwork->Ssid.ssid));
@@ -691,6 +691,9 @@ exit:
 
 	spin_unlock_bh(&pmlmepriv->lock);
 
+	kfree(survey->bss);
+	survey->bss = NULL;
+
 	return;
 }
 
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 693a1a4..9b6d918 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -4898,14 +4898,19 @@ void report_survey_event23a(struct rtw_adapter *padapter,
 	pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq);
 
 	psurvey_evt = (struct survey_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
+	psurvey_evt->bss = kzalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC);
+	if (!psurvey_evt->bss) {
+		kfree(pcmd_obj);
+		kfree(pevtcmd);
+	}
 
-	if (collect_bss_info23a(padapter, precv_frame, &psurvey_evt->bss) == _FAIL) {
+	if (collect_bss_info23a(padapter, precv_frame, psurvey_evt->bss) == _FAIL) {
 		kfree(pcmd_obj);
 		kfree(pevtcmd);
 		return;
 	}
 
-	process_80211d(padapter, &psurvey_evt->bss);
+	process_80211d(padapter, psurvey_evt->bss);
 
 	rtw_enqueue_cmd23a(pcmdpriv, pcmd_obj);
 
diff --git a/drivers/staging/rtl8723au/include/rtw_event.h b/drivers/staging/rtl8723au/include/rtw_event.h
index 807cc83..4557aec 100644
--- a/drivers/staging/rtl8723au/include/rtw_event.h
+++ b/drivers/staging/rtl8723au/include/rtw_event.h
@@ -22,7 +22,7 @@
 Used to report a bss has been scanned
 */
 struct survey_event {
-	struct wlan_bssid_ex bss;
+	struct wlan_bssid_ex *bss;
 };
 
 /*
-- 
1.9.3



More information about the devel mailing list