Loading drivers/platform/msm/gsi/gsi.c +13 −5 Original line number Diff line number Diff line Loading @@ -3618,6 +3618,7 @@ int gsi_config_channel_mode(unsigned long chan_hdl, enum gsi_chan_mode mode) struct gsi_chan_ctx *ctx; enum gsi_chan_mode curr; unsigned long flags; enum gsi_chan_mode chan_mode; if (!gsi_ctx) { pr_err("%s:%d gsi context not allocated\n", __func__, __LINE__); Loading Loading @@ -3689,12 +3690,19 @@ int gsi_config_channel_mode(unsigned long chan_hdl, enum gsi_chan_mode mode) GSI_EE_n_CNTXT_SRC_IEOB_IRQ_CLR_OFFS( gsi_ctx->per.ee)); spin_unlock_irqrestore(&gsi_ctx->slock, flags); spin_lock_irqsave(&ctx->ring.slock, flags); atomic_set( &ctx->poll_mode, GSI_CHAN_MODE_POLL); spin_lock_irqsave(&ctx->evtr->ring.slock, flags); chan_mode = atomic_xchg(&ctx->poll_mode, GSI_CHAN_MODE_POLL); spin_unlock_irqrestore( &ctx->ring.slock, flags); &ctx->evtr->ring.slock, flags); ctx->stats.poll_pending_irq++; GSIDBG("In IEOB WA pnd cnt = %d prvmode = %d\n", ctx->stats.poll_pending_irq, chan_mode); if (chan_mode == GSI_CHAN_MODE_POLL) return GSI_STATUS_SUCCESS; else return -GSI_STATUS_PENDING_IRQ; } } Loading drivers/platform/msm/ipa/ipa_v3/ipa_dp.c +2 −1 Original line number Diff line number Diff line Loading @@ -768,7 +768,8 @@ static int ipa3_rx_switch_to_intr_mode(struct ipa3_sys_context *sys) ipa3_dec_release_wakelock(); ret = gsi_config_channel_mode(sys->ep->gsi_chan_hdl, GSI_CHAN_MODE_CALLBACK); if (ret != GSI_STATUS_SUCCESS) { if ((ret != GSI_STATUS_SUCCESS) && !atomic_read(&sys->curr_polling_state)) { if (ret == -GSI_STATUS_PENDING_IRQ) { ipa3_inc_acquire_wakelock(); atomic_set(&sys->curr_polling_state, 1); Loading Loading
drivers/platform/msm/gsi/gsi.c +13 −5 Original line number Diff line number Diff line Loading @@ -3618,6 +3618,7 @@ int gsi_config_channel_mode(unsigned long chan_hdl, enum gsi_chan_mode mode) struct gsi_chan_ctx *ctx; enum gsi_chan_mode curr; unsigned long flags; enum gsi_chan_mode chan_mode; if (!gsi_ctx) { pr_err("%s:%d gsi context not allocated\n", __func__, __LINE__); Loading Loading @@ -3689,12 +3690,19 @@ int gsi_config_channel_mode(unsigned long chan_hdl, enum gsi_chan_mode mode) GSI_EE_n_CNTXT_SRC_IEOB_IRQ_CLR_OFFS( gsi_ctx->per.ee)); spin_unlock_irqrestore(&gsi_ctx->slock, flags); spin_lock_irqsave(&ctx->ring.slock, flags); atomic_set( &ctx->poll_mode, GSI_CHAN_MODE_POLL); spin_lock_irqsave(&ctx->evtr->ring.slock, flags); chan_mode = atomic_xchg(&ctx->poll_mode, GSI_CHAN_MODE_POLL); spin_unlock_irqrestore( &ctx->ring.slock, flags); &ctx->evtr->ring.slock, flags); ctx->stats.poll_pending_irq++; GSIDBG("In IEOB WA pnd cnt = %d prvmode = %d\n", ctx->stats.poll_pending_irq, chan_mode); if (chan_mode == GSI_CHAN_MODE_POLL) return GSI_STATUS_SUCCESS; else return -GSI_STATUS_PENDING_IRQ; } } Loading
drivers/platform/msm/ipa/ipa_v3/ipa_dp.c +2 −1 Original line number Diff line number Diff line Loading @@ -768,7 +768,8 @@ static int ipa3_rx_switch_to_intr_mode(struct ipa3_sys_context *sys) ipa3_dec_release_wakelock(); ret = gsi_config_channel_mode(sys->ep->gsi_chan_hdl, GSI_CHAN_MODE_CALLBACK); if (ret != GSI_STATUS_SUCCESS) { if ((ret != GSI_STATUS_SUCCESS) && !atomic_read(&sys->curr_polling_state)) { if (ret == -GSI_STATUS_PENDING_IRQ) { ipa3_inc_acquire_wakelock(); atomic_set(&sys->curr_polling_state, 1); Loading