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

Commit 3ce1ef22 authored by Skylar Chang's avatar Skylar Chang
Browse files

msm: ipa3: add check on qmi-client handler



In some cases with IPA3 received qmi_service_exit from
modem but still uses invalid qmi-handler to send QMI-msg
to modem which leads to crash. The fix is to add the
check before sending QMI msg to modem.

Change-Id: Iac48747a188b234cc640285e181984985fc3c012
Signed-off-by: default avatarSkylar Chang <chiaweic@codeaurora.org>
parent 1fac7f53
Loading
Loading
Loading
Loading
+18 −8
Original line number Diff line number Diff line
@@ -493,6 +493,8 @@ static int qmi_init_modem_send_sync_msg(void)
	resp_desc.ei_array = ipa_init_modem_driver_resp_msg_data_v01_ei;

	pr_info("Sending QMI_IPA_INIT_MODEM_DRIVER_REQ_V01\n");
	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc, &req, sizeof(req),
			&resp_desc, &resp, sizeof(resp),
			QMI_SEND_REQ_TIMEOUT_MS);
@@ -538,7 +540,8 @@ int qmi_filter_request_send(struct ipa_install_fltr_rule_req_msg_v01 *req)
		QMI_IPA_INSTALL_FILTER_RULE_RESP_MAX_MSG_LEN_V01;
	resp_desc.msg_id = QMI_IPA_INSTALL_FILTER_RULE_RESP_V01;
	resp_desc.ei_array = ipa_install_fltr_rule_resp_msg_data_v01_ei;

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc,
			req,
			sizeof(struct ipa_install_fltr_rule_req_msg_v01),
