Loading drivers/soc/qcom/dfc_qmi.c +45 −21 Original line number Diff line number Diff line Loading @@ -736,11 +736,21 @@ dfc_get_flow_status_req(struct qmi_handle *dfc_handle, struct sockaddr_qrtr *ssctl, struct dfc_get_flow_status_resp_msg_v01 *resp) { struct dfc_get_flow_status_req_msg_v01 req; struct qmi_txn txn; struct dfc_get_flow_status_req_msg_v01 *req; struct qmi_txn *txn; int ret; ret = qmi_txn_init(dfc_handle, &txn, req = kzalloc(sizeof(*req), GFP_ATOMIC); if (!req) return -ENOMEM; txn = kzalloc(sizeof(*txn), GFP_ATOMIC); if (!txn) { kfree(req); return -ENOMEM; } ret = qmi_txn_init(dfc_handle, txn, dfc_get_flow_status_resp_msg_v01_ei, resp); if (ret < 0) { pr_err("%s() Failed init for response, err: %d\n", Loading @@ -748,19 +758,18 @@ dfc_get_flow_status_req(struct qmi_handle *dfc_handle, goto out; } memset(&req, 0, sizeof(req)); ret = qmi_send_request(dfc_handle, ssctl, &txn, ret = qmi_send_request(dfc_handle, ssctl, txn, QMI_DFC_GET_FLOW_STATUS_REQ_V01, QMI_DFC_GET_FLOW_STATUS_REQ_V01_MAX_MSG_LEN, dfc_get_flow_status_req_msg_v01_ei, &req); dfc_get_flow_status_req_msg_v01_ei, req); if (ret < 0) { qmi_txn_cancel(&txn); qmi_txn_cancel(txn); pr_err("%s() Failed sending request, err: %d\n", __func__, ret); goto out; } ret = qmi_txn_wait(&txn, DFC_TIMEOUT_MS); ret = qmi_txn_wait(txn, DFC_TIMEOUT_MS); if (ret < 0) { pr_err("%s() Response waiting failed, err: %d\n", __func__, ret); Loading @@ -771,6 +780,8 @@ dfc_get_flow_status_req(struct qmi_handle *dfc_handle, } out: kfree(txn); kfree(req); return ret; } Loading Loading @@ -1256,23 +1267,36 @@ void dfc_qmi_wq_flush(struct qmi_info *qmi) void dfc_qmi_query_flow(void *dfc_data) { struct dfc_qmi_data *data = (struct dfc_qmi_data *)dfc_data; struct dfc_get_flow_status_resp_msg_v01 resp; struct dfc_svc_ind svc_ind; struct dfc_get_flow_status_resp_msg_v01 *resp; struct dfc_svc_ind *svc_ind; int rc; if (!data) resp = kzalloc(sizeof(*resp), GFP_ATOMIC); if (!resp) return; rc = dfc_get_flow_status_req(&data->handle, &data->ssctl, &resp); if (rc < 0 || !resp.flow_status_valid || resp.flow_status_len < 1 || resp.flow_status_len > DFC_MAX_BEARERS_V01) svc_ind = kzalloc(sizeof(*svc_ind), GFP_ATOMIC); if (!svc_ind) { kfree(resp); return; } memset(&svc_ind, 0, sizeof(svc_ind)); svc_ind.dfc_info.flow_status_valid = resp.flow_status_valid; svc_ind.dfc_info.flow_status_len = resp.flow_status_len; memcpy(svc_ind.dfc_info.flow_status, resp.flow_status, sizeof(resp.flow_status[0]) * resp.flow_status_len); dfc_do_burst_flow_control(data, &svc_ind); if (!data) goto done; rc = dfc_get_flow_status_req(&data->handle, &data->ssctl, resp); if (rc < 0 || !resp->flow_status_valid || resp->flow_status_len < 1 || resp->flow_status_len > DFC_MAX_BEARERS_V01) goto done; svc_ind->dfc_info.flow_status_valid = resp->flow_status_valid; svc_ind->dfc_info.flow_status_len = resp->flow_status_len; memcpy(&svc_ind->dfc_info.flow_status, resp->flow_status, sizeof(resp->flow_status[0]) * resp->flow_status_len); dfc_do_burst_flow_control(data, svc_ind); done: kfree(svc_ind); kfree(resp); } Loading
drivers/soc/qcom/dfc_qmi.c +45 −21 Original line number Diff line number Diff line Loading @@ -736,11 +736,21 @@ dfc_get_flow_status_req(struct qmi_handle *dfc_handle, struct sockaddr_qrtr *ssctl, struct dfc_get_flow_status_resp_msg_v01 *resp) { struct dfc_get_flow_status_req_msg_v01 req; struct qmi_txn txn; struct dfc_get_flow_status_req_msg_v01 *req; struct qmi_txn *txn; int ret; ret = qmi_txn_init(dfc_handle, &txn, req = kzalloc(sizeof(*req), GFP_ATOMIC); if (!req) return -ENOMEM; txn = kzalloc(sizeof(*txn), GFP_ATOMIC); if (!txn) { kfree(req); return -ENOMEM; } ret = qmi_txn_init(dfc_handle, txn, dfc_get_flow_status_resp_msg_v01_ei, resp); if (ret < 0) { pr_err("%s() Failed init for response, err: %d\n", Loading @@ -748,19 +758,18 @@ dfc_get_flow_status_req(struct qmi_handle *dfc_handle, goto out; } memset(&req, 0, sizeof(req)); ret = qmi_send_request(dfc_handle, ssctl, &txn, ret = qmi_send_request(dfc_handle, ssctl, txn, QMI_DFC_GET_FLOW_STATUS_REQ_V01, QMI_DFC_GET_FLOW_STATUS_REQ_V01_MAX_MSG_LEN, dfc_get_flow_status_req_msg_v01_ei, &req); dfc_get_flow_status_req_msg_v01_ei, req); if (ret < 0) { qmi_txn_cancel(&txn); qmi_txn_cancel(txn); pr_err("%s() Failed sending request, err: %d\n", __func__, ret); goto out; } ret = qmi_txn_wait(&txn, DFC_TIMEOUT_MS); ret = qmi_txn_wait(txn, DFC_TIMEOUT_MS); if (ret < 0) { pr_err("%s() Response waiting failed, err: %d\n", __func__, ret); Loading @@ -771,6 +780,8 @@ dfc_get_flow_status_req(struct qmi_handle *dfc_handle, } out: kfree(txn); kfree(req); return ret; } Loading Loading @@ -1256,23 +1267,36 @@ void dfc_qmi_wq_flush(struct qmi_info *qmi) void dfc_qmi_query_flow(void *dfc_data) { struct dfc_qmi_data *data = (struct dfc_qmi_data *)dfc_data; struct dfc_get_flow_status_resp_msg_v01 resp; struct dfc_svc_ind svc_ind; struct dfc_get_flow_status_resp_msg_v01 *resp; struct dfc_svc_ind *svc_ind; int rc; if (!data) resp = kzalloc(sizeof(*resp), GFP_ATOMIC); if (!resp) return; rc = dfc_get_flow_status_req(&data->handle, &data->ssctl, &resp); if (rc < 0 || !resp.flow_status_valid || resp.flow_status_len < 1 || resp.flow_status_len > DFC_MAX_BEARERS_V01) svc_ind = kzalloc(sizeof(*svc_ind), GFP_ATOMIC); if (!svc_ind) { kfree(resp); return; } memset(&svc_ind, 0, sizeof(svc_ind)); svc_ind.dfc_info.flow_status_valid = resp.flow_status_valid; svc_ind.dfc_info.flow_status_len = resp.flow_status_len; memcpy(svc_ind.dfc_info.flow_status, resp.flow_status, sizeof(resp.flow_status[0]) * resp.flow_status_len); dfc_do_burst_flow_control(data, &svc_ind); if (!data) goto done; rc = dfc_get_flow_status_req(&data->handle, &data->ssctl, resp); if (rc < 0 || !resp->flow_status_valid || resp->flow_status_len < 1 || resp->flow_status_len > DFC_MAX_BEARERS_V01) goto done; svc_ind->dfc_info.flow_status_valid = resp->flow_status_valid; svc_ind->dfc_info.flow_status_len = resp->flow_status_len; memcpy(&svc_ind->dfc_info.flow_status, resp->flow_status, sizeof(resp->flow_status[0]) * resp->flow_status_len); dfc_do_burst_flow_control(data, svc_ind); done: kfree(svc_ind); kfree(resp); }