qcacld-3.0: Move allocation of tdls private to tdls component

Presently osif tdls memory is freed as part of the osif_priv
when the vdev is logically destroyed. There is case seen
wherein the  tdls is holding vdev reference and in the other
thread the  interface down is received and the osif_priv is
freed resulting in the tdls osif priv also, if the other thread
tries to dereference the tdls os priv it will result
null pointer exception.

Move the tdls osif priv memory creation/deletion to the tdls component.

Change-Id: I3782f6304bee5a6eaab4d9122a569ba56fd29947
CRs-Fixed: 2436379
这个提交包含在:
Arun Kumar Khandavalli
2019-04-24 18:34:18 +05:30
提交者 nshrivas
父节点 f151174be6
当前提交 43fdd25d72
修改 8 个文件,包含 67 行新增34 行删除

查看文件

@@ -609,6 +609,26 @@ typedef QDF_STATUS
/* This callback is to release vdev ref for tdls offchan param related msg */
typedef void (*tdls_offchan_parms_callback)(struct wlan_objmgr_vdev *vdev);
/**
* tdls_vdev_init_cb() - Callback for initializing the tdls private structure
* @vdev: vdev object
*
* This callback will be used to create the vdev private object and store
* in os_priv.
*
* Return: QDF_STATUS
*/
typedef QDF_STATUS (*tdls_vdev_init_cb)(struct wlan_objmgr_vdev *vdev);
/**
* tdls_vdev_deinit_cb() - Callback for deinitializing the tdls private struct
* @vdev: vdev object
*
* This callback will be used to destroy the vdev private object.
*
* Return: None
*/
typedef void (*tdls_vdev_deinit_cb)(struct wlan_objmgr_vdev *vdev);
/**
* struct tdls_start_params - tdls start params
* @config: tdls user config
@@ -624,6 +644,8 @@ typedef void (*tdls_offchan_parms_callback)(struct wlan_objmgr_vdev *vdev);
* @tdls_reg_peer: register tdls peer with datapath
* @tdls_dereg_peer: deregister tdls peer from datapath
* @tdls_dp_vdev_update: update vdev flags in datapath
* @tdls_osif_init_cb: callback to initialize the tdls priv
* @tdls_osif_deinit_cb: callback to deinitialize the tdls priv
*/
struct tdls_start_params {
struct tdls_user_config config;
@@ -643,6 +665,8 @@ struct tdls_start_params {
tdls_register_peer_callback tdls_reg_peer;
tdls_deregister_peer_callback tdls_dereg_peer;
tdls_dp_vdev_update_flags_callback tdls_dp_vdev_update;
tdls_vdev_init_cb tdls_osif_init_cb;
tdls_vdev_deinit_cb tdls_osif_deinit_cb;
};
/**