qcacld-3.0: Pass psoc instead of vdev for teardown links

As part of start_ap or connect_start to teardown active tdls peers
hdd_notify_teardown_tdls_links is called with argument vdev. But
TDLS might not be enabled on that vdev. With recent changes,
osif_priv object is initialized as part of tdls_vdev_init.
For the new interface if TDLS is not initialized then osif_priv
object will not be found and TDLS peers are not removed.

Change-Id: Idcf690bba2766664700a4851d390ee620f2fe73a
CRs-Fixed: 2460108
This commit is contained in:
Bala Venkatesh
2019-05-27 14:16:40 +05:30
committato da nshrivas
parent 8280a15953
commit 9bb9c05e83
9 ha cambiato i file con 69 aggiunte e 45 eliminazioni

Vedi File

@@ -261,14 +261,14 @@ void hdd_notify_sta_disconnect(uint8_t session_id,
/**
* hdd_notify_teardown_tdls_links() - notify TDLS to teardown links
* @vdev: vdev object manager
* @psoc: psoc object
*
* Notify tdls to teardown all the links, due to certain events
* in the system
*
* Return: None
*/
void hdd_notify_teardown_tdls_links(struct wlan_objmgr_vdev *vdev);
void hdd_notify_teardown_tdls_links(struct wlan_objmgr_psoc *psoc);
#else /* FEATURE_WLAN_TDLS */
static inline
@@ -312,7 +312,7 @@ int wlan_cfg80211_tdls_configure_mode(struct wlan_objmgr_vdev *vdev,
}
static inline
void hdd_notify_teardown_tdls_links(struct wlan_objmgr_vdev *vdev)
void hdd_notify_teardown_tdls_links(struct wlan_objmgr_psoc *psoc)
{
}

Vedi File

@@ -101,27 +101,32 @@ void wlan_cfg80211_tdls_osif_priv_deinit(struct wlan_objmgr_vdev *vdev)
osif_priv->osif_tdls = NULL;
}
void hdd_notify_teardown_tdls_links(struct wlan_objmgr_vdev *vdev)
void hdd_notify_teardown_tdls_links(struct wlan_objmgr_psoc *psoc)
{
struct vdev_osif_priv *osif_priv;
struct osif_tdls_vdev *tdls_priv;
QDF_STATUS status;
unsigned long rc;
struct wlan_objmgr_vdev *vdev;
if (!vdev)
vdev = ucfg_get_tdls_vdev(psoc, WLAN_OSIF_ID);
if (!vdev) {
cfg80211_err("Unable to get the vdev");
return;
}
osif_priv = wlan_vdev_get_ospriv(vdev);
tdls_priv = osif_priv->osif_tdls;
if (!tdls_priv)
return;
if (!tdls_priv) {
cfg80211_err("tdls priv is NULL");
goto release_ref;
}
reinit_completion(&tdls_priv->tdls_teardown_comp);
status = ucfg_tdls_teardown_links(vdev);
status = ucfg_tdls_teardown_links(psoc);
if (QDF_IS_STATUS_ERROR(status)) {
cfg80211_err("ucfg_tdls_teardown_links failed err %d", status);
return;
goto release_ref;
}
cfg80211_debug("Wait for tdls teardown completion. Timeout %u ms",
@@ -133,10 +138,14 @@ void hdd_notify_teardown_tdls_links(struct wlan_objmgr_vdev *vdev)
if (0 == rc) {
cfg80211_err(" Teardown Completion timed out rc: %ld", rc);
return;
goto release_ref;
}
cfg80211_debug("TDLS teardown completion status %ld ", rc);
release_ref:
wlan_objmgr_vdev_release_ref(vdev,
WLAN_OSIF_ID);
}
void hdd_notify_tdls_reset_adapter(struct wlan_objmgr_vdev *vdev)