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:

committato da
nshrivas

parent
8280a15953
commit
9bb9c05e83
@@ -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)
|
||||
{
|
||||
|
||||
}
|
||||
|
@@ -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)
|
||||
|
Fai riferimento in un nuovo problema
Block a user