diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2017-04-06 16:53:50 -0600 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2017-04-06 16:53:50 -0600 |
| commit | 9b7277430775e3384cab2d7434fbfd0cdc0a2e85 (patch) | |
| tree | 1232aeb3604ca6a1cc26fea6fe0562fb7a4a0754 | |
| parent | 95da3277289953d4b5b975ea437f9531eae4929f (diff) | |
| parent | 3d3341c4df4217476a8af8cccd9c0a247aefa0d9 (diff) | |
Promotion of wlan-cmn.driver.lnx.1.0-00142.
CRs Change ID Subject
--------------------------------------------------------------------------------------------------------------
2016580 Icee39c896802c4d7136e0b8ef442a33feeb4799c qcacmn: Auto Detect SoC Power Collapse Failure changes
2026821 I14a77b9017ada3bc2f10fc78c69cb31b22452052 qcacmn: Reduce log level to avoid watchdog
2028524 I493fb063c8f57e38525e2dc1701a6e972d2ec0e6 qcacmn: Handle failure scenario for qdf_nbuf_map()
2028318 I06f7b43e80ddf0ce5e096351b38ce954eb634a95 qcacmn: Decouple LRO register/deregister from vdev start
2029297 I4d652c38a23f0e31ff21321692bcecc9456bf03a qcacmn: clear qdf_net_buf_track_free_list in nbuf memory
Change-Id: I336fff1f952de60d07cdd08a452b36222fc2d573
CRs-Fixed: 2026821, 2028318, 2028524, 2029297, 2016580
| -rw-r--r-- | hif/inc/hif.h | 1 | ||||
| -rw-r--r-- | hif/src/ce/ce_internal.h | 1 | ||||
| -rw-r--r-- | hif/src/ce/ce_main.c | 11 | ||||
| -rw-r--r-- | hif/src/ce/ce_tasklet.c | 4 | ||||
| -rw-r--r-- | hif/src/hif_napi.c | 8 | ||||
| -rw-r--r-- | htc/htc_send.c | 27 | ||||
| -rw-r--r-- | qdf/linux/src/qdf_nbuf.c | 3 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_api.h | 2 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_priv.h | 2 | ||||
| -rw-r--r-- | wmi/inc/wmi_unified_tlv.h | 2 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_api.c | 2 | ||||
| -rw-r--r-- | wmi/src/wmi_unified_tlv.c | 20 |
12 files changed, 44 insertions, 39 deletions
diff --git a/hif/inc/hif.h b/hif/inc/hif.h index 84602715c2fe..0cf307b9d40d 100644 --- a/hif/inc/hif.h +++ b/hif/inc/hif.h @@ -147,7 +147,6 @@ struct qca_napi_info { /* will only be present for data rx CE's */ void (*lro_flush_cb)(void *); void *lro_ctx; - qdf_spinlock_t lro_unloading_lock; }; /** diff --git a/hif/src/ce/ce_internal.h b/hif/src/ce/ce_internal.h index 70f658dd403f..d542da2e1ab2 100644 --- a/hif/src/ce/ce_internal.h +++ b/hif/src/ce/ce_internal.h @@ -151,7 +151,6 @@ struct CE_state { bool htt_rx_data; void (*lro_flush_cb)(void *); void *lro_data; - qdf_spinlock_t lro_unloading_lock; }; /* Descriptor rings must be aligned to this boundary */ diff --git a/hif/src/ce/ce_main.c b/hif/src/ce/ce_main.c index ed70cf30a66a..2cd0ec6a0bed 100644 --- a/hif/src/ce/ce_main.c +++ b/hif/src/ce/ce_main.c @@ -705,7 +705,6 @@ struct CE_handle *ce_init(struct hif_softc *scn, CE_state->ctrl_addr = ctrl_addr; CE_state->state = CE_RUNNING; CE_state->attr_flags = attr->flags; - qdf_spinlock_create(&CE_state->lro_unloading_lock); } CE_state->scn = scn; @@ -1230,8 +1229,6 @@ void ce_fini(struct CE_handle *copyeng) CE_state->state = CE_UNUSED; scn->ce_id_to_state[CE_id] = NULL; - qdf_spinlock_destroy(&CE_state->lro_unloading_lock); - if (CE_state->src_ring) { /* Cleanup the datapath Tx ring */ ce_h2t_tx_ce_cleanup(copyeng); @@ -1682,7 +1679,7 @@ static void hif_post_recv_buffers_failure(struct HIF_CE_pipe_info *pipe_info, qdf_spin_lock_bh(&pipe_info->recv_bufs_needed_lock); error_cnt_tmp = ++(*error_cnt); qdf_spin_unlock_bh(&pipe_info->recv_bufs_needed_lock); - HIF_ERROR("%s: pipe_num %d, needed %d, err_cnt = %u, fail_type = %s", + HIF_DBG("%s: pipe_num %d, needed %d, err_cnt = %u, fail_type = %s", __func__, pipe_info->pipe_num, bufs_needed_tmp, error_cnt_tmp, failure_type_string); hif_record_ce_desc_event(scn, ce_id, failure_type, @@ -2652,15 +2649,9 @@ int ce_lro_flush_cb_deregister(struct hif_opaque_softc *hif_hdl, for (i = 0; i < scn->ce_count; i++) { ce_state = scn->ce_id_to_state[i]; if ((ce_state != NULL) && (ce_state->htt_rx_data)) { - qdf_spin_lock_bh( - &ce_state->lro_unloading_lock); ce_state->lro_flush_cb = NULL; lro_deinit_cb(ce_state->lro_data); ce_state->lro_data = NULL; - qdf_spin_unlock_bh( - &ce_state->lro_unloading_lock); - qdf_spinlock_destroy( - &ce_state->lro_unloading_lock); rc++; } } diff --git a/hif/src/ce/ce_tasklet.c b/hif/src/ce/ce_tasklet.c index 7a06230863bb..910d90c53088 100644 --- a/hif/src/ce/ce_tasklet.c +++ b/hif/src/ce/ce_tasklet.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015-2016 The Linux Foundation. All rights reserved. + * Copyright (c) 2015-2017 The Linux Foundation. All rights reserved. * * Previously licensed under the ISC license by Qualcomm Atheros, Inc. * @@ -172,13 +172,11 @@ static void ce_tasklet(unsigned long data) QDF_BUG(0); } - qdf_spin_lock_bh(&CE_state->lro_unloading_lock); ce_per_engine_service(scn, tasklet_entry->ce_id); if (CE_state->lro_flush_cb != NULL) { CE_state->lro_flush_cb(CE_state->lro_data); } - qdf_spin_unlock_bh(&CE_state->lro_unloading_lock); if (ce_check_rx_pending(CE_state)) { /* diff --git a/hif/src/hif_napi.c b/hif/src/hif_napi.c index a9aeae549711..47336e5d7214 100644 --- a/hif/src/hif_napi.c +++ b/hif/src/hif_napi.c @@ -179,7 +179,6 @@ int hif_napi_create(struct hif_opaque_softc *hif_ctx, HIF_WARN("%s: bad IRQ value for CE %d: %d", __func__, i, napii->irq); - qdf_spinlock_create(&napii->lro_unloading_lock); init_dummy_netdev(&(napii->netdev)); NAPI_DEBUG("adding napi=%p to netdev=%p (poll=%p, bdgt=%d)", @@ -295,7 +294,6 @@ int hif_napi_destroy(struct hif_opaque_softc *hif_ctx, napii->netdev.napi_list.prev, napii->netdev.napi_list.next); - qdf_spinlock_destroy(&napii->lro_unloading_lock); netif_napi_del(&(napii->napi)); napid->ce_map &= ~(0x01 << ce); @@ -395,12 +393,9 @@ void hif_napi_lro_flush_cb_deregister(struct hif_opaque_softc *hif_hdl, HIF_DBG("deRegistering LRO for ce_id %d NAPI callback for %d flush_cb %p, lro_data %p\n", i, napii->id, napii->lro_flush_cb, napii->lro_ctx); - qdf_spin_lock_bh(&napii->lro_unloading_lock); napii->lro_flush_cb = NULL; lro_deinit_cb(napii->lro_ctx); napii->lro_ctx = NULL; - qdf_spin_unlock_bh( - &napii->lro_unloading_lock); } } } else { @@ -847,15 +842,12 @@ int hif_napi_poll(struct hif_opaque_softc *hif_ctx, hif_record_ce_desc_event(hif, NAPI_ID2PIPE(napi_info->id), NAPI_POLL_ENTER, NULL, NULL, cpu); - qdf_spin_lock_bh(&napi_info->lro_unloading_lock); - rc = ce_per_engine_service(hif, NAPI_ID2PIPE(napi_info->id)); NAPI_DEBUG("%s: ce_per_engine_service processed %d msgs", __func__, rc); if (napi_info->lro_flush_cb) napi_info->lro_flush_cb(napi_info->lro_ctx); - qdf_spin_unlock_bh(&napi_info->lro_unloading_lock); /* do not return 0, if there was some work done, * even if it is below the scale diff --git a/htc/htc_send.c b/htc/htc_send.c index f50073b045fc..09fd9ed69a92 100644 --- a/htc/htc_send.c +++ b/htc/htc_send.c @@ -549,6 +549,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); @@ -618,9 +619,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; + } } } LOCK_HTC_TX(target); @@ -1347,6 +1355,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", @@ -1404,9 +1413,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; } diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c index fb2edf3ee547..a2457e90b677 100644 --- a/qdf/linux/src/qdf_nbuf.c +++ b/qdf/linux/src/qdf_nbuf.c @@ -196,7 +196,7 @@ struct sk_buff *__qdf_nbuf_alloc(qdf_device_t osdev, size_t size, int reserve, skb = dev_alloc_skb(size); if (!skb) { - pr_err("ERROR:NBUF alloc failed\n"); + pr_info("ERROR:NBUF alloc failed\n"); return NULL; } memset(skb->cb, 0x0, sizeof(skb->cb)); @@ -1403,6 +1403,7 @@ static void qdf_nbuf_track_memory_manager_destroy(void) spin_unlock_irqrestore(&qdf_net_buf_track_free_list_lock, irq_flag); kmem_cache_destroy(nbuf_tracking_cache); + qdf_net_buf_track_free_list = NULL; } /** diff --git a/wmi/inc/wmi_unified_api.h b/wmi/inc/wmi_unified_api.h index aa545493d52e..3c032c9d4d8b 100644 --- a/wmi/inc/wmi_unified_api.h +++ b/wmi/inc/wmi_unified_api.h @@ -695,7 +695,7 @@ QDF_STATUS wmi_unified_pktlog_wmi_send_cmd(void *wmi_hdl, QDF_STATUS wmi_unified_add_wow_wakeup_event_cmd(void *wmi_hdl, uint32_t vdev_id, - uint32_t bitmap, + uint32_t *bitmap, bool enable); QDF_STATUS wmi_unified_wow_patterns_to_fw_cmd(void *wmi_hdl, diff --git a/wmi/inc/wmi_unified_priv.h b/wmi/inc/wmi_unified_priv.h index 22880dcc1795..9d968f2dcf00 100644 --- a/wmi/inc/wmi_unified_priv.h +++ b/wmi/inc/wmi_unified_priv.h @@ -542,7 +542,7 @@ QDF_STATUS QDF_STATUS (*send_add_wow_wakeup_event_cmd)(wmi_unified_t wmi_handle, uint32_t vdev_id, - uint32_t bitmap, + uint32_t *bitmap, bool enable); QDF_STATUS (*send_wow_patterns_to_fw_cmd)(wmi_unified_t wmi_handle, diff --git a/wmi/inc/wmi_unified_tlv.h b/wmi/inc/wmi_unified_tlv.h index e285728930f8..3ec87efc49ee 100644 --- a/wmi/inc/wmi_unified_tlv.h +++ b/wmi/inc/wmi_unified_tlv.h @@ -384,7 +384,7 @@ QDF_STATUS send_pktlog_wmi_send_cmd_tlv(wmi_unified_t wmi_handle, QDF_STATUS send_add_wow_wakeup_event_cmd_tlv(wmi_unified_t wmi_handle, uint32_t vdev_id, - uint32_t bitmap, + uint32_t *event_bitmap, bool enable); QDF_STATUS send_wow_patterns_to_fw_cmd_tlv(wmi_unified_t wmi_handle, diff --git a/wmi/src/wmi_unified_api.c b/wmi/src/wmi_unified_api.c index 8dc13e1fa505..232cb9becc7a 100644 --- a/wmi/src/wmi_unified_api.c +++ b/wmi/src/wmi_unified_api.c @@ -2352,7 +2352,7 @@ QDF_STATUS wmi_unified_pktlog_wmi_send_cmd(void *wmi_hdl, */ QDF_STATUS wmi_unified_add_wow_wakeup_event_cmd(void *wmi_hdl, uint32_t vdev_id, - uint32_t bitmap, + uint32_t *bitmap, bool enable) { wmi_unified_t wmi_handle = (wmi_unified_t) wmi_hdl; diff --git a/wmi/src/wmi_unified_tlv.c b/wmi/src/wmi_unified_tlv.c index 2e78f3f817b3..51619a946e9b 100644 --- a/wmi/src/wmi_unified_tlv.c +++ b/wmi/src/wmi_unified_tlv.c @@ -1824,6 +1824,7 @@ 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; @@ -1852,7 +1853,14 @@ 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) @@ -7669,7 +7677,7 @@ wmi_send_failed: */ QDF_STATUS send_add_wow_wakeup_event_cmd_tlv(wmi_unified_t wmi_handle, uint32_t vdev_id, - uint32_t bitmap, + uint32_t *bitmap, bool enable) { WMI_WOW_ADD_DEL_EVT_CMD_fixed_param *cmd; @@ -7690,7 +7698,8 @@ QDF_STATUS send_add_wow_wakeup_event_cmd_tlv(wmi_unified_t wmi_handle, (WMI_WOW_ADD_DEL_EVT_CMD_fixed_param)); cmd->vdev_id = vdev_id; cmd->is_add = enable; - cmd->event_bitmap = bitmap; + qdf_mem_copy(&(cmd->event_bitmaps[0]), bitmap, sizeof(uint32_t) * + WMI_WOW_MAX_EVENT_BM_LEN); ret = wmi_unified_cmd_send(wmi_handle, buf, len, WMI_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID); @@ -7700,8 +7709,9 @@ QDF_STATUS send_add_wow_wakeup_event_cmd_tlv(wmi_unified_t wmi_handle, return QDF_STATUS_E_FAILURE; } - WMI_LOGD("Wakeup pattern 0x%x %s in fw", bitmap, - enable ? "enabled" : "disabled"); + WMI_LOGD("Wakeup pattern 0x%x%x%x%x %s in fw", cmd->event_bitmaps[0], + cmd->event_bitmaps[1], cmd->event_bitmaps[2], + cmd->event_bitmaps[3], enable ? "enabled" : "disabled"); return QDF_STATUS_SUCCESS; } |
