From adb7fa76fddcb6fdddbd7f594bd49d1f1e2ab676 Mon Sep 17 00:00:00 2001 From: Yue Ma Date: Tue, 3 Dec 2013 11:33:16 -0800 Subject: qcacld: Fix a bug for SSR When SSR happens, all the cfg80211 callback funtions will check if the isLogpInProgress variable in HDD context set to TRUE, if it is, they will return. The HDD context should be gotten from the private data pointer of wiphy, not from the pointer in current adapter, since during SSR all the adapters will be reset, so this check won't take effect. Change-Id: Ie74383b9369cdba87ca1ca956875137b49248645 CRs-Fixed: 562329 --- CORE/HDD/src/wlan_hdd_cfg80211.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index cab47699ab02..75838aa6e45a 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -6329,9 +6329,9 @@ static int wlan_hdd_cfg80211_get_txpower(struct wiphy *wiphy, static int wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, struct net_device *dev, u8* mac, struct station_info *sinfo) { - hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR( dev ); - hdd_station_ctx_t *pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); - int ssidlen = pHddStaCtx->conn_info.SSID.SSID.length; + hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev); + hdd_station_ctx_t *pHddStaCtx; + int ssidlen; tANI_U8 rate_flags; hdd_context_t *pHddCtx = (hdd_context_t*) wiphy_priv(wiphy); @@ -6359,6 +6359,27 @@ static int wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, struct net_device ENTER(); + if (pHddCtx->isLogpInProgress) + { + VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s:LOGP in Progress. Ignore!!!", __func__); + return -EAGAIN; + } + + if (NULL == pAdapter) + { + hddLog(VOS_TRACE_LEVEL_FATAL, "%s: pAdapter is NULL!", __func__); + return -EINVAL;; + } + + pHddStaCtx = WLAN_HDD_GET_STATION_CTX_PTR(pAdapter); + if (NULL == pHddStaCtx) + { + hddLog(VOS_TRACE_LEVEL_FATAL, "%s: pHddStaCtx is NULL!", __func__); + return -EINVAL;; + } + + ssidlen = pHddStaCtx->conn_info.SSID.SSID.length; if ((eConnectionState_Associated != pHddStaCtx->conn_info.connState) || (0 == ssidlen)) { @@ -6368,13 +6389,6 @@ static int wlan_hdd_cfg80211_get_station(struct wiphy *wiphy, struct net_device return 0; } - if ( (WLAN_HDD_GET_CTX(pAdapter))->isLogpInProgress ) - { - VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, - "%s:LOGP in Progress. Ignore!!!", __func__); - return -EAGAIN; - } - wlan_hdd_get_rssi(pAdapter, &sinfo->signal); sinfo->filled |= STATION_INFO_SIGNAL; -- cgit v1.2.3