qcacmn: update peer reuse logic and add peer state lock
With new design, peer is deleted from hash table in cdp_peer_delete. Hash table search in dp_peer_can_reuse API at cdp_peer_create will always fail Update the peer reuse logic to search from inactive list. Insert peer to inactive list from cdp_peer_delete() and in peer reuse case search in inactive list to get peer. Also add a new lock to protect peer state transition Change-Id: I2e672fc4a9346c95d67716d437538dd0f96b2207
This commit is contained in:

zatwierdzone przez
snandini

rodzic
f7771e45d8
commit
3ac6dedea7
@@ -434,6 +434,28 @@ dp_soc_iterate_peer_lock_safe(struct dp_soc *soc,
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* dp_peer_state_cmp() - compare dp peer state
|
||||
*
|
||||
* @peer : DP peer
|
||||
* @state : state
|
||||
*
|
||||
* Return: true if state matches with peer state
|
||||
* false if it does not match
|
||||
*/
|
||||
static inline bool
|
||||
dp_peer_state_cmp(struct dp_peer *peer,
|
||||
enum dp_peer_state state)
|
||||
{
|
||||
bool is_status_equal = false;
|
||||
|
||||
qdf_spin_lock_bh(&peer->peer_state_lock);
|
||||
is_status_equal = (peer->peer_state == state);
|
||||
qdf_spin_unlock_bh(&peer->peer_state_lock);
|
||||
|
||||
return is_status_equal;
|
||||
}
|
||||
|
||||
/**
|
||||
* dp_peer_update_state() - update dp peer state
|
||||
*
|
||||
@@ -448,7 +470,10 @@ dp_peer_update_state(struct dp_soc *soc,
|
||||
struct dp_peer *peer,
|
||||
enum dp_peer_state state)
|
||||
{
|
||||
uint8_t peer_state = peer->peer_state;
|
||||
uint8_t peer_state;
|
||||
|
||||
qdf_spin_lock_bh(&peer->peer_state_lock);
|
||||
peer_state = peer->peer_state;
|
||||
|
||||
switch (state) {
|
||||
case DP_PEER_STATE_INIT:
|
||||
@@ -488,12 +513,14 @@ dp_peer_update_state(struct dp_soc *soc,
|
||||
default:
|
||||
dp_alert("Invalid peer state %u for peer "QDF_MAC_ADDR_FMT,
|
||||
state, QDF_MAC_ADDR_REF(peer->mac_addr.raw));
|
||||
qdf_spin_unlock_bh(&peer->peer_state_lock);
|
||||
return;
|
||||
}
|
||||
dp_info("Updating peer state from %u to %u mac "QDF_MAC_ADDR_FMT"\n",
|
||||
peer_state, state,
|
||||
QDF_MAC_ADDR_REF(peer->mac_addr.raw));
|
||||
peer->peer_state = state;
|
||||
qdf_spin_unlock_bh(&peer->peer_state_lock);
|
||||
}
|
||||
|
||||
void dp_print_ast_stats(struct dp_soc *soc);
|
||||
|
Reference in New Issue
Block a user