mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-14 16:46:15 -04:00
qcacmn: Fix htt included bit set for mesh exception packets
There may be race condition in setting htt included when tx desciptors getting prepared in two cpu cores. This is fixed by not setting the bit globally. Change-Id: I861cb2f0cf51a5a14a8fb6fbc6b64b00b82af675 CRs-Fixed: 2229350
This commit is contained in:
parent
4d71268f01
commit
97ca7e92fa
1 changed files with 13 additions and 7 deletions
|
|
@ -230,8 +230,6 @@ static uint8_t dp_tx_prepare_htt_metadata(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
|
|||
|
||||
uint8_t *hdr = NULL;
|
||||
|
||||
HTT_TX_TCL_METADATA_VALID_HTT_SET(vdev->htt_tcl_metadata, 1);
|
||||
|
||||
/*
|
||||
* Metadata - HTT MSDU Extension header
|
||||
*/
|
||||
|
|
@ -481,9 +479,7 @@ struct dp_tx_ext_desc_elem_s *dp_tx_prepare_ext_desc(struct dp_vdev *vdev,
|
|||
&msdu_info->meta_data[0],
|
||||
sizeof(struct htt_tx_msdu_desc_ext2_t));
|
||||
qdf_atomic_inc(&vdev->pdev->num_tx_exception);
|
||||
HTT_TX_TCL_METADATA_VALID_HTT_SET(vdev->htt_tcl_metadata, 1);
|
||||
} else
|
||||
HTT_TX_TCL_METADATA_VALID_HTT_SET(vdev->htt_tcl_metadata, 0);
|
||||
}
|
||||
|
||||
switch (msdu_info->frm_type) {
|
||||
case dp_tx_frm_sg:
|
||||
|
|
@ -1211,7 +1207,6 @@ static qdf_nbuf_t dp_tx_send_msdu_single(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
|
|||
uint16_t htt_tcl_metadata = 0;
|
||||
uint8_t tid = msdu_info->tid;
|
||||
|
||||
HTT_TX_TCL_METADATA_VALID_HTT_SET(vdev->htt_tcl_metadata, 0);
|
||||
/* Setup Tx descriptor for an MSDU, and MSDU extension descriptor */
|
||||
tx_desc = dp_tx_prepare_desc_single(vdev, nbuf, tx_q->desc_pool_id,
|
||||
msdu_info, tx_exc_metadata);
|
||||
|
|
@ -1252,6 +1247,11 @@ static qdf_nbuf_t dp_tx_send_msdu_single(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
|
|||
} else
|
||||
htt_tcl_metadata = vdev->htt_tcl_metadata;
|
||||
|
||||
|
||||
if (msdu_info->exception_fw) {
|
||||
HTT_TX_TCL_METADATA_VALID_HTT_SET(htt_tcl_metadata, 1);
|
||||
}
|
||||
|
||||
/* Enqueue the Tx MSDU descriptor to HW for transmit */
|
||||
status = dp_tx_hw_enqueue(soc, vdev, tx_desc, tid,
|
||||
htt_tcl_metadata, tx_q->ring_id, tx_exc_metadata);
|
||||
|
|
@ -1302,6 +1302,7 @@ qdf_nbuf_t dp_tx_send_msdu_multiple(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
|
|||
struct dp_tx_desc_s *tx_desc;
|
||||
bool is_cce_classified = false;
|
||||
QDF_STATUS status;
|
||||
uint16_t htt_tcl_metadata = 0;
|
||||
|
||||
struct dp_tx_queue *tx_q = &msdu_info->tx_queue;
|
||||
void *hal_srng = soc->tcl_data_ring[tx_q->ring_id].hal_srng;
|
||||
|
|
@ -1357,11 +1358,16 @@ qdf_nbuf_t dp_tx_send_msdu_multiple(struct dp_vdev *vdev, qdf_nbuf_t nbuf,
|
|||
if (is_cce_classified)
|
||||
tx_desc->flags |= DP_TX_DESC_FLAG_TO_FW;
|
||||
|
||||
htt_tcl_metadata = vdev->htt_tcl_metadata;
|
||||
if (msdu_info->exception_fw) {
|
||||
HTT_TX_TCL_METADATA_VALID_HTT_SET(htt_tcl_metadata, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Enqueue the Tx MSDU descriptor to HW for transmit
|
||||
*/
|
||||
status = dp_tx_hw_enqueue(soc, vdev, tx_desc, msdu_info->tid,
|
||||
vdev->htt_tcl_metadata, tx_q->ring_id, NULL);
|
||||
htt_tcl_metadata, tx_q->ring_id, NULL);
|
||||
|
||||
if (status != QDF_STATUS_SUCCESS) {
|
||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
|
||||
|
|
|
|||
Loading…
Reference in a new issue