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

Commit 52f01ef0 authored by Sai Chaitanya Kaveti's avatar Sai Chaitanya Kaveti Committed by Gerrit - the friendly Code Review server
Browse files

msm: mhi_dev: Checking the out channel status directly



If the net dev init process is scheduled out in between registering
a callback for in-channel and out-channel and start command for these
channels gets processed at this time (after registering the callback
for out channel but before registeringthe callback for in-channel)
then with existing logic, we never register with the network interface.

Checking the out channel status directly rather than using local bool
variable out_channel_started before calling
mhi_dev_net_open_chan_create_netif API. If out channel status is
connected the mhi_dev_net_open_chan_create_netif API is called.

Change-Id: I69af6c49ee565ffd04c4d0ac22b686ff986b7bc7
Signed-off-by: default avatarSai Chaitanya Kaveti <quic_skaveti@quicinc.com>
parent 97db20de
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -695,7 +695,7 @@ static void mhi_dev_net_state_cb(struct mhi_dev_client_cb_data *cb_data)
int mhi_dev_net_interface_init(void)
{
	int ret_val = 0, index = 0;
	bool out_channel_started = false;
	uint32_t info_out_ch = 0;
	struct mhi_dev_net_client *mhi_net_client = NULL;

	if (mhi_net_ctxt.client_handle) {
@@ -750,10 +750,7 @@ int mhi_dev_net_interface_init(void)
	}
	ret_val = mhi_register_state_cb(mhi_dev_net_state_cb,
				mhi_net_client, MHI_CLIENT_IP_SW_4_OUT);
	/* -EEXIST indicates success and channel is already open */
	if (ret_val == -EEXIST)
		out_channel_started = true;
	else if (ret_val < 0)
	if (ret_val < 0 && ret_val != -EEXIST)
		goto register_state_cb_fail;

	ret_val = mhi_register_state_cb(mhi_dev_net_state_cb,
@@ -770,7 +767,9 @@ int mhi_dev_net_interface_init(void)
		 * with mhi_dev_net_open_chan_create_netif().
		 */
		ret_val = 0;
		if (out_channel_started) {
		if (!mhi_ctrl_state_info(mhi_net_client->out_chan,
					&info_out_ch)) {
			if (info_out_ch == MHI_STATE_CONNECTED) {
				ret_val = mhi_dev_net_open_chan_create_netif
					(mhi_net_client);
				if (ret_val < 0) {
@@ -779,6 +778,7 @@ int mhi_dev_net_interface_init(void)
					goto channel_open_fail;
				}
			}
		}
	} else if (ret_val < 0) {
		goto register_state_cb_fail;
	}