Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0ec60229 authored by Veerabhadrarao Badiganti's avatar Veerabhadrarao Badiganti
Browse files

msm: mhi_dev: Fail start command if fails to allocate reqs



Fail the start command if we fails to allocate buffer for event
requests.

Change-Id: I05e9acb093f53f1675a4f711182730ab420e0e5a
Signed-off-by: default avatarVeerabhadrarao Badiganti <quic_vbadigan@quicinc.com>
parent eb29f2d7
Loading
Loading
Loading
Loading
+24 −14
Original line number Diff line number Diff line
@@ -1940,12 +1940,7 @@ static int mhi_dev_process_cmd_ring(struct mhi_dev *mhi,
				mhi_log(MHI_MSG_VERBOSE,
					"Failed to enable chdb for ch %d\n",
						ch_id);
				rc = mhi_dev_send_cmd_comp_event(mhi,
					MHI_CMD_COMPL_CODE_UNDEFINED);
				if (rc)
					mhi_log(MHI_MSG_VERBOSE,
						"Error with compl event\n");
				return rc;
				goto send_undef_completion_event;
			}
		}

@@ -1959,12 +1954,7 @@ static int mhi_dev_process_cmd_ring(struct mhi_dev *mhi,
		if (rc) {
			mhi_log(MHI_MSG_ERROR,
				"start ring failed for ch %d\n", ch_id);
			rc = mhi_dev_send_cmd_comp_event(mhi,
						MHI_CMD_COMPL_CODE_UNDEFINED);
			if (rc)
				mhi_log(MHI_MSG_ERROR,
					"Error with compl event\n");
			return rc;
			goto send_undef_completion_event;
		}

		mhi->ring[mhi->ch_ring_start + ch_id].state =
@@ -1990,13 +1980,19 @@ static int mhi_dev_process_cmd_ring(struct mhi_dev *mhi,
					mhi_log(MHI_MSG_ERROR,
					"error starting event ring %d\n",
					mhi->ch_ctx_cache[ch_id].err_indx);
					return rc;
					goto send_undef_completion_event;
				}
			}
			mutex_lock(&mhi->ch[ch_id].ch_lock);
			mhi_dev_alloc_evt_buf_evt_req(mhi, &mhi->ch[ch_id],
			rc = mhi_dev_alloc_evt_buf_evt_req(mhi, &mhi->ch[ch_id],
					evt_ring);
			mutex_unlock(&mhi->ch[ch_id].ch_lock);
			if (rc) {
				mhi_log(MHI_MSG_ERROR,
					"Failed to alloc ereqs for er %d\n",
					mhi->ch_ctx_cache[ch_id].err_indx);
				goto send_undef_completion_event;
			}
		}

		if (MHI_USE_DMA(mhi))
@@ -2022,6 +2018,20 @@ static int mhi_dev_process_cmd_ring(struct mhi_dev *mhi,
		mhi_dev_trigger_cb(ch_id);
		mhi_uci_chan_state_notify(mhi, ch_id, MHI_STATE_CONNECTED);
		break;

send_undef_completion_event:
		mhi->ch_ctx_cache[ch_id].ch_state = MHI_DEV_CH_STATE_DISABLED;
		mhi->ch[ch_id].state = MHI_DEV_CH_UNINT;

		rc = mhi_dev_send_cmd_comp_event(mhi,
				MHI_CMD_COMPL_CODE_UNDEFINED);
		if (rc)
			mhi_log(MHI_MSG_VERBOSE, "Error with compl event\n");

		mhi_dev_mmio_disable_chdb_a7(mhi, ch_id);

		return rc;

	case MHI_DEV_RING_EL_STOP:
		if (ch_id >= HW_CHANNEL_BASE) {
			rc = mhi_hwc_chcmd(mhi, ch_id, el->generic.type);