Merge "qcacmn: Increment peer ref count for mgmt Tx frame"

This commit is contained in:
Linux Build Service Account 2017-04-03 00:00:09 -07:00 • committed by Gerrit - the friendly Code Review server
commit cbe44a82a7
2 changed files with 14 additions and 6 deletions

View file

@ -990,12 +990,11 @@ QDF_STATUS tgt_mgmt_txrx_tx_completion_handler(
ota_comp_cb(cb_context, nbuf, status, tx_compl_params);
no_registered_cb:
/**
* decremneting the peer ref count that has been incremented while
* passing peer in wlan_mgmt_txrx_mgmt_frame_tx or
* wlan_mgmt_txrx_beacon_frame_tx APIs.
/*
* decrementing the peer ref count that was incremented while
* accessing peer in wlan_mgmt_txrx_mgmt_frame_tx
*/
wlan_objmgr_peer_release_ref(mgmt_desc->peer, WLAN_MGMT_NB_ID);
wlan_objmgr_peer_release_ref(mgmt_desc->peer, WLAN_MGMT_SB_ID);
wlan_mgmt_txrx_desc_put(mgmt_txrx_ctx, desc_id);
return QDF_STATUS_SUCCESS;
}

View file

@ -224,9 +224,12 @@ QDF_STATUS wlan_mgmt_txrx_mgmt_frame_tx(struct wlan_objmgr_peer *peer,
return QDF_STATUS_E_NULL_VALUE;
}
wlan_objmgr_peer_get_ref(peer, WLAN_MGMT_SB_ID);
vdev = wlan_peer_get_vdev(peer);
if (!vdev) {
mgmt_txrx_err("vdev unavailable for peer %p", peer);
wlan_objmgr_peer_release_ref(peer, WLAN_MGMT_SB_ID);
return QDF_STATUS_E_NULL_VALUE;
}
@ -234,6 +237,7 @@ QDF_STATUS wlan_mgmt_txrx_mgmt_frame_tx(struct wlan_objmgr_peer *peer,
if (!psoc) {
mgmt_txrx_err("psoc unavailable for peer %p vdev %p",
peer, vdev);
wlan_objmgr_peer_release_ref(peer, WLAN_MGMT_SB_ID);
return QDF_STATUS_E_NULL_VALUE;
}
@ -243,12 +247,15 @@ QDF_STATUS wlan_mgmt_txrx_mgmt_frame_tx(struct wlan_objmgr_peer *peer,
if (!txrx_ctx) {
mgmt_txrx_err("No txrx context for peer %p psoc %p",
peer, psoc);
wlan_objmgr_peer_release_ref(peer, WLAN_MGMT_SB_ID);
return QDF_STATUS_E_NULL_VALUE;
}
desc = wlan_mgmt_txrx_desc_get(txrx_ctx);
if (!desc)
if (!desc) {
wlan_objmgr_peer_release_ref(peer, WLAN_MGMT_SB_ID);
return QDF_STATUS_E_RESOURCES;
}
desc->nbuf = buf;
desc->tx_ota_cmpl_cb = tx_ota_comp_cb;
@ -260,6 +267,7 @@ QDF_STATUS wlan_mgmt_txrx_mgmt_frame_tx(struct wlan_objmgr_peer *peer,
if (!psoc->soc_cb.tx_ops.mgmt_txrx_tx_ops.mgmt_tx_send) {
mgmt_txrx_err("mgmt txrx tx op to send mgmt frame is NULL for psoc: %p",
psoc);
wlan_objmgr_peer_release_ref(peer, WLAN_MGMT_SB_ID);
wlan_mgmt_txrx_desc_put(txrx_ctx, desc->desc_id);
return QDF_STATUS_E_FAILURE;
}
@ -268,6 +276,7 @@ QDF_STATUS wlan_mgmt_txrx_mgmt_frame_tx(struct wlan_objmgr_peer *peer,
vdev, buf, desc->desc_id, mgmt_tx_params)) {
mgmt_txrx_err("Mgmt send fail for peer %p psoc %p",
peer, psoc);
wlan_objmgr_peer_release_ref(peer, WLAN_MGMT_SB_ID);
wlan_mgmt_txrx_desc_put(txrx_ctx, desc->desc_id);
return QDF_STATUS_E_FAILURE;
}