|
@@ -101,27 +101,32 @@ void wlan_cfg80211_tdls_osif_priv_deinit(struct wlan_objmgr_vdev *vdev)
|
|
osif_priv->osif_tdls = NULL;
|
|
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 vdev_osif_priv *osif_priv;
|
|
struct osif_tdls_vdev *tdls_priv;
|
|
struct osif_tdls_vdev *tdls_priv;
|
|
QDF_STATUS status;
|
|
QDF_STATUS status;
|
|
unsigned long rc;
|
|
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;
|
|
return;
|
|
-
|
|
|
|
|
|
+ }
|
|
osif_priv = wlan_vdev_get_ospriv(vdev);
|
|
osif_priv = wlan_vdev_get_ospriv(vdev);
|
|
|
|
|
|
tdls_priv = osif_priv->osif_tdls;
|
|
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);
|
|
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)) {
|
|
if (QDF_IS_STATUS_ERROR(status)) {
|
|
cfg80211_err("ucfg_tdls_teardown_links failed err %d", 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",
|
|
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) {
|
|
if (0 == rc) {
|
|
cfg80211_err(" Teardown Completion timed out rc: %ld", rc);
|
|
cfg80211_err(" Teardown Completion timed out rc: %ld", rc);
|
|
- return;
|
|
|
|
|
|
+ goto release_ref;
|
|
}
|
|
}
|
|
|
|
|
|
cfg80211_debug("TDLS teardown completion status %ld ", rc);
|
|
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)
|
|
void hdd_notify_tdls_reset_adapter(struct wlan_objmgr_vdev *vdev)
|