@@ -574,7 +577,8 @@ int qmi_enable_force_clear_datapath_send(
	resp_desc.msg_id = QMI_IPA_ENABLE_FORCE_CLEAR_DATAPATH_RESP_V01;
	resp_desc.ei_array =
		ipa_enable_force_clear_datapath_resp_msg_data_v01_ei;

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt,
			&req_desc,
			req,
@@ -618,7 +622,8 @@ int qmi_disable_force_clear_datapath_send(
	resp_desc.msg_id = QMI_IPA_DISABLE_FORCE_CLEAR_DATAPATH_RESP_V01;
	resp_desc.ei_array =
		ipa_disable_force_clear_datapath_resp_msg_data_v01_ei;

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt,
			&req_desc,
			req,
@@ -688,7 +693,8 @@ int qmi_filter_notify_send(struct ipa_fltr_installed_notif_req_msg_v01 *req)
		QMI_IPA_FILTER_INSTALLED_NOTIF_RESP_MAX_MSG_LEN_V01;
	resp_desc.msg_id = QMI_IPA_FILTER_INSTALLED_NOTIF_RESP_V01;
	resp_desc.ei_array = ipa_fltr_installed_notif_resp_msg_data_v01_ei;

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt,
			&req_desc,
			req,
@@ -1089,7 +1095,8 @@ int ipa_qmi_get_data_stats(struct ipa_get_data_stats_req_msg_v01 *req,
	resp_desc.ei_array = ipa_get_data_stats_resp_msg_data_v01_ei;

	IPAWANDBG("Sending QMI_IPA_GET_DATA_STATS_REQ_V01\n");

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc, req,
			sizeof(struct ipa_get_data_stats_req_msg_v01),
			&resp_desc, resp,
@@ -1118,7 +1125,8 @@ int ipa_qmi_get_network_stats(struct ipa_get_apn_data_stats_req_msg_v01 *req,
	resp_desc.ei_array = ipa_get_apn_data_stats_resp_msg_data_v01_ei;

	IPAWANDBG("Sending QMI_IPA_GET_APN_DATA_STATS_REQ_V01\n");

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc, req,
			sizeof(struct ipa_get_apn_data_stats_req_msg_v01),
			&resp_desc, resp,
@@ -1150,7 +1158,8 @@ int ipa_qmi_set_data_quota(struct ipa_set_data_usage_quota_req_msg_v01 *req)
	resp_desc.ei_array = ipa_set_data_usage_quota_resp_msg_data_v01_ei;

	IPAWANDBG("Sending QMI_IPA_SET_DATA_USAGE_QUOTA_REQ_V01\n");

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc, req,
			sizeof(struct ipa_set_data_usage_quota_req_msg_v01),
			&resp_desc, &resp, sizeof(resp),
@@ -1184,7 +1193,8 @@ int ipa_qmi_stop_data_qouta(void)
	resp_desc.ei_array = ipa_stop_data_usage_quota_resp_msg_data_v01_ei;

	IPAWANDBG("Sending QMI_IPA_STOP_DATA_USAGE_QUOTA_REQ_V01\n");

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc, &req, sizeof(req),
		&resp_desc, &resp, sizeof(resp),
		QMI_SEND_STATS_REQ_TIMEOUT_MS);
+18 −3
Original line number Diff line number Diff line
@@ -582,6 +582,8 @@ static int ipa3_qmi_init_modem_send_sync_msg(void)
	resp_desc.ei_array = ipa3_init_modem_driver_resp_msg_data_v01_ei;

	pr_info("Sending QMI_IPA_INIT_MODEM_DRIVER_REQ_V01\n");
	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc, &req, sizeof(req),
			&resp_desc, &resp, sizeof(resp),
			QMI_SEND_REQ_TIMEOUT_MS);
@@ -623,6 +625,8 @@ int ipa3_qmi_filter_request_send(struct ipa_install_fltr_rule_req_msg_v01 *req)
	resp_desc.msg_id = QMI_IPA_INSTALL_FILTER_RULE_RESP_V01;
	resp_desc.ei_array = ipa3_install_fltr_rule_resp_msg_data_v01_ei;

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc,
			req,
			sizeof(struct ipa_install_fltr_rule_req_msg_v01),
@@ -703,6 +707,8 @@ int ipa3_qmi_enable_force_clear_datapath_send(
	resp_desc.ei_array =
		ipa3_enable_force_clear_datapath_resp_msg_data_v01_ei;

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt,
			&req_desc,
			req,
@@ -746,7 +752,8 @@ int ipa3_qmi_disable_force_clear_datapath_send(
	resp_desc.msg_id = QMI_IPA_DISABLE_FORCE_CLEAR_DATAPATH_RESP_V01;
	resp_desc.ei_array =
		ipa3_disable_force_clear_datapath_resp_msg_data_v01_ei;

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt,
			&req_desc,
			req,
@@ -803,6 +810,8 @@ int ipa3_qmi_filter_notify_send(
	resp_desc.msg_id = QMI_IPA_FILTER_INSTALLED_NOTIF_RESP_V01;
	resp_desc.ei_array = ipa3_fltr_installed_notif_resp_msg_data_v01_ei;

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt,
			&req_desc,
			req,
@@ -1213,6 +1222,8 @@ int ipa3_qmi_get_data_stats(struct ipa_get_data_stats_req_msg_v01 *req,

	IPAWANDBG_LOW("Sending QMI_IPA_GET_DATA_STATS_REQ_V01\n");

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc, req,
			sizeof(struct ipa_get_data_stats_req_msg_v01),
			&resp_desc, resp,
@@ -1242,6 +1253,8 @@ int ipa3_qmi_get_network_stats(struct ipa_get_apn_data_stats_req_msg_v01 *req,

	IPAWANDBG_LOW("Sending QMI_IPA_GET_APN_DATA_STATS_REQ_V01\n");

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc, req,
			sizeof(struct ipa_get_apn_data_stats_req_msg_v01),
			&resp_desc, resp,
@@ -1273,7 +1286,8 @@ int ipa3_qmi_set_data_quota(struct ipa_set_data_usage_quota_req_msg_v01 *req)
	resp_desc.ei_array = ipa3_set_data_usage_quota_resp_msg_data_v01_ei;

	IPAWANDBG_LOW("Sending QMI_IPA_SET_DATA_USAGE_QUOTA_REQ_V01\n");

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc, req,
			sizeof(struct ipa_set_data_usage_quota_req_msg_v01),
			&resp_desc, &resp, sizeof(resp),
@@ -1307,7 +1321,8 @@ int ipa3_qmi_stop_data_qouta(void)
	resp_desc.ei_array = ipa3_stop_data_usage_quota_resp_msg_data_v01_ei;

	IPAWANDBG_LOW("Sending QMI_IPA_STOP_DATA_USAGE_QUOTA_REQ_V01\n");

	if (unlikely(!ipa_q6_clnt))
		return -ETIMEDOUT;
	rc = qmi_send_req_wait(ipa_q6_clnt, &req_desc, &req, sizeof(req),
		&resp_desc, &resp, sizeof(resp),
		QMI_SEND_STATS_REQ_TIMEOUT_MS);