From 9cd88fea7f9cf95434c9bc1db91ac1fbca97dece Mon Sep 17 00:00:00 2001 From: Jagadeesh Ponduru Date: Tue, 7 Sep 2021 11:21:05 +0530 Subject: [PATCH 1/9] msm: ipa3: Configure HOLB for WLAN2 consumer pipe To avoid temporary stall on WLAN client enabling the HOLB on WLAN2 consumer pipe. Change-Id: I3920205f7f62dbdd240da162fab4158ab8e070b4 Signed-off-by: Jagadeeesh Ponduru --- drivers/platform/msm/ipa/ipa_v3/ipa_client.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_client.c b/drivers/platform/msm/ipa/ipa_v3/ipa_client.c index 8ca62014e5cf..867fb64bbb39 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_client.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_client.c @@ -67,6 +67,7 @@ int ipa3_enable_data_path(u32 clnt_hdl) holb_cfg.en = IPA_HOLB_TMR_EN; } else if (ipa3_ctx->ipa_hw_type == IPA_HW_v4_11 && (ep->client == IPA_CLIENT_WLAN1_CONS || + ep->client == IPA_CLIENT_WLAN2_CONS || ep->client == IPA_CLIENT_USB_CONS)) { holb_cfg.en = IPA_HOLB_TMR_EN; holb_cfg.tmr_val = IPA_HOLB_TMR_VAL_4_5; From bcd36e8871da844b7a1be6cc2c70559391d5c4b9 Mon Sep 17 00:00:00 2001 From: Praveen Kurapati Date: Mon, 30 Aug 2021 11:18:13 +0530 Subject: [PATCH 2/9] msm: ipa3: Reduced excessive logs from ipa Due to excessive logs from ipa it blocks other tasks execution. Ratelimit added inorder to reduce the logs. Change-Id: I00ae9b1e62dd14d82e22d3c788b68d0474a8de87 Signed-off-by: Praveen Kurapati --- drivers/platform/msm/ipa/ipa_clients/ipa_gsb.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/platform/msm/ipa/ipa_clients/ipa_gsb.c b/drivers/platform/msm/ipa/ipa_clients/ipa_gsb.c index 31bd41369d73..8eb0627c8aa3 100644 --- a/drivers/platform/msm/ipa/ipa_clients/ipa_gsb.c +++ b/drivers/platform/msm/ipa/ipa_clients/ipa_gsb.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Copyright (c) 2018-2020, The Linux Foundation. All rights reserved. + * Copyright (c) 2018-2021, The Linux Foundation. All rights reserved. */ #include @@ -56,6 +56,16 @@ IPA_GSB_DRV_NAME " %s:%d " fmt, ## args); \ } while (0) +#define IPA_GSB_ERR_RL(fmt, args...) \ + do { \ + pr_err_ratelimited_ipa(IPA_GSB_DRV_NAME " %s:%d " fmt, \ + __func__, __LINE__, ## args); \ + IPA_IPC_LOGGING(ipa3_get_ipc_logbuf(), \ + IPA_GSB_DRV_NAME " %s:%d " fmt, ## args); \ + IPA_IPC_LOGGING(ipa3_get_ipc_logbuf_low(), \ + IPA_GSB_DRV_NAME " %s:%d " fmt, ## args); \ + } while (0) + #define IPA_GSB_MAX_MSG_LEN 512 #ifdef CONFIG_DEBUG_FS @@ -1184,7 +1194,7 @@ static int ipa_bridge_tx_dp_internal(u32 hdl, struct sk_buff *skb, } if (unlikely(!ipa_gsb_ctx->iface[hdl]->is_resumed)) { - IPA_GSB_ERR("iface %d was suspended\n", hdl); + IPA_GSB_ERR_RL("iface %d was suspended\n", hdl); return -EFAULT; } From 9e52c6925fe4108d968fc2ecd33c8a77eb0a0b8f Mon Sep 17 00:00:00 2001 From: Cheng Zeng Date: Tue, 7 Sep 2021 18:15:39 +0800 Subject: [PATCH 3/9] msm: ipa3: Fix null pointer dereference error If smmu is not enabled, smmu context device check was missing before accessing it which was resulting in null pointer dereference. Now adding check before accessing it. Change-Id: I94393524c79847a165ba605d34906525640b359a Signed-off-by: Cheng Zeng --- drivers/platform/msm/ipa/ipa_v3/ipa_nat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_nat.c b/drivers/platform/msm/ipa/ipa_v3/ipa_nat.c index 5edd4776669e..8ced02501f84 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_nat.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_nat.c @@ -179,7 +179,7 @@ static int ipa3_nat_ipv6ct_mmap( /* * Check if no smmu or non dma coherent */ - if (!cb->valid || !dev_is_dma_coherent(cb->dev)) { + if (cb && cb->dev && (!cb->valid || !dev_is_dma_coherent(cb->dev))) { IPADBG("Either smmu valid=%u and/or DMA coherent=%u false\n", cb->valid, !dev_is_dma_coherent(cb->dev)); From 27b85ef3569673c2bfa1715f7a842a0acd138421 Mon Sep 17 00:00:00 2001 From: Chaitanya Pratapa Date: Fri, 10 Sep 2021 15:57:50 -0700 Subject: [PATCH 4/9] msm: ipa: Fix to free up all pending EOB pages Make changes to free up all pending EOB pages when SKB allocation used to handle EOT is failed as we could end up in a frag overflow. Change-Id: I80ae84d00d1bbf2cf89e97261d2fe8c3742eda04 Signed-off-by: Chaitanya Pratapa Signed-off-by: Jagadeesh Ponduru --- drivers/platform/msm/ipa/ipa_v3/ipa_dp.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c index 83d2d1476508..2589f2b35c8e 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c @@ -3658,17 +3658,21 @@ static struct sk_buff *handle_page_completion(struct gsi_chan_xfer_notify sys->ep->client == IPA_CLIENT_APPS_LAN_CONS) { rx_skb = alloc_skb(0, GFP_ATOMIC); if (unlikely(!rx_skb)) { - IPAERR("skb alloc failure\n"); - list_del(&rx_pkt->link); - if (!rx_page.is_tmp_alloc) { - init_page_count(rx_page.page); - } else { - dma_unmap_page(ipa3_ctx->pdev, rx_page.dma_addr, - rx_pkt->len, DMA_FROM_DEVICE); - __free_pages(rx_pkt->page_data.page, - IPA_WAN_PAGE_ORDER); + IPAERR("skb alloc failure, free all pending pages\n"); + list_for_each_entry_safe(rx_pkt, tmp, head, link) { + rx_page = rx_pkt->page_data; + size = rx_pkt->data_len; + list_del_init(&rx_pkt->link); + if (!rx_page.is_tmp_alloc) { + init_page_count(rx_page.page); + } else { + dma_unmap_page(ipa3_ctx->pdev, rx_page.dma_addr, + rx_pkt->len, DMA_FROM_DEVICE); + __free_pages(rx_pkt->page_data.page, + IPA_WAN_PAGE_ORDER); + } + rx_pkt->sys->free_rx_wrapper(rx_pkt); } - rx_pkt->sys->free_rx_wrapper(rx_pkt); IPA_STATS_INC_CNT(ipa3_ctx->stats.rx_page_drop_cnt); return NULL; } From e0f12e040a5ed5a9a7433d5a0fd414968280ba0c Mon Sep 17 00:00:00 2001 From: Raghavendar rao l Date: Wed, 5 May 2021 19:27:31 +0530 Subject: [PATCH 5/9] msm: ipa3: Add retry attempts for subsystem loading Whenever subsystem loading fails to load ipa firmware, updated change to load untill it succeeds. Change-Id: I8b600e8e03030dfbd2e255a4a2148bef942dfe11 Signed-off-by: Raghavendar rao l --- drivers/platform/msm/ipa/ipa_v3/ipa.c | 30 ++++++++++++++++--------- drivers/platform/msm/ipa/ipa_v3/ipa_i.h | 2 ++ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa.c b/drivers/platform/msm/ipa/ipa_v3/ipa.c index cd5c4a7e7fa3..bb61c7ae70ad 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa.c @@ -51,7 +51,7 @@ #endif #define DRV_NAME "ipa" - +#define DELAY_BEFORE_FW_LOAD 500 #define IPA_SUBSYSTEM_NAME "ipa_fws" #define IPA_UC_SUBSYSTEM_NAME "ipa_uc" @@ -126,6 +126,7 @@ static int ipa3_alloc_pkt_init(void); static void ipa3_load_ipa_fw(struct work_struct *work); static DECLARE_WORK(ipa3_fw_loading_work, ipa3_load_ipa_fw); +static DECLARE_DELAYED_WORK(ipa3_fw_load_failure_handle, ipa3_load_ipa_fw); static void ipa_dec_clients_disable_clks_on_wq(struct work_struct *work); static DECLARE_DELAYED_WORK(ipa_dec_clients_disable_clks_on_wq_work, @@ -6812,12 +6813,14 @@ static void ipa3_load_ipa_fw(struct work_struct *work) IPADBG("Entry\n"); IPA_ACTIVE_CLIENTS_INC_SIMPLE(); - - result = ipa3_attach_to_smmu(); - if (result) { - IPAERR("IPA attach to smmu failed %d\n", result); - IPA_ACTIVE_CLIENTS_DEC_SIMPLE(); - return; + if(!ipa3_ctx->ipa_pil_load) + { + result = ipa3_attach_to_smmu(); + if (result) { + IPAERR("IPA attach to smmu failed %d\n", result); + IPA_ACTIVE_CLIENTS_DEC_SIMPLE(); + return; + } } if (ipa3_ctx->ipa3_hw_mode != IPA_HW_MODE_EMULATION && @@ -6836,13 +6839,18 @@ static void ipa3_load_ipa_fw(struct work_struct *work) result = ipa3_manual_load_ipa_fws(); } - IPA_ACTIVE_CLIENTS_DEC_SIMPLE(); if (result) { - IPAERR("IPA FW loading process has failed result=%d\n", - result); + + ipa3_ctx->ipa_pil_load++; + IPA_ACTIVE_CLIENTS_DEC_SIMPLE(); + IPADBG("IPA firmware loading deffered to a work queue\n"); + queue_delayed_work(ipa3_ctx->transport_power_mgmt_wq, + &ipa3_fw_load_failure_handle, + msecs_to_jiffies(DELAY_BEFORE_FW_LOAD)); return; } + IPA_ACTIVE_CLIENTS_DEC_SIMPLE(); mutex_lock(&ipa3_ctx->fw_load_data.lock); ipa3_ctx->fw_load_data.state = IPA_FW_LOAD_STATE_LOADED; mutex_unlock(&ipa3_ctx->fw_load_data.lock); @@ -6902,7 +6910,7 @@ static void ipa_fw_load_sm_handle_event(enum ipa_fw_load_event ev) if (ipa3_ctx->fw_load_data.state == IPA_FW_LOAD_STATE_INIT) { ipa3_ctx->fw_load_data.state = IPA_FW_LOAD_STATE_SMMU_DONE; - goto out; + goto sched_fw_load; } if (ipa3_ctx->fw_load_data.state == IPA_FW_LOAD_STATE_FWFILE_READY) { diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h index a6a742fee493..c4e9c7c78e40 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_i.h +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_i.h @@ -2155,6 +2155,8 @@ struct ipa3_context { bool modem_load_ipa_fw; bool fnr_stats_not_supported; bool is_device_crashed; + int ipa_pil_load; + }; struct ipa3_plat_drv_res { From 8c256e028ecf31262a73910322f3b2052eddfb82 Mon Sep 17 00:00:00 2001 From: Jagadeesh Ponduru Date: Thu, 30 Sep 2021 16:47:26 +0530 Subject: [PATCH 6/9] msm: ipa3: Add change to not reset HOLB timer For Q6 endpoints add change to not reset the HOLB timer value to zero instead of default value. Add change to enable HOLB twice for IPA 4.x targets. Change-Id: Ic9596e711b037d24ae25835cb6dd193ec040d723 Signed-off-by: Praveen Kurapati Signed-off-by: Jagadeesh Ponduru --- drivers/platform/msm/ipa/ipa_v3/ipa.c | 12 +++++++----- drivers/platform/msm/ipa/ipa_v3/ipa_client.c | 6 ++++-- drivers/platform/msm/ipa/ipa_v3/ipa_utils.c | 4 ++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa.c b/drivers/platform/msm/ipa/ipa_v3/ipa.c index cd5c4a7e7fa3..eef1991b52d9 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa.c @@ -3566,16 +3566,18 @@ static void ipa3_q6_avoid_holb(void) * setting HOLB on Q6 pipes, and from APPS perspective * they are not valid, therefore, the above function * will fail. + * Also don't reset the HOLB timer to 0 for Q6 pipes. */ - ipahal_write_reg_n_fields( - IPA_ENDP_INIT_HOL_BLOCK_TIMER_n, - ep_idx, &ep_holb); + + ipahal_write_reg_n_fields( IPA_ENDP_INIT_HOL_BLOCK_EN_n, ep_idx, &ep_holb); - /* IPA4.5 issue requires HOLB_EN to be written twice */ - if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5) + /* For targets > IPA_4.0 issue requires HOLB_EN to + * be written twice. + */ + if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_0) ipahal_write_reg_n_fields( IPA_ENDP_INIT_HOL_BLOCK_EN_n, ep_idx, &ep_holb); diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_client.c b/drivers/platform/msm/ipa/ipa_v3/ipa_client.c index 8ca62014e5cf..a0978bc5c72d 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_client.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_client.c @@ -1497,8 +1497,10 @@ int ipa3_set_reset_client_cons_pipe_sus_holb(bool set_reset, u32 tmr_val, IPA_ENDP_INIT_HOL_BLOCK_EN_n, pipe_idx, &ep_holb); - /* IPA4.5 issue requires HOLB_EN to be written twice */ - if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5) + /* For targets > IPA_4.0 issue requires HOLB_EN to be + * written twice. + */ + if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_0) ipahal_write_reg_n_fields( IPA_ENDP_INIT_HOL_BLOCK_EN_n, pipe_idx, &ep_holb); diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c b/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c index 0695a368e945..5c3edacfa78a 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_utils.c @@ -6332,8 +6332,8 @@ int ipa3_cfg_ep_holb(u32 clnt_hdl, const struct ipa_ep_cfg_holb *ep_holb) ipa3_ctx->ep[clnt_hdl].holb.en = IPA_HOLB_TMR_EN; ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_EN_n, clnt_hdl, ep_holb); - /* IPA4.5 issue requires HOLB_EN to be written twice */ - if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_5) + /* For targets > IPA_4.0 issue requires HOLB_EN to be written twice */ + if (ipa3_ctx->ipa_hw_type >= IPA_HW_v4_0) ipahal_write_reg_n_fields(IPA_ENDP_INIT_HOL_BLOCK_EN_n, clnt_hdl, ep_holb); From a1ff843b17af00d02710e3e0501252212a52fbb2 Mon Sep 17 00:00:00 2001 From: Ashok Vuyyuru Date: Mon, 28 Sep 2020 16:26:47 +0530 Subject: [PATCH 7/9] msm: ipa3: Add wait queue for the adpl add changes to wait queue for the adpl. Change-Id: I5330cbf7fe1439e04c011c143bdd68657469c36e Signed-off-by: Ashok Vuyyuru --- drivers/platform/msm/ipa/ipa_v3/ipa_odl.c | 11 ++++++----- drivers/platform/msm/ipa/ipa_v3/ipa_odl.h | 1 + 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_odl.c b/drivers/platform/msm/ipa/ipa_v3/ipa_odl.c index a5dee263c49b..68fbabcdeb2d 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_odl.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_odl.c @@ -250,6 +250,7 @@ int ipa3_send_adpl_msg(unsigned long skb_data) list_add_tail(&msg->link, &ipa3_odl_ctx->adpl_msg_list); atomic_inc(&ipa3_odl_ctx->stats.numer_in_queue); mutex_unlock(&ipa3_odl_ctx->adpl_msg_lock); + wake_up(&ipa3_odl_ctx->adpl_msg_waitq); IPA_STATS_INC_CNT(ipa3_odl_ctx->stats.odl_rx_pkt); return 0; @@ -527,7 +528,9 @@ static ssize_t ipa_adpl_read(struct file *filp, char __user *buf, size_t count, int ret = 0; char __user *start = buf; struct ipa3_push_msg_odl *msg; + DEFINE_WAIT_FUNC(wait, woken_wake_function); + add_wait_queue(&ipa3_odl_ctx->adpl_msg_waitq, &wait); while (1) { IPADBG_LOW("Writing message to adpl pipe\n"); if (!ipa3_odl_ctx->odl_state.odl_open) @@ -572,9 +575,6 @@ static ssize_t ipa_adpl_read(struct file *filp, char __user *buf, size_t count, IPA_STATS_INC_CNT(ipa3_odl_ctx->stats.odl_tx_diag_pkt); kfree(msg); msg = NULL; - } else { - ret = -EAGAIN; - break; } ret = -EAGAIN; @@ -587,9 +587,9 @@ static ssize_t ipa_adpl_read(struct file *filp, char __user *buf, size_t count, if (start != buf) break; - + wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT); } - + remove_wait_queue(&ipa3_odl_ctx->adpl_msg_waitq, &wait); if (start != buf && ret != -EFAULT) ret = buf - start; @@ -665,6 +665,7 @@ int ipa_odl_init(void) odl_cdev = ipa3_odl_ctx->odl_cdev; INIT_LIST_HEAD(&ipa3_odl_ctx->adpl_msg_list); + init_waitqueue_head(&ipa3_odl_ctx->adpl_msg_waitq); mutex_init(&ipa3_odl_ctx->adpl_msg_lock); mutex_init(&ipa3_odl_ctx->pipe_lock); diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_odl.h b/drivers/platform/msm/ipa/ipa_v3/ipa_odl.h index c39d01dbb57f..e700b442b3ec 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_odl.h +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_odl.h @@ -58,6 +58,7 @@ struct ipa_odl_context { bool odl_ctl_msg_wq_flag; struct ipa3_odlstats stats; u32 odl_pm_hdl; + wait_queue_head_t adpl_msg_waitq; }; struct ipa3_push_msg_odl { From 2b90d4b534e12a3423b9267a327e56307ba71881 Mon Sep 17 00:00:00 2001 From: Jagadeesh Ponduru Date: Thu, 7 Oct 2021 11:05:59 +0530 Subject: [PATCH 8/9] msm: ipa3: increasing the uC interrupt timeout value Increased the timeout value of ipa3_uc_send_cmd from 10 to 20 in ipa3_uc_debug_stats_alloc function. Change-Id: I5be5839c60b84226872a22e8a05bb712e395e62d Signed-off-by: Jagadeesh Ponduru --- drivers/platform/msm/ipa/ipa_v3/ipa_uc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_uc.c b/drivers/platform/msm/ipa/ipa_v3/ipa_uc.c index b50625b5d688..4200d188284c 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_uc.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_uc.c @@ -1439,7 +1439,7 @@ int ipa3_uc_debug_stats_alloc( result = ipa3_uc_send_cmd((u32)(cmd.phys_base), command, IPA_HW_2_CPU_OFFLOAD_CMD_STATUS_SUCCESS, - false, 10 * HZ); + false, 20 * HZ); if (result) { IPAERR("fail to alloc offload stats\n"); goto cleanup; From 53b139775c8317a9a2111a80ec253c4cafd65540 Mon Sep 17 00:00:00 2001 From: Piyush Dhyani Date: Wed, 8 Sep 2021 12:44:57 +0530 Subject: [PATCH 9/9] msm: ipa3: Queue nop desc again if it fails. Currently during nop desc send, we are setting nop pending flag to false before queing desc, due to which we are not able to queue nop desc again if it fails for first time. Now setting nop pending flag to false only if we successfully queued nop desc. Change-Id: Ice0b3726f2ff0e81c0e5b041346e0ba06619ef62 Signed-off-by: Piyush Dhyani --- drivers/platform/msm/ipa/ipa_v3/ipa_dp.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c index 2589f2b35c8e..5ba5c7c6fb81 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_dp.c @@ -345,20 +345,22 @@ static void ipa3_send_nop_desc(struct work_struct *work) return; } list_add_tail(&tx_pkt->link, &sys->head_desc_list); - sys->len++; - sys->nop_pending = false; memset(&nop_xfer, 0, sizeof(nop_xfer)); nop_xfer.type = GSI_XFER_ELEM_NOP; nop_xfer.flags = GSI_XFER_FLAG_EOT; nop_xfer.xfer_user_data = tx_pkt; if (gsi_queue_xfer(sys->ep->gsi_chan_hdl, 1, &nop_xfer, true)) { + list_del(&tx_pkt->link); + kmem_cache_free(ipa3_ctx->tx_pkt_wrapper_cache, tx_pkt); spin_unlock_bh(&sys->spinlock); IPAERR("gsi_queue_xfer for ch:%lu failed\n", sys->ep->gsi_chan_hdl); queue_work(sys->wq, &sys->work); return; } + sys->len++; + sys->nop_pending = false; spin_unlock_bh(&sys->spinlock); /* make sure TAG process is sent before clocks are gated */