qcacmn: use granular locks to protect peer structures

Remove the global soc->peer_ref_mutex lock to protect
peer access

Instead use granular locks to protect the individual
peer DBs

1) soc→peer_hash_lock : To protect peer hash table
2) soc→peer_map_lock : To protect id to objmap array
3) vdev→peer_list_lock : To protect vdev level peer list

Change-Id: I9f044c4d71fe1155817a2b22a5a050545ec37445
This commit is contained in:
Chaithanya Garrepalli
2020-08-14 14:23:39 +05:30
committed by snandini
szülő 5e4c6f6b29
commit 86d3df0605
7 fájl változott, egészen pontosan 261 új sor hozzáadva és 146 régi sor törölve

Fájl megtekintése

@@ -2396,7 +2396,7 @@ void dp_tx_nawds_handler(struct cdp_soc_t *soc, struct dp_vdev *vdev,
qdf_spin_unlock_bh(&dp_soc->ast_lock);
}
qdf_spin_lock_bh(&dp_soc->peer_ref_mutex);
qdf_spin_lock_bh(&vdev->peer_list_lock);
TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) {
if (!peer->bss_peer && peer->nawds_enabled) {
peer_id = peer->peer_id;
@@ -2436,7 +2436,7 @@ void dp_tx_nawds_handler(struct cdp_soc_t *soc, struct dp_vdev *vdev,
}
}
qdf_spin_unlock_bh(&dp_soc->peer_ref_mutex);
qdf_spin_unlock_bh(&vdev->peer_list_lock);
}
/**
@@ -2658,6 +2658,7 @@ void dp_tx_reinject_handler(struct dp_tx_desc_s *tx_desc, uint8_t *status)
}
is_ucast = !is_mcast;
qdf_spin_lock_bh(&vdev->peer_list_lock);
TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) {
if (peer->bss_peer)
continue;
@@ -2673,11 +2674,13 @@ void dp_tx_reinject_handler(struct dp_tx_desc_s *tx_desc, uint8_t *status)
break;
}
}
qdf_spin_unlock_bh(&vdev->peer_list_lock);
#endif
if (qdf_unlikely(vdev->mesh_vdev)) {
DP_TX_FREE_SINGLE_BUF(vdev->pdev->soc, tx_desc->nbuf);
} else {
qdf_spin_lock_bh(&vdev->peer_list_lock);
TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) {
if ((peer->peer_id != HTT_INVALID_PEER) &&
#ifdef WDS_VENDOR_EXTENSION
@@ -2726,6 +2729,7 @@ void dp_tx_reinject_handler(struct dp_tx_desc_s *tx_desc, uint8_t *status)
}
}
}
qdf_spin_unlock_bh(&vdev->peer_list_lock);
}
qdf_nbuf_free(nbuf);