qcacmn: Avoid reference of peer object after peer_teardown

In API dp_peer_find_by_id return NULL if delete_in_progress
bit is set, this will avoid referencing peer memory which will
be free in peer_unmap event asynchronously.

Change-Id: Ieab559b9274a886809a9baa9bb348d348e924625
CRs-fixed: 2194265
这个提交包含在:
Chaithanya Garrepalli
2018-02-22 20:32:19 +05:30
提交者 nshrivas
父节点 3053deedfa
当前提交 974da2640a
修改 3 个文件,包含 52 行新增28 行删除

查看文件

@@ -23,9 +23,8 @@
#include "dp_types.h"
#define DP_INVALID_PEER_ID 0xffff
/**
* dp_peer_find_by_id() - Returns peer object given the peer id
* __dp_peer_find_by_id() - Returns peer object given the peer id
*
* @soc : core DP soc context
* @peer_id : peer id from peer object can be retrieved
@@ -33,7 +32,7 @@
* Return: struct dp_peer*: Pointer to DP peer object
*/
static inline struct dp_peer *
dp_peer_find_by_id(struct dp_soc *soc,
__dp_peer_find_by_id(struct dp_soc *soc,
uint16_t peer_id)
{
struct dp_peer *peer;
@@ -53,6 +52,30 @@ dp_peer_find_by_id(struct dp_soc *soc,
return peer;
}
/**
* dp_peer_find_by_id() - Returns peer object given the peer id
* if delete_in_progress in not set for peer
*
* @soc : core DP soc context
* @peer_id : peer id from peer object can be retrieved
*
* Return: struct dp_peer*: Pointer to DP peer object
*/
static inline struct dp_peer *
dp_peer_find_by_id(struct dp_soc *soc,
uint16_t peer_id)
{
struct dp_peer *peer;
peer = __dp_peer_find_by_id (soc, peer_id);
if (peer && peer->delete_in_progress) {
return NULL;
}
return peer;
}
void dp_rx_peer_map_handler(void *soc_handle, uint16_t peer_id,
uint16_t hw_peer_id, uint8_t vdev_id, uint8_t *peer_mac_addr);
void dp_rx_peer_unmap_handler(void *soc_handle, uint16_t peer_id);