qcacld-3.0: Do not invoke the kernel registered function from driver

Netdev-ops/cfg80211-ops are registered to the kernel and should
be invoked only by the kernel in the context of the user.
In this scenario during SSR as part of cfg80211_stop_ap for p2p_go
the driver is directly invoking hdd_hostapd_stop(netdev ops) which
clears the DEVICE_OPENED flag, which should be done only if the
INTERFACE_DOWN is triggered by the kernel. To resolve this
directly stop the queues rather than using the netdev ops.

Change-Id: I1d9349a2c52fe8de17313bdced494ccd5bc9d641
CRs-Fixed: 1114722
This commit is contained in:
Arunk Khandavalli
2017-01-23 20:48:48 +05:30
committed by qcabuildsw
parent 17eab830e9
commit 0dd8c01127

View File

@@ -2101,7 +2101,10 @@ stopbss:
/* Stop the pkts from n/w stack as we are going to free all of
* the TX WMM queues for all STAID's
*/
hdd_hostapd_stop(dev);
hdd_notice("Disabling queues");
wlan_hdd_netif_queue_control(pHostapdAdapter,
WLAN_NETIF_TX_DISABLE_N_CARRIER,
WLAN_CONTROL_PATH);
/* reclaim all resources allocated to the BSS */
qdf_status = hdd_softap_stop_bss(pHostapdAdapter);
@@ -7852,7 +7855,10 @@ static int __wlan_hdd_cfg80211_stop_ap(struct wiphy *wiphy,
wlan_hdd_undo_acs(pAdapter);
qdf_mem_zero(&pAdapter->sessionCtx.ap.sapConfig.acs_cfg,
sizeof(struct sap_acs_cfg));
hdd_hostapd_stop(dev);
/* Stop all tx queues */
hdd_notice("Disabling queues");
wlan_hdd_netif_queue_control(pAdapter, WLAN_NETIF_TX_DISABLE_N_CARRIER,
WLAN_CONTROL_PATH);
old = pAdapter->sessionCtx.ap.beacon;
if (!old) {