qcacmn: Add debug support for vdev reference and release
Add function name and line number while taking/releasing references for vdev to trace Object Manager references Change-Id: Ie8a7d77db2f3c7b58536ab267c665299cb67152e
This commit is contained in:
@@ -354,13 +354,24 @@ QDF_STATUS wlan_objmgr_trigger_pdev_comp_priv_object_deletion(
|
||||
* Return: vdev pointer
|
||||
* NULL on FAILURE
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_pdev_debug(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id, dbgid) \
|
||||
wlan_objmgr_get_vdev_by_id_from_pdev_debug(pdev, \
|
||||
vdev_id, dbgid, __func__, __LINE__)
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_pdev(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_objmgr_get_vdev_by_id_from_pdev_no_state() - find vdev using id from
|
||||
* pdev
|
||||
* wlan_objmgr_get_vdev_by_id_from_pdev_no_state() - find vdev using id
|
||||
* from pdev
|
||||
* @pdev: PDEV object
|
||||
* @vdev_id: vdev id
|
||||
* @dbg_id: id of the caller
|
||||
@@ -374,9 +385,21 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_pdev(
|
||||
* Return: vdev pointer
|
||||
* NULL on FAILURE
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_pdev_no_state_debug(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_objmgr_get_vdev_by_id_from_pdev_no_state(pdev, \
|
||||
vdev_id, dbgid) \
|
||||
wlan_objmgr_get_vdev_by_id_from_pdev_no_state_debug(pdev, \
|
||||
vdev_id, dbgid, __func__, __LINE__)
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_pdev_no_state(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_objmgr_get_vdev_by_macaddr_from_pdev() - find vdev using macaddr
|
||||
@@ -393,9 +416,20 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_pdev_no_state(
|
||||
* Return: vdev pointer
|
||||
* NULL on FAILURE
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_pdev_debug(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t *macaddr,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *fnc, int ln);
|
||||
|
||||
#define wlan_objmgr_get_vdev_by_macaddr_from_pdev(pdev, macaddr, dbgid) \
|
||||
wlan_objmgr_get_vdev_by_macaddr_from_pdev_debug(pdev, macaddr, \
|
||||
dbgid, __func__, __LINE__)
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_pdev(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t *macaddr,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_objmgr_get_vdev_by_macaddr_from_pdev_no_state() - find vdev using
|
||||
@@ -413,9 +447,46 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_pdev(
|
||||
* Return: vdev pointer
|
||||
* NULL on FAILURE
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev
|
||||
*wlan_objmgr_get_vdev_by_macaddr_from_pdev_no_state_debug(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t *macaddr,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_objmgr_get_vdev_by_macaddr_from_pdev_no_state(pdev, macaddr, \
|
||||
dbgid) \
|
||||
wlan_objmgr_get_vdev_by_macaddr_from_pdev_no_state_debug(pdev, \
|
||||
macaddr, dbgid, __func__, __LINE__)
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_pdev_no_state(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t *macaddr,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_objmgr_pdev_get_first_vdev() - Get first vdev of pdev
|
||||
* @pdev: PDEV object
|
||||
* @dbg_id: Object Manager ref debug id
|
||||
*
|
||||
* API to get reference to first vdev of pdev.
|
||||
*
|
||||
* Return: reference to first vdev
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_pdev_get_first_vdev_debug(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_objmgr_pdev_get_first_vdev(pdev, dbgid) \
|
||||
wlan_objmgr_pdev_get_first_vdev_debug(pdev, dbgid, \
|
||||
__func__, __LINE__)
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_pdev_get_first_vdev(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_objmgr_pdev_get_comp_private_obj() - get pdev component private object
|
||||
@@ -795,19 +866,6 @@ QDF_STATUS wlan_objmgr_pdev_try_get_ref(struct wlan_objmgr_pdev *pdev,
|
||||
void wlan_objmgr_pdev_release_ref(struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid id);
|
||||
|
||||
/**
|
||||
* wlan_objmgr_pdev_get_first_vdev() - Get first vdev of pdev
|
||||
* @pdev: PDEV object
|
||||
* @dbg_id: Object Manager ref debug id
|
||||
*
|
||||
* API to get reference to first vdev of pdev.
|
||||
*
|
||||
* Return: reference to first vdev
|
||||
*/
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_pdev_get_first_vdev(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
|
||||
/**
|
||||
* wlan_objmgr_pdev_get_pdev_id() - get pdev id
|
||||
* @pdev: PDEV object
|
||||
|
@@ -896,10 +896,22 @@ struct wlan_objmgr_pdev *wlan_objmgr_get_pdev_by_macaddr_no_state(
|
||||
* Return: vdev pointer
|
||||
* NULL on FAILURE
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_opmode_from_psoc_debug(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
enum QDF_OPMODE opmode,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_objmgr_get_vdev_by_opmode_from_psoc(psoc, opmode, dbgid) \
|
||||
wlan_objmgr_get_vdev_by_opmode_from_psoc_debug(psoc, opmode, \
|
||||
dbgid, __func__, __LINE__)
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_opmode_from_psoc(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
enum QDF_OPMODE opmode,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_objmgr_get_vdev_by_id_from_psoc() - retrieve vdev by id
|
||||
@@ -916,9 +928,20 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_opmode_from_psoc(
|
||||
* Return: vdev pointer
|
||||
* NULL on FAILURE
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc_debug(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, dbgid) \
|
||||
wlan_objmgr_get_vdev_by_id_from_psoc_debug(psoc, vdev_id, \
|
||||
dbgid, __func__, __LINE__)
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_objmgr_get_vdev_by_id_from_psoc_no_state() - retrieve vdev by id
|
||||
@@ -936,9 +959,20 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc(
|
||||
* Return: vdev pointer
|
||||
* NULL on FAILURE
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc_no_state_debug(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_objmgr_get_vdev_by_id_from_psoc_no_state(psoc, vdev_id, dbgid) \
|
||||
wlan_objmgr_get_vdev_by_id_from_psoc_no_state_debug(psoc, \
|
||||
vdev_id, dbgid, __func__, __LINE__)
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc_no_state(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_objmgr_get_vdev_by_macaddr_from_psoc() - retrieve vdev by macaddr
|
||||
@@ -956,9 +990,21 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc_no_state(
|
||||
* Return: vdev pointer
|
||||
* NULL on FAILURE
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_psoc_debug(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
|
||||
uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_objmgr_get_vdev_by_macaddr_from_psoc(psoc, pdev_id, macaddr, \
|
||||
dbgid) \
|
||||
wlan_objmgr_get_vdev_by_macaddr_from_psoc_debug(psoc, pdev_id, \
|
||||
macaddr, dbgid, __func__, __LINE__)
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_psoc(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
|
||||
uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state() - retrieve vdev by
|
||||
@@ -978,9 +1024,22 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_psoc(
|
||||
* Return: vdev pointer
|
||||
* NULL on FAILURE
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev
|
||||
*wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state_debug(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
|
||||
uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state(psoc, pdev_id, \
|
||||
macaddr, dbgid) \
|
||||
wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state_debug(psoc, \
|
||||
pdev_id, macaddr, dbgid, __func__, __LINE__)
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
|
||||
uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_psoc_obj_lock() - Acquire PSOC spinlock
|
||||
|
@@ -232,7 +232,6 @@
|
||||
/* Invalid VDEV identifier */
|
||||
#define WLAN_INVALID_VDEV_ID 255
|
||||
|
||||
|
||||
/**
|
||||
* struct wlan_vdev_create_params - Create params, HDD/OSIF passes this
|
||||
* structure While creating VDEV
|
||||
@@ -576,34 +575,6 @@ static inline struct wlan_objmgr_vdev *wlan_pdev_vdev_list_peek_head(
|
||||
return vdev;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_pdev_peek_active_first_vdev() - get first active vdev from pdev list
|
||||
* @pdev: PDEV object
|
||||
* @dbg_id: id of the caller
|
||||
*
|
||||
* API to get the head active vdev of given pdev (of pdev's vdev list)
|
||||
*
|
||||
* Return:
|
||||
*/
|
||||
struct wlan_objmgr_vdev *wlan_pdev_peek_active_first_vdev(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
|
||||
/**
|
||||
* wlan_pdev_vdev_list_peek_active_head() - get first active vdev from pdev list
|
||||
* @vdev: VDEV object
|
||||
* @vdev_list: qdf_list_t
|
||||
* @dbg_id: id of the caller
|
||||
*
|
||||
* API to get the head active vdev of given vdev (of pdev's vdev list)
|
||||
*
|
||||
* Return:
|
||||
* @peer: head peer
|
||||
*/
|
||||
struct wlan_objmgr_vdev *wlan_pdev_vdev_list_peek_active_head(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *vdev_list,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
|
||||
/**
|
||||
* wlan_vdev_get_next_vdev_of_pdev() - get next vdev
|
||||
@@ -637,23 +608,6 @@ static inline struct wlan_objmgr_vdev *wlan_vdev_get_next_vdev_of_pdev(
|
||||
return vdev_next;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_vdev_get_next_active_vdev_of_pdev() - get next active vdev
|
||||
* @pdev: PDEV object
|
||||
* @vdev_list: qdf_list_t
|
||||
* @vdev: VDEV object
|
||||
* @dbg_id: id of the caller
|
||||
*
|
||||
* API to get next active vdev object pointer of vdev
|
||||
*
|
||||
* Return:
|
||||
* @vdev_next: VDEV object
|
||||
*/
|
||||
struct wlan_objmgr_vdev *wlan_vdev_get_next_active_vdev_of_pdev(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *vdev_list,
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
|
||||
|
||||
/**
|
||||
@@ -1265,8 +1219,17 @@ static inline uint16_t wlan_vdev_get_peer_count(struct wlan_objmgr_vdev *vdev)
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
void wlan_objmgr_vdev_get_ref_debug(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_objmgr_vdev_get_ref(vdev, dbgid) \
|
||||
wlan_objmgr_vdev_get_ref_debug(vdev, dbgid, __func__, __LINE__)
|
||||
#else
|
||||
void wlan_objmgr_vdev_get_ref(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_objmgr_vdev_try_get_ref() - increment ref count, if allowed
|
||||
@@ -1277,8 +1240,18 @@ void wlan_objmgr_vdev_get_ref(struct wlan_objmgr_vdev *vdev,
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
QDF_STATUS wlan_objmgr_vdev_try_get_ref_debug(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_objmgr_vdev_try_get_ref(vdev, dbgid) \
|
||||
wlan_objmgr_vdev_try_get_ref_debug(vdev, dbgid, \
|
||||
__func__, __LINE__)
|
||||
#else
|
||||
QDF_STATUS wlan_objmgr_vdev_try_get_ref(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_objmgr_vdev_release_ref() - decrement ref count
|
||||
@@ -1290,8 +1263,101 @@ QDF_STATUS wlan_objmgr_vdev_try_get_ref(struct wlan_objmgr_vdev *vdev,
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
void wlan_objmgr_vdev_release_ref_debug(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_objmgr_vdev_release_ref(vdev, dbgid)\
|
||||
wlan_objmgr_vdev_release_ref_debug(vdev, dbgid, \
|
||||
__func__, __LINE__)
|
||||
#else
|
||||
void wlan_objmgr_vdev_release_ref(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_vdev_get_next_active_vdev_of_pdev() - get next active vdev
|
||||
* @pdev: PDEV object
|
||||
* @vdev_list: qdf_list_t
|
||||
* @vdev: VDEV object
|
||||
* @dbg_id: id of the caller
|
||||
*
|
||||
* API to get next active vdev object pointer of vdev
|
||||
*
|
||||
* Return:
|
||||
* @vdev_next: VDEV object
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_vdev_get_next_active_vdev_of_pdev_debug(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *vdev_list,
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_vdev_get_next_active_vdev_of_pdev(pdev, vdev_list, vdev, dbgid) \
|
||||
wlan_vdev_get_next_active_vdev_of_pdev_debug(pdev, vdev_list, \
|
||||
vdev, dbgid, __func__, __LINE__)
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_vdev_get_next_active_vdev_of_pdev(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *vdev_list,
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_pdev_peek_active_first_vdev() - get first active vdev from pdev list
|
||||
* @pdev: PDEV object
|
||||
* @dbg_id: id of the caller
|
||||
*
|
||||
* API to get the head active vdev of given pdev (of pdev's vdev list)
|
||||
*
|
||||
* Return:
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_pdev_peek_active_first_vdev_debug(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_pdev_peek_active_first_vdev(pdev, dbgid) \
|
||||
wlan_pdev_peek_active_first_vdev_debug(pdev, dbgid, \
|
||||
__func__, __LINE__)
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_pdev_peek_active_first_vdev(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_pdev_vdev_list_peek_active_head() - get first active vdev from pdev list
|
||||
* @vdev: VDEV object
|
||||
* @vdev_list: qdf_list_t
|
||||
* @dbg_id: id of the caller
|
||||
*
|
||||
* API to get the head active vdev of given vdev (of pdev's vdev list)
|
||||
*
|
||||
* Return:
|
||||
* @peer: head peer
|
||||
*/
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_pdev_vdev_list_peek_active_head_debug(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *vdev_list,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line);
|
||||
|
||||
#define wlan_pdev_vdev_list_peek_active_head(pdev, vdev_list, dbgid) \
|
||||
wlan_pdev_vdev_list_peek_active_head_debug(pdev, vdev_list, \
|
||||
dbgid, __func__, __LINE__)
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_pdev_vdev_list_peek_active_head(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *vdev_list,
|
||||
wlan_objmgr_ref_dbgid dbg_id);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wlan_objmgr_vdev_peer_freed_notify() - Notifies modules about peer freed
|
||||
|
@@ -623,144 +623,6 @@ QDF_STATUS wlan_objmgr_pdev_vdev_detach(struct wlan_objmgr_pdev *pdev,
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_pdev(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
struct wlan_objmgr_pdev_objmgr *objmgr;
|
||||
qdf_list_t *vdev_list;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
|
||||
objmgr = &pdev->pdev_objmgr;
|
||||
vdev_list = &objmgr->wlan_vdev_list;
|
||||
/* Get first vdev */
|
||||
vdev = wlan_pdev_vdev_list_peek_head(vdev_list);
|
||||
/* Iterate through pdev's vdev list, till vdev id matches with
|
||||
entry of vdev list */
|
||||
while (vdev) {
|
||||
if (wlan_vdev_get_id(vdev) == vdev_id) {
|
||||
if (wlan_objmgr_vdev_try_get_ref(vdev, dbg_id) !=
|
||||
QDF_STATUS_SUCCESS)
|
||||
vdev = NULL;
|
||||
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return vdev;
|
||||
}
|
||||
/* get next vdev */
|
||||
vdev_next = wlan_vdev_get_next_vdev_of_pdev(vdev_list, vdev);
|
||||
vdev = vdev_next;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return NULL;
|
||||
}
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_id_from_pdev);
|
||||
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_pdev_no_state(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
struct wlan_objmgr_pdev_objmgr *objmgr;
|
||||
qdf_list_t *vdev_list;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
|
||||
objmgr = &pdev->pdev_objmgr;
|
||||
vdev_list = &objmgr->wlan_vdev_list;
|
||||
/* Get first vdev */
|
||||
vdev = wlan_pdev_vdev_list_peek_head(vdev_list);
|
||||
/**
|
||||
* Iterate through pdev's vdev list, till vdev id matches with
|
||||
* entry of vdev list
|
||||
*/
|
||||
while (vdev) {
|
||||
if (wlan_vdev_get_id(vdev) == vdev_id) {
|
||||
wlan_objmgr_vdev_get_ref(vdev, dbg_id);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
/* get next vdev */
|
||||
vdev_next = wlan_vdev_get_next_vdev_of_pdev(vdev_list, vdev);
|
||||
vdev = vdev_next;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_id_from_pdev_no_state);
|
||||
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_pdev(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t *macaddr,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
struct wlan_objmgr_pdev_objmgr *objmgr;
|
||||
qdf_list_t *vdev_list;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
objmgr = &pdev->pdev_objmgr;
|
||||
vdev_list = &objmgr->wlan_vdev_list;
|
||||
/* Get first vdev */
|
||||
vdev = wlan_pdev_vdev_list_peek_head(vdev_list);
|
||||
/* Iterate through pdev's vdev list, till vdev macaddr matches with
|
||||
entry of vdev list */
|
||||
while (vdev) {
|
||||
if (QDF_IS_STATUS_SUCCESS(
|
||||
WLAN_ADDR_EQ(wlan_vdev_mlme_get_macaddr(vdev), macaddr))) {
|
||||
if (QDF_IS_STATUS_SUCCESS(
|
||||
wlan_objmgr_vdev_try_get_ref(vdev, dbg_id))) {
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return vdev;
|
||||
}
|
||||
}
|
||||
/* get next vdev */
|
||||
vdev_next = wlan_vdev_get_next_vdev_of_pdev(vdev_list, vdev);
|
||||
vdev = vdev_next;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_pdev_no_state(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t *macaddr,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
struct wlan_objmgr_pdev_objmgr *objmgr;
|
||||
qdf_list_t *vdev_list;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
objmgr = &pdev->pdev_objmgr;
|
||||
vdev_list = &objmgr->wlan_vdev_list;
|
||||
/* Get first vdev */
|
||||
vdev = wlan_pdev_vdev_list_peek_head(vdev_list);
|
||||
/* Iterate through pdev's vdev list, till vdev macaddr matches with
|
||||
entry of vdev list */
|
||||
while (vdev) {
|
||||
if (WLAN_ADDR_EQ(wlan_vdev_mlme_get_macaddr(vdev), macaddr)
|
||||
== QDF_STATUS_SUCCESS) {
|
||||
wlan_objmgr_vdev_get_ref(vdev, dbg_id);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
/* get next vdev */
|
||||
vdev_next = wlan_vdev_get_next_vdev_of_pdev(vdev_list, vdev);
|
||||
vdev = vdev_next;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void *wlan_objmgr_pdev_get_comp_private_obj(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
enum wlan_umac_comp_id id)
|
||||
@@ -782,10 +644,11 @@ void *wlan_objmgr_pdev_get_comp_private_obj(
|
||||
|
||||
return comp_priv_obj;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_pdev_get_comp_private_obj);
|
||||
|
||||
void wlan_objmgr_pdev_get_ref(struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid id)
|
||||
wlan_objmgr_ref_dbgid id)
|
||||
{
|
||||
if (!pdev) {
|
||||
obj_mgr_err("pdev obj is NULL");
|
||||
@@ -794,13 +657,12 @@ void wlan_objmgr_pdev_get_ref(struct wlan_objmgr_pdev *pdev,
|
||||
}
|
||||
qdf_atomic_inc(&pdev->pdev_objmgr.ref_cnt);
|
||||
qdf_atomic_inc(&pdev->pdev_objmgr.ref_id_dbg[id]);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_pdev_get_ref);
|
||||
|
||||
QDF_STATUS wlan_objmgr_pdev_try_get_ref(struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid id)
|
||||
wlan_objmgr_ref_dbgid id)
|
||||
{
|
||||
uint8_t pdev_id;
|
||||
|
||||
@@ -827,10 +689,11 @@ QDF_STATUS wlan_objmgr_pdev_try_get_ref(struct wlan_objmgr_pdev *pdev,
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_pdev_try_get_ref);
|
||||
|
||||
void wlan_objmgr_pdev_release_ref(struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid id)
|
||||
wlan_objmgr_ref_dbgid id)
|
||||
{
|
||||
uint8_t pdev_id;
|
||||
|
||||
@@ -844,7 +707,7 @@ void wlan_objmgr_pdev_release_ref(struct wlan_objmgr_pdev *pdev,
|
||||
|
||||
if (!qdf_atomic_read(&pdev->pdev_objmgr.ref_id_dbg[id])) {
|
||||
obj_mgr_err("pdev (id:%d)ref cnt was not taken by %d",
|
||||
pdev_id, id);
|
||||
pdev_id, id);
|
||||
wlan_objmgr_print_ref_ids(pdev->pdev_objmgr.ref_id_dbg,
|
||||
QDF_TRACE_LEVEL_FATAL);
|
||||
WLAN_OBJMGR_BUG(0);
|
||||
@@ -861,11 +724,52 @@ void wlan_objmgr_pdev_release_ref(struct wlan_objmgr_pdev *pdev,
|
||||
/* Decrement ref count, free pdev, if ref count == 0 */
|
||||
if (qdf_atomic_dec_and_test(&pdev->pdev_objmgr.ref_cnt))
|
||||
wlan_objmgr_pdev_obj_destroy(pdev);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_pdev_release_ref);
|
||||
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_pdev_get_first_vdev_debug(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line)
|
||||
{
|
||||
struct wlan_objmgr_pdev_objmgr *objmgr = &pdev->pdev_objmgr;
|
||||
qdf_list_t *vdev_list = NULL;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
qdf_list_node_t *node = NULL;
|
||||
qdf_list_node_t *prev_node = NULL;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
|
||||
/* VDEV list */
|
||||
vdev_list = &objmgr->wlan_vdev_list;
|
||||
if (qdf_list_peek_front(vdev_list, &node) != QDF_STATUS_SUCCESS) {
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
do {
|
||||
vdev = qdf_container_of(node, struct wlan_objmgr_vdev,
|
||||
vdev_node);
|
||||
if (wlan_objmgr_vdev_try_get_ref_debug(vdev,
|
||||
dbg_id, func, line) ==
|
||||
QDF_STATUS_SUCCESS) {
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return vdev;
|
||||
}
|
||||
|
||||
prev_node = node;
|
||||
} while (qdf_list_peek_next(vdev_list, prev_node, &node) ==
|
||||
QDF_STATUS_SUCCESS);
|
||||
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_pdev_get_first_vdev_debug);
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_pdev_get_first_vdev(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
@@ -904,6 +808,316 @@ struct wlan_objmgr_vdev *wlan_objmgr_pdev_get_first_vdev(
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_pdev_get_first_vdev);
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_pdev_debug(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
struct wlan_objmgr_pdev_objmgr *objmgr;
|
||||
qdf_list_t *vdev_list;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
|
||||
objmgr = &pdev->pdev_objmgr;
|
||||
vdev_list = &objmgr->wlan_vdev_list;
|
||||
/* Get first vdev */
|
||||
vdev = wlan_pdev_vdev_list_peek_head(vdev_list);
|
||||
/**
|
||||
* Iterate through pdev's vdev list, till vdev id matches with
|
||||
* entry of vdev list
|
||||
*/
|
||||
while (vdev) {
|
||||
if (wlan_vdev_get_id(vdev) == vdev_id) {
|
||||
if (wlan_objmgr_vdev_try_get_ref_debug(vdev, dbg_id,
|
||||
func, line) !=
|
||||
QDF_STATUS_SUCCESS)
|
||||
vdev = NULL;
|
||||
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return vdev;
|
||||
}
|
||||
/* get next vdev */
|
||||
vdev_next = wlan_vdev_get_next_vdev_of_pdev(vdev_list, vdev);
|
||||
vdev = vdev_next;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_id_from_pdev_debug);
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_pdev(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
struct wlan_objmgr_pdev_objmgr *objmgr;
|
||||
qdf_list_t *vdev_list;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
|
||||
objmgr = &pdev->pdev_objmgr;
|
||||
vdev_list = &objmgr->wlan_vdev_list;
|
||||
/* Get first vdev */
|
||||
vdev = wlan_pdev_vdev_list_peek_head(vdev_list);
|
||||
/**
|
||||
* Iterate through pdev's vdev list, till vdev id matches with
|
||||
* entry of vdev list
|
||||
*/
|
||||
while (vdev) {
|
||||
if (wlan_vdev_get_id(vdev) == vdev_id) {
|
||||
if (wlan_objmgr_vdev_try_get_ref(vdev, dbg_id) !=
|
||||
QDF_STATUS_SUCCESS)
|
||||
vdev = NULL;
|
||||
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return vdev;
|
||||
}
|
||||
/* get next vdev */
|
||||
vdev_next = wlan_vdev_get_next_vdev_of_pdev(vdev_list, vdev);
|
||||
vdev = vdev_next;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_id_from_pdev);
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_pdev_no_state_debug(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
struct wlan_objmgr_pdev_objmgr *objmgr;
|
||||
qdf_list_t *vdev_list;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
|
||||
objmgr = &pdev->pdev_objmgr;
|
||||
vdev_list = &objmgr->wlan_vdev_list;
|
||||
/* Get first vdev */
|
||||
vdev = wlan_pdev_vdev_list_peek_head(vdev_list);
|
||||
/**
|
||||
* Iterate through pdev's vdev list, till vdev id matches with
|
||||
* entry of vdev list
|
||||
*/
|
||||
while (vdev) {
|
||||
if (wlan_vdev_get_id(vdev) == vdev_id) {
|
||||
wlan_objmgr_vdev_get_ref_debug(vdev, dbg_id,
|
||||
func, line);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
/* get next vdev */
|
||||
vdev_next = wlan_vdev_get_next_vdev_of_pdev(vdev_list, vdev);
|
||||
vdev = vdev_next;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_id_from_pdev_no_state_debug);
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_pdev_no_state(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
struct wlan_objmgr_pdev_objmgr *objmgr;
|
||||
qdf_list_t *vdev_list;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
|
||||
objmgr = &pdev->pdev_objmgr;
|
||||
vdev_list = &objmgr->wlan_vdev_list;
|
||||
/* Get first vdev */
|
||||
vdev = wlan_pdev_vdev_list_peek_head(vdev_list);
|
||||
/**
|
||||
* Iterate through pdev's vdev list, till vdev id matches with
|
||||
* entry of vdev list
|
||||
*/
|
||||
while (vdev) {
|
||||
if (wlan_vdev_get_id(vdev) == vdev_id) {
|
||||
wlan_objmgr_vdev_get_ref(vdev, dbg_id);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
/* get next vdev */
|
||||
vdev_next = wlan_vdev_get_next_vdev_of_pdev(vdev_list, vdev);
|
||||
vdev = vdev_next;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_id_from_pdev_no_state);
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_pdev_debug(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t *macaddr,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *fnc, int ln)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
struct wlan_objmgr_pdev_objmgr *objmgr;
|
||||
qdf_list_t *vdev_list;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
objmgr = &pdev->pdev_objmgr;
|
||||
vdev_list = &objmgr->wlan_vdev_list;
|
||||
/* Get first vdev */
|
||||
vdev = wlan_pdev_vdev_list_peek_head(vdev_list);
|
||||
/**
|
||||
* Iterate through pdev's vdev list, till vdev macaddr matches with
|
||||
* entry of vdev list
|
||||
*/
|
||||
while (vdev) {
|
||||
if (QDF_IS_STATUS_SUCCESS(
|
||||
WLAN_ADDR_EQ(wlan_vdev_mlme_get_macaddr(vdev), macaddr))) {
|
||||
if (QDF_IS_STATUS_SUCCESS(
|
||||
wlan_objmgr_vdev_try_get_ref_debug(vdev, dbg_id,
|
||||
fnc, ln))) {
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return vdev;
|
||||
}
|
||||
}
|
||||
/* get next vdev */
|
||||
vdev_next = wlan_vdev_get_next_vdev_of_pdev(vdev_list, vdev);
|
||||
vdev = vdev_next;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_pdev(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t *macaddr,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
struct wlan_objmgr_pdev_objmgr *objmgr;
|
||||
qdf_list_t *vdev_list;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
objmgr = &pdev->pdev_objmgr;
|
||||
vdev_list = &objmgr->wlan_vdev_list;
|
||||
/* Get first vdev */
|
||||
vdev = wlan_pdev_vdev_list_peek_head(vdev_list);
|
||||
/**
|
||||
* Iterate through pdev's vdev list, till vdev macaddr matches with
|
||||
* entry of vdev list
|
||||
*/
|
||||
while (vdev) {
|
||||
if (QDF_IS_STATUS_SUCCESS(
|
||||
WLAN_ADDR_EQ(wlan_vdev_mlme_get_macaddr(vdev), macaddr))) {
|
||||
if (QDF_IS_STATUS_SUCCESS(
|
||||
wlan_objmgr_vdev_try_get_ref(vdev, dbg_id))) {
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return vdev;
|
||||
}
|
||||
}
|
||||
/* get next vdev */
|
||||
vdev_next = wlan_vdev_get_next_vdev_of_pdev(vdev_list, vdev);
|
||||
vdev = vdev_next;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev
|
||||
*wlan_objmgr_get_vdev_by_macaddr_from_pdev_no_state_debug(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t *macaddr,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
struct wlan_objmgr_pdev_objmgr *objmgr;
|
||||
qdf_list_t *vdev_list;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
objmgr = &pdev->pdev_objmgr;
|
||||
vdev_list = &objmgr->wlan_vdev_list;
|
||||
/* Get first vdev */
|
||||
vdev = wlan_pdev_vdev_list_peek_head(vdev_list);
|
||||
/**
|
||||
* Iterate through pdev's vdev list, till vdev macaddr matches with
|
||||
* entry of vdev list
|
||||
*/
|
||||
while (vdev) {
|
||||
if (WLAN_ADDR_EQ(wlan_vdev_mlme_get_macaddr(vdev), macaddr)
|
||||
== QDF_STATUS_SUCCESS) {
|
||||
wlan_objmgr_vdev_get_ref_debug(vdev, dbg_id,
|
||||
func, line);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
/* get next vdev */
|
||||
vdev_next = wlan_vdev_get_next_vdev_of_pdev(vdev_list, vdev);
|
||||
vdev = vdev_next;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_pdev_no_state(
|
||||
struct wlan_objmgr_pdev *pdev, uint8_t *macaddr,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
struct wlan_objmgr_pdev_objmgr *objmgr;
|
||||
qdf_list_t *vdev_list;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
objmgr = &pdev->pdev_objmgr;
|
||||
vdev_list = &objmgr->wlan_vdev_list;
|
||||
/* Get first vdev */
|
||||
vdev = wlan_pdev_vdev_list_peek_head(vdev_list);
|
||||
/**
|
||||
* Iterate through pdev's vdev list, till vdev macaddr matches with
|
||||
* entry of vdev list
|
||||
*/
|
||||
while (vdev) {
|
||||
if (WLAN_ADDR_EQ(wlan_vdev_mlme_get_macaddr(vdev), macaddr)
|
||||
== QDF_STATUS_SUCCESS) {
|
||||
wlan_objmgr_vdev_get_ref(vdev, dbg_id);
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
/* get next vdev */
|
||||
vdev_next = wlan_vdev_get_next_vdev_of_pdev(vdev_list, vdev);
|
||||
vdev = vdev_next;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_OBJMGR_DEBUG
|
||||
void wlan_print_pdev_info(struct wlan_objmgr_pdev *pdev)
|
||||
|
@@ -942,6 +942,163 @@ QDF_STATUS wlan_objmgr_psoc_vdev_detach(struct wlan_objmgr_psoc *psoc,
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc_debug(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
/* if PSOC is NULL, return */
|
||||
if (!psoc)
|
||||
return NULL;
|
||||
/* vdev id is invalid */
|
||||
if (vdev_id >= wlan_psoc_get_max_vdev_count(psoc))
|
||||
return NULL;
|
||||
|
||||
wlan_psoc_obj_lock(psoc);
|
||||
/* retrieve vdev pointer from vdev list */
|
||||
vdev = psoc->soc_objmgr.wlan_vdev_list[vdev_id];
|
||||
if (vdev) {
|
||||
if (wlan_objmgr_vdev_try_get_ref_debug(vdev, dbg_id,
|
||||
func, line) !=
|
||||
QDF_STATUS_SUCCESS)
|
||||
vdev = NULL;
|
||||
}
|
||||
wlan_psoc_obj_unlock(psoc);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_id_from_psoc_debug);
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
/* if PSOC is NULL, return */
|
||||
if (!psoc)
|
||||
return NULL;
|
||||
/* vdev id is invalid */
|
||||
if (vdev_id >= wlan_psoc_get_max_vdev_count(psoc))
|
||||
return NULL;
|
||||
|
||||
wlan_psoc_obj_lock(psoc);
|
||||
/* retrieve vdev pointer from vdev list */
|
||||
vdev = psoc->soc_objmgr.wlan_vdev_list[vdev_id];
|
||||
if (vdev) {
|
||||
if (wlan_objmgr_vdev_try_get_ref(vdev, dbg_id) !=
|
||||
QDF_STATUS_SUCCESS)
|
||||
vdev = NULL;
|
||||
}
|
||||
wlan_psoc_obj_unlock(psoc);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_id_from_psoc);
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc_no_state_debug(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
/* if PSOC is NULL, return */
|
||||
if (!psoc)
|
||||
return NULL;
|
||||
/* vdev id is invalid */
|
||||
if (vdev_id >= wlan_psoc_get_max_vdev_count(psoc))
|
||||
return NULL;
|
||||
|
||||
wlan_psoc_obj_lock(psoc);
|
||||
/* retrieve vdev pointer from vdev list */
|
||||
vdev = psoc->soc_objmgr.wlan_vdev_list[vdev_id];
|
||||
if (vdev)
|
||||
wlan_objmgr_vdev_get_ref_debug(vdev, dbg_id, func, line);
|
||||
|
||||
wlan_psoc_obj_unlock(psoc);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_id_from_psoc_no_state_debug);
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc_no_state(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
/* if PSOC is NULL, return */
|
||||
if (!psoc)
|
||||
return NULL;
|
||||
/* vdev id is invalid */
|
||||
if (vdev_id >= wlan_psoc_get_max_vdev_count(psoc))
|
||||
return NULL;
|
||||
|
||||
wlan_psoc_obj_lock(psoc);
|
||||
/* retrieve vdev pointer from vdev list */
|
||||
vdev = psoc->soc_objmgr.wlan_vdev_list[vdev_id];
|
||||
if (vdev)
|
||||
wlan_objmgr_vdev_get_ref(vdev, dbg_id);
|
||||
|
||||
wlan_psoc_obj_unlock(psoc);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_id_from_psoc_no_state);
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_opmode_from_psoc_debug(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
enum QDF_OPMODE opmode,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev = NULL;
|
||||
int vdev_cnt = 0;
|
||||
uint16_t max_vdev_cnt;
|
||||
|
||||
/* if PSOC is NULL, return */
|
||||
if (!psoc)
|
||||
return NULL;
|
||||
|
||||
wlan_psoc_obj_lock(psoc);
|
||||
|
||||
max_vdev_cnt = wlan_psoc_get_max_vdev_count(psoc);
|
||||
/* retrieve vdev pointer from vdev list */
|
||||
while (vdev_cnt < max_vdev_cnt) {
|
||||
vdev = psoc->soc_objmgr.wlan_vdev_list[vdev_cnt];
|
||||
vdev_cnt++;
|
||||
if (!vdev)
|
||||
continue;
|
||||
wlan_vdev_obj_lock(vdev);
|
||||
if (vdev->vdev_mlme.vdev_opmode == opmode) {
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
if (wlan_objmgr_vdev_try_get_ref_debug(vdev, dbg_id,
|
||||
func, line) !=
|
||||
QDF_STATUS_SUCCESS) {
|
||||
vdev = NULL;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
}
|
||||
wlan_psoc_obj_unlock(psoc);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_opmode_from_psoc(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
enum QDF_OPMODE opmode,
|
||||
@@ -980,59 +1137,39 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_opmode_from_psoc(
|
||||
|
||||
return vdev;
|
||||
}
|
||||
#endif
|
||||
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_psoc_debug(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
|
||||
uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_pdev *pdev;
|
||||
|
||||
/* if PSOC is NULL, return */
|
||||
if (!psoc)
|
||||
return NULL;
|
||||
/* vdev id is invalid */
|
||||
if (vdev_id >= wlan_psoc_get_max_vdev_count(psoc))
|
||||
|
||||
if (!macaddr)
|
||||
return NULL;
|
||||
|
||||
wlan_psoc_obj_lock(psoc);
|
||||
/* retrieve vdev pointer from vdev list */
|
||||
vdev = psoc->soc_objmgr.wlan_vdev_list[vdev_id];
|
||||
if (vdev) {
|
||||
if (wlan_objmgr_vdev_try_get_ref(vdev, dbg_id) !=
|
||||
QDF_STATUS_SUCCESS)
|
||||
vdev = NULL;
|
||||
pdev = wlan_objmgr_get_pdev_by_id(psoc, pdev_id, dbg_id);
|
||||
if (!pdev) {
|
||||
obj_mgr_err("pdev is null");
|
||||
return NULL;
|
||||
}
|
||||
wlan_psoc_obj_unlock(psoc);
|
||||
vdev = wlan_objmgr_get_vdev_by_macaddr_from_pdev_debug(pdev, macaddr,
|
||||
dbg_id,
|
||||
func, line);
|
||||
wlan_objmgr_pdev_release_ref(pdev, dbg_id);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_id_from_psoc);
|
||||
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc_no_state(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
/* if PSOC is NULL, return */
|
||||
if (!psoc)
|
||||
return NULL;
|
||||
/* vdev id is invalid */
|
||||
if (vdev_id >= wlan_psoc_get_max_vdev_count(psoc))
|
||||
return NULL;
|
||||
|
||||
wlan_psoc_obj_lock(psoc);
|
||||
/* retrieve vdev pointer from vdev list */
|
||||
vdev = psoc->soc_objmgr.wlan_vdev_list[vdev_id];
|
||||
if (vdev)
|
||||
wlan_objmgr_vdev_get_ref(vdev, dbg_id);
|
||||
|
||||
wlan_psoc_obj_unlock(psoc);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_id_from_psoc_no_state);
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_macaddr_from_psoc_debug);
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_psoc(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
|
||||
uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id)
|
||||
@@ -1057,8 +1194,44 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_psoc(
|
||||
|
||||
return vdev;
|
||||
}
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_macaddr_from_psoc);
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_macaddr_from_psoc);
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev
|
||||
*wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state_debug(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
|
||||
uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_pdev *pdev;
|
||||
|
||||
/* if PSOC is NULL, return */
|
||||
if (!psoc)
|
||||
return NULL;
|
||||
|
||||
if (!macaddr)
|
||||
return NULL;
|
||||
|
||||
pdev = wlan_objmgr_get_pdev_by_id(psoc, pdev_id, dbg_id);
|
||||
if (!pdev) {
|
||||
obj_mgr_err("pdev is null");
|
||||
return NULL;
|
||||
}
|
||||
vdev = wlan_objmgr_get_vdev_by_macaddr_from_pdev_no_state_debug(pdev,
|
||||
macaddr,
|
||||
dbg_id,
|
||||
func,
|
||||
line);
|
||||
wlan_objmgr_pdev_release_ref(pdev, dbg_id);
|
||||
|
||||
return vdev;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state_debug);
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state(
|
||||
struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
|
||||
uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id)
|
||||
@@ -1083,7 +1256,9 @@ struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state(
|
||||
|
||||
return vdev;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state);
|
||||
#endif
|
||||
|
||||
static void wlan_obj_psoc_peerlist_add_tail(qdf_list_t *obj_list,
|
||||
struct wlan_objmgr_peer *obj)
|
||||
|
@@ -279,7 +279,6 @@ static QDF_STATUS wlan_objmgr_vdev_obj_destroy(struct wlan_objmgr_vdev *vdev)
|
||||
|
||||
vdev_id = wlan_vdev_get_id(vdev);
|
||||
|
||||
wlan_print_vdev_info(vdev);
|
||||
obj_mgr_debug("Physically deleting vdev %d", vdev_id);
|
||||
|
||||
if (vdev->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) {
|
||||
@@ -970,8 +969,26 @@ void *wlan_objmgr_vdev_get_comp_private_obj(
|
||||
}
|
||||
qdf_export_symbol(wlan_objmgr_vdev_get_comp_private_obj);
|
||||
|
||||
void wlan_objmgr_vdev_get_ref(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id)
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
static inline void
|
||||
wlan_objmgr_vdev_ref_trace(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id,
|
||||
const char *func, int line)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void
|
||||
wlan_objmgr_vdev_deref_trace(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id,
|
||||
const char *func, int line)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
void wlan_objmgr_vdev_get_ref_debug(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id,
|
||||
const char *func, int line)
|
||||
{
|
||||
if (!vdev) {
|
||||
obj_mgr_err("vdev obj is NULL for id:%d", id);
|
||||
@@ -982,12 +999,65 @@ void wlan_objmgr_vdev_get_ref(struct wlan_objmgr_vdev *vdev,
|
||||
qdf_atomic_inc(&vdev->vdev_objmgr.ref_cnt);
|
||||
qdf_atomic_inc(&vdev->vdev_objmgr.ref_id_dbg[id]);
|
||||
|
||||
wlan_objmgr_vdev_ref_trace(vdev, id, func, line);
|
||||
return;
|
||||
}
|
||||
qdf_export_symbol(wlan_objmgr_vdev_get_ref);
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_vdev_get_ref_debug);
|
||||
#else
|
||||
void wlan_objmgr_vdev_get_ref(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id)
|
||||
{
|
||||
if (!vdev) {
|
||||
obj_mgr_err("vdev obj is NULL for id:%d", id);
|
||||
QDF_ASSERT(0);
|
||||
return;
|
||||
}
|
||||
/* Increment ref count */
|
||||
qdf_atomic_inc(&vdev->vdev_objmgr.ref_cnt);
|
||||
qdf_atomic_inc(&vdev->vdev_objmgr.ref_id_dbg[id]);
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_vdev_get_ref);
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
QDF_STATUS wlan_objmgr_vdev_try_get_ref_debug(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id,
|
||||
const char *func, int line)
|
||||
{
|
||||
uint8_t vdev_id;
|
||||
|
||||
if (!vdev) {
|
||||
obj_mgr_err("vdev obj is NULL for id:%d", id);
|
||||
QDF_ASSERT(0);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
wlan_vdev_obj_lock(vdev);
|
||||
vdev_id = wlan_vdev_get_id(vdev);
|
||||
if (vdev->obj_state != WLAN_OBJ_STATE_CREATED) {
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
if (vdev->vdev_objmgr.print_cnt++ <=
|
||||
WLAN_OBJMGR_RATELIMIT_THRESH)
|
||||
obj_mgr_err(
|
||||
"[Ref id: %d] vdev(%d) is not in Created state(%d)",
|
||||
id, vdev_id, vdev->obj_state);
|
||||
|
||||
return QDF_STATUS_E_RESOURCES;
|
||||
}
|
||||
|
||||
/* Increment ref count */
|
||||
wlan_objmgr_vdev_get_ref_debug(vdev, id, func, line);
|
||||
wlan_vdev_obj_unlock(vdev);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_vdev_try_get_ref_debug);
|
||||
#else
|
||||
QDF_STATUS wlan_objmgr_vdev_try_get_ref(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id)
|
||||
wlan_objmgr_ref_dbgid id)
|
||||
{
|
||||
uint8_t vdev_id;
|
||||
|
||||
@@ -1016,45 +1086,114 @@ QDF_STATUS wlan_objmgr_vdev_try_get_ref(struct wlan_objmgr_vdev *vdev,
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_vdev_try_get_ref);
|
||||
#endif
|
||||
|
||||
void wlan_objmgr_vdev_release_ref(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id)
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_vdev_get_next_active_vdev_of_pdev_debug(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *vdev_list,
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line)
|
||||
{
|
||||
uint8_t vdev_id;
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
qdf_list_node_t *node = &vdev->vdev_node;
|
||||
qdf_list_node_t *prev_node = NULL;
|
||||
|
||||
if (!vdev) {
|
||||
obj_mgr_err("vdev obj is NULL for id:%d", id);
|
||||
QDF_ASSERT(0);
|
||||
return;
|
||||
if (!node)
|
||||
return NULL;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
prev_node = node;
|
||||
while (qdf_list_peek_next(vdev_list, prev_node, &node) ==
|
||||
QDF_STATUS_SUCCESS) {
|
||||
vdev_next = qdf_container_of(node, struct wlan_objmgr_vdev,
|
||||
vdev_node);
|
||||
if (wlan_objmgr_vdev_try_get_ref_debug(vdev_next, dbg_id,
|
||||
func, line) ==
|
||||
QDF_STATUS_SUCCESS) {
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return vdev_next;
|
||||
}
|
||||
|
||||
prev_node = node;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
vdev_id = wlan_vdev_get_id(vdev);
|
||||
|
||||
if (!qdf_atomic_read(&vdev->vdev_objmgr.ref_id_dbg[id])) {
|
||||
obj_mgr_alert("vdev (id:%d)ref cnt was not taken by %d",
|
||||
vdev_id, id);
|
||||
wlan_objmgr_print_ref_ids(vdev->vdev_objmgr.ref_id_dbg,
|
||||
QDF_TRACE_LEVEL_FATAL);
|
||||
WLAN_OBJMGR_BUG(0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!qdf_atomic_read(&vdev->vdev_objmgr.ref_cnt)) {
|
||||
obj_mgr_alert("vdev ref cnt is 0");
|
||||
WLAN_OBJMGR_BUG(0);
|
||||
return;
|
||||
}
|
||||
qdf_atomic_dec(&vdev->vdev_objmgr.ref_id_dbg[id]);
|
||||
|
||||
/* Decrement ref count, free vdev, if ref count == 0 */
|
||||
if (qdf_atomic_dec_and_test(&vdev->vdev_objmgr.ref_cnt))
|
||||
wlan_objmgr_vdev_obj_destroy(vdev);
|
||||
|
||||
return;
|
||||
return NULL;
|
||||
}
|
||||
qdf_export_symbol(wlan_objmgr_vdev_release_ref);
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_vdev_get_next_active_vdev_of_pdev(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *vdev_list,
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
qdf_list_node_t *node = &vdev->vdev_node;
|
||||
qdf_list_node_t *prev_node = NULL;
|
||||
|
||||
if (!node)
|
||||
return NULL;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
prev_node = node;
|
||||
while (qdf_list_peek_next(vdev_list, prev_node, &node) ==
|
||||
QDF_STATUS_SUCCESS) {
|
||||
vdev_next = qdf_container_of(node, struct wlan_objmgr_vdev,
|
||||
vdev_node);
|
||||
if (wlan_objmgr_vdev_try_get_ref(vdev_next, dbg_id) ==
|
||||
QDF_STATUS_SUCCESS) {
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return vdev_next;
|
||||
}
|
||||
|
||||
prev_node = node;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_pdev_vdev_list_peek_active_head_debug(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *vdev_list, wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
qdf_list_node_t *node = NULL;
|
||||
qdf_list_node_t *prev_node = NULL;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
|
||||
if (qdf_list_peek_front(vdev_list, &node) != QDF_STATUS_SUCCESS) {
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
do {
|
||||
vdev = qdf_container_of(node, struct wlan_objmgr_vdev,
|
||||
vdev_node);
|
||||
if (wlan_objmgr_vdev_try_get_ref_debug(vdev, dbg_id,
|
||||
func, line) ==
|
||||
QDF_STATUS_SUCCESS) {
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return vdev;
|
||||
}
|
||||
|
||||
prev_node = node;
|
||||
} while (qdf_list_peek_next(vdev_list, prev_node, &node) ==
|
||||
QDF_STATUS_SUCCESS);
|
||||
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_pdev_vdev_list_peek_active_head(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *vdev_list, wlan_objmgr_ref_dbgid dbg_id)
|
||||
@@ -1087,7 +1226,24 @@ struct wlan_objmgr_vdev *wlan_pdev_vdev_list_peek_active_head(
|
||||
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
struct wlan_objmgr_vdev *wlan_pdev_peek_active_first_vdev_debug(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id,
|
||||
const char *func, int line)
|
||||
{
|
||||
struct wlan_objmgr_pdev_objmgr *objmgr = &pdev->pdev_objmgr;
|
||||
qdf_list_t *vdev_list;
|
||||
|
||||
/* VDEV list */
|
||||
vdev_list = &objmgr->wlan_vdev_list;
|
||||
|
||||
return wlan_pdev_vdev_list_peek_active_head_debug(pdev, vdev_list,
|
||||
dbg_id, func, line);
|
||||
}
|
||||
#else
|
||||
struct wlan_objmgr_vdev *wlan_pdev_peek_active_first_vdev(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
@@ -1101,39 +1257,84 @@ struct wlan_objmgr_vdev *wlan_pdev_peek_active_first_vdev(
|
||||
return wlan_pdev_vdev_list_peek_active_head(pdev, vdev_list,
|
||||
dbg_id);
|
||||
}
|
||||
#endif
|
||||
|
||||
struct wlan_objmgr_vdev *wlan_vdev_get_next_active_vdev_of_pdev(
|
||||
struct wlan_objmgr_pdev *pdev,
|
||||
qdf_list_t *vdev_list,
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid dbg_id)
|
||||
#ifdef WLAN_OBJMGR_REF_ID_TRACE
|
||||
void wlan_objmgr_vdev_release_ref_debug(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id,
|
||||
const char *func, int line)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev_next;
|
||||
qdf_list_node_t *node = &vdev->vdev_node;
|
||||
qdf_list_node_t *prev_node = NULL;
|
||||
uint8_t vdev_id;
|
||||
|
||||
if (!node)
|
||||
return NULL;
|
||||
|
||||
wlan_pdev_obj_lock(pdev);
|
||||
prev_node = node;
|
||||
while (qdf_list_peek_next(vdev_list, prev_node, &node) ==
|
||||
QDF_STATUS_SUCCESS) {
|
||||
vdev_next = qdf_container_of(node, struct wlan_objmgr_vdev,
|
||||
vdev_node);
|
||||
if (wlan_objmgr_vdev_try_get_ref(vdev_next, dbg_id) ==
|
||||
QDF_STATUS_SUCCESS) {
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
return vdev_next;
|
||||
}
|
||||
|
||||
prev_node = node;
|
||||
if (!vdev) {
|
||||
obj_mgr_err("vdev obj is NULL for id:%d", id);
|
||||
QDF_ASSERT(0);
|
||||
return;
|
||||
}
|
||||
wlan_pdev_obj_unlock(pdev);
|
||||
|
||||
return NULL;
|
||||
vdev_id = wlan_vdev_get_id(vdev);
|
||||
|
||||
if (!qdf_atomic_read(&vdev->vdev_objmgr.ref_id_dbg[id])) {
|
||||
obj_mgr_alert("vdev (id:%d)ref cnt was not taken by %d",
|
||||
vdev_id, id);
|
||||
wlan_objmgr_print_ref_ids(vdev->vdev_objmgr.ref_id_dbg,
|
||||
QDF_TRACE_LEVEL_FATAL);
|
||||
WLAN_OBJMGR_BUG(0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!qdf_atomic_read(&vdev->vdev_objmgr.ref_cnt)) {
|
||||
obj_mgr_alert("vdev ref cnt is 0");
|
||||
WLAN_OBJMGR_BUG(0);
|
||||
return;
|
||||
}
|
||||
qdf_atomic_dec(&vdev->vdev_objmgr.ref_id_dbg[id]);
|
||||
wlan_objmgr_vdev_deref_trace(vdev, id, func, line);
|
||||
|
||||
/* Decrement ref count, free vdev, if ref count == 0 */
|
||||
if (qdf_atomic_dec_and_test(&vdev->vdev_objmgr.ref_cnt))
|
||||
wlan_objmgr_vdev_obj_destroy(vdev);
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_vdev_release_ref_debug);
|
||||
#else
|
||||
void wlan_objmgr_vdev_release_ref(struct wlan_objmgr_vdev *vdev,
|
||||
wlan_objmgr_ref_dbgid id)
|
||||
{
|
||||
uint8_t vdev_id;
|
||||
|
||||
if (!vdev) {
|
||||
obj_mgr_err("vdev obj is NULL for id:%d", id);
|
||||
QDF_ASSERT(0);
|
||||
return;
|
||||
}
|
||||
|
||||
vdev_id = wlan_vdev_get_id(vdev);
|
||||
|
||||
if (!qdf_atomic_read(&vdev->vdev_objmgr.ref_id_dbg[id])) {
|
||||
obj_mgr_alert("vdev (id:%d)ref cnt was not taken by %d",
|
||||
vdev_id, id);
|
||||
wlan_objmgr_print_ref_ids(vdev->vdev_objmgr.ref_id_dbg,
|
||||
QDF_TRACE_LEVEL_FATAL);
|
||||
WLAN_OBJMGR_BUG(0);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!qdf_atomic_read(&vdev->vdev_objmgr.ref_cnt)) {
|
||||
obj_mgr_alert("vdev ref cnt is 0");
|
||||
WLAN_OBJMGR_BUG(0);
|
||||
return;
|
||||
}
|
||||
qdf_atomic_dec(&vdev->vdev_objmgr.ref_id_dbg[id]);
|
||||
|
||||
/* Decrement ref count, free vdev, if ref count == 0 */
|
||||
if (qdf_atomic_dec_and_test(&vdev->vdev_objmgr.ref_cnt))
|
||||
wlan_objmgr_vdev_obj_destroy(vdev);
|
||||
}
|
||||
|
||||
qdf_export_symbol(wlan_objmgr_vdev_release_ref);
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_OBJMGR_DEBUG
|
||||
void wlan_print_vdev_info(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
|
Reference in New Issue
Block a user