Merge "msm:ipa4: Fix race condition"

This commit is contained in:
qctecmdr
2020-12-10 23:32:58 -08:00
committed by Gerrit - the friendly Code Review server

View File

@@ -474,6 +474,7 @@ static int ipa3_qmi_send_req_wait(struct qmi_handle *client_handle,
return ret; return ret;
} }
mutex_lock(&ipa3_qmi_lock);
ret = qmi_send_request(client_handle, ret = qmi_send_request(client_handle,
&ipa3_qmi_ctx->server_sq, &ipa3_qmi_ctx->server_sq,
&txn, &txn,
@@ -482,6 +483,10 @@ static int ipa3_qmi_send_req_wait(struct qmi_handle *client_handle,
req_desc->ei_array, req_desc->ei_array,
req); req);
if (unlikely(!ipa_q6_clnt))
return -EINVAL;
mutex_unlock(&ipa3_qmi_lock);
if (ret < 0) { if (ret < 0) {
qmi_txn_cancel(&txn); qmi_txn_cancel(&txn);
return ret; return ret;
@@ -1507,9 +1512,11 @@ static void ipa3_q6_clnt_svc_arrive(struct work_struct *work)
IPAWANERR( IPAWANERR(
"ipa3_qmi_init_modem_send_sync_msg failed due to SSR!\n"); "ipa3_qmi_init_modem_send_sync_msg failed due to SSR!\n");
/* Cleanup when ipa3_wwan_remove is called */ /* Cleanup when ipa3_wwan_remove is called */
mutex_lock(&ipa3_qmi_lock);
qmi_handle_release(ipa_q6_clnt); qmi_handle_release(ipa_q6_clnt);
vfree(ipa_q6_clnt); vfree(ipa_q6_clnt);
ipa_q6_clnt = NULL; ipa_q6_clnt = NULL;
mutex_unlock(&ipa3_qmi_lock);
return; return;
} }
@@ -1849,6 +1856,7 @@ void ipa3_qmi_service_exit(void)
/* qmi-client */ /* qmi-client */
/* Release client handle */ /* Release client handle */
mutex_lock(&ipa3_qmi_lock);
if (ipa_q6_clnt != NULL) { if (ipa_q6_clnt != NULL) {
qmi_handle_release(ipa_q6_clnt); qmi_handle_release(ipa_q6_clnt);
vfree(ipa_q6_clnt); vfree(ipa_q6_clnt);
@@ -1860,7 +1868,6 @@ void ipa3_qmi_service_exit(void)
} }
/* clean the QMI msg cache */ /* clean the QMI msg cache */
mutex_lock(&ipa3_qmi_lock);
if (ipa3_qmi_ctx != NULL) { if (ipa3_qmi_ctx != NULL) {
vfree(ipa3_qmi_ctx); vfree(ipa3_qmi_ctx);
ipa3_qmi_ctx = NULL; ipa3_qmi_ctx = NULL;