qcacmn: Handle failure scenario for qdf_nbuf_map()

Handle failure scenario for qdf_nbuf_map() API by freeing
allocated memory, returning failure/error etc.

Change-Id: I493fb063c8f57e38525e2dc1701a6e972d2ec0e6
CRs-Fixed: 2028524
This commit is contained in:
Himanshu Agarwal 2017-04-04 12:36:33 +05:30 • committed by Sandeep Puligilla
commit fa594d9f08
2 changed files with 30 additions and 7 deletions

View file

@ -541,6 +541,7 @@ static A_STATUS htc_issue_packets(HTC_TARGET *target,
HTC_FRAME_HDR *pHtcHdr;
uint32_t data_attr = 0;
enum qdf_bus_type bus_type;
QDF_STATUS ret;
bus_type = hif_get_bus_type(target->hif_dev);
@ -610,9 +611,16 @@ static A_STATUS htc_issue_packets(HTC_TARGET *target,
*/
if (pPacket->PktInfo.AsTx.
Flags & HTC_TX_PACKET_FLAG_FIXUP_NETBUF) {
qdf_nbuf_map(target->osdev,
GET_HTC_PACKET_NET_BUF_CONTEXT
(pPacket), QDF_DMA_TO_DEVICE);
ret = qdf_nbuf_map(target->osdev,
GET_HTC_PACKET_NET_BUF_CONTEXT
(pPacket), QDF_DMA_TO_DEVICE);
if (ret != QDF_STATUS_SUCCESS) {
AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
("%s: nbuf map failed, endpoint %p\n",
__func__, pEndpoint));
status = A_ERROR;
break;
}
}
}
@ -1361,6 +1369,7 @@ A_STATUS htc_send_pkts_multiple(HTC_HANDLE HTCHandle, HTC_PACKET_QUEUE *pPktQueu
HTC_PACKET *pPacket;
qdf_nbuf_t netbuf;
HTC_FRAME_HDR *pHtcHdr;
QDF_STATUS status;
AR_DEBUG_PRINTF(ATH_DEBUG_SEND,
("+htc_send_pkts_multiple: Queue: %p, Pkts %d \n",
@ -1418,9 +1427,15 @@ A_STATUS htc_send_pkts_multiple(HTC_HANDLE HTCHandle, HTC_PACKET_QUEUE *pPktQueu
* mapped. This only applies to non-data frames, since data frames
* were already mapped as they entered into the driver.
*/
qdf_nbuf_map(target->osdev,
GET_HTC_PACKET_NET_BUF_CONTEXT(pPacket),
QDF_DMA_TO_DEVICE);
status = qdf_nbuf_map(target->osdev,
GET_HTC_PACKET_NET_BUF_CONTEXT(pPacket),
QDF_DMA_TO_DEVICE);
if (status != QDF_STATUS_SUCCESS) {
AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
("%s: nbuf map failed, endpoint %p, seq_no. %d\n",
__func__, pEndpoint, pEndpoint->SeqNo));
return A_ERROR;
}
pPacket->PktInfo.AsTx.Flags |= HTC_TX_PACKET_FLAG_FIXUP_NETBUF;
}

View file

@ -2480,6 +2480,7 @@ static QDF_STATUS send_mgmt_cmd_tlv(wmi_unified_t wmi_handle,
uint64_t dma_addr;
void *qdf_ctx = param->qdf_ctx;
uint8_t *bufp;
QDF_STATUS status;
int32_t bufp_len = (param->frm_len < mgmt_tx_dl_frm_len) ? param->frm_len :
mgmt_tx_dl_frm_len;
@ -2508,7 +2509,14 @@ static QDF_STATUS send_mgmt_cmd_tlv(wmi_unified_t wmi_handle,
sizeof(uint32_t)));
bufp += WMI_TLV_HDR_SIZE;
qdf_mem_copy(bufp, param->pdata, bufp_len);
qdf_nbuf_map_single(qdf_ctx, param->tx_frame, QDF_DMA_TO_DEVICE);
status = qdf_nbuf_map_single(qdf_ctx, param->tx_frame,
QDF_DMA_TO_DEVICE);
if (status != QDF_STATUS_SUCCESS) {
WMI_LOGE("%s: wmi buf map failed", __func__);
goto err1;
}
dma_addr = qdf_nbuf_get_frag_paddr(param->tx_frame, 0);
cmd->paddr_lo = (uint32_t)(dma_addr & 0xffffffff);
#if defined(HTT_PADDR64)