Merge tag 'LA.UM.9.14.r1-20500.01-LAHAINA.QSSI12.0' of https://git.codelinaro.org/clo/la/platform/vendor/opensource/dataipa into android12-5.4-lahaina
"LA.UM.9.14.r1-20500.01-LAHAINA.QSSI12.0" * tag 'LA.UM.9.14.r1-20500.01-LAHAINA.QSSI12.0' of https://git.codelinaro.org/clo/la/platform/vendor/opensource/dataipa: msm: ipa3: add check in odl pipe cleanup msm: ipa3: Added changes to check QMI pointer valid or not msm: ipa: fix to NULL terminate the pointer msm: ipahal: modify parameter from eq_bitfield[i] to i msm: ipa3: handling MISRA issue Change-Id: I79939c82f4245f459dd320ffcd413815f2d18905
This commit is contained in:
commit
e97a85da49
@ -1,6 +1,7 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
// SPDX-License-Identifier: GPL-2.0-only
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2013-2019, The Linux Foundation. All rights reserved.
|
* Copyright (c) 2013-2019, The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
@ -68,6 +69,7 @@ int ipa_rm_peers_list_create(int max_peers,
|
|||||||
|
|
||||||
list_alloc_fail:
|
list_alloc_fail:
|
||||||
kfree(*peers_list);
|
kfree(*peers_list);
|
||||||
|
*peers_list = NULL;
|
||||||
bail:
|
bail:
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -2311,7 +2311,7 @@ static ssize_t ipa_debugfs_enable_disable_drop_stats(struct file *file,
|
|||||||
is_pipe = true;
|
is_pipe = true;
|
||||||
}
|
}
|
||||||
if (dbg_buff[i] == seprator) {
|
if (dbg_buff[i] == seprator) {
|
||||||
if (pipe_num >= 0 && pipe_num < ipa3_ctx->ipa_num_pipes
|
if (pipe_num < ipa3_ctx->ipa_num_pipes
|
||||||
&& ipa3_get_client_by_pipe(pipe_num) <
|
&& ipa3_get_client_by_pipe(pipe_num) <
|
||||||
IPA_CLIENT_MAX) {
|
IPA_CLIENT_MAX) {
|
||||||
IPADBG("pipe number %u\n", pipe_num);
|
IPADBG("pipe number %u\n", pipe_num);
|
||||||
@ -2326,7 +2326,7 @@ static ssize_t ipa_debugfs_enable_disable_drop_stats(struct file *file,
|
|||||||
is_pipe = false;
|
is_pipe = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (is_pipe && pipe_num >= 0 && pipe_num < ipa3_ctx->ipa_num_pipes &&
|
if (is_pipe && pipe_num < ipa3_ctx->ipa_num_pipes &&
|
||||||
ipa3_get_client_by_pipe(pipe_num) < IPA_CLIENT_MAX) {
|
ipa3_get_client_by_pipe(pipe_num) < IPA_CLIENT_MAX) {
|
||||||
IPADBG("pipe number %u\n", pipe_num);
|
IPADBG("pipe number %u\n", pipe_num);
|
||||||
if (enable_pipe)
|
if (enable_pipe)
|
||||||
|
@ -82,19 +82,19 @@ int ipa3_register_intf_ext(const char *name, const struct ipa_tx_intf *tx,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tx && tx->num_props > IPA_NUM_PROPS_MAX) {
|
if (tx && ((tx->num_props > IPA_NUM_PROPS_MAX) || (tx->num_props == 0))) {
|
||||||
IPAERR_RL("invalid tx num_props=%d max=%d\n", tx->num_props,
|
IPAERR_RL("invalid tx num_props=%d max=%d\n", tx->num_props,
|
||||||
IPA_NUM_PROPS_MAX);
|
IPA_NUM_PROPS_MAX);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rx && rx->num_props > IPA_NUM_PROPS_MAX) {
|
if (rx && ((rx->num_props > IPA_NUM_PROPS_MAX) || (rx->num_props == 0))) {
|
||||||
IPAERR_RL("invalid rx num_props=%d max=%d\n", rx->num_props,
|
IPAERR_RL("invalid rx num_props=%d max=%d\n", rx->num_props,
|
||||||
IPA_NUM_PROPS_MAX);
|
IPA_NUM_PROPS_MAX);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ext && ext->num_props > IPA_NUM_PROPS_MAX) {
|
if (ext && ((ext->num_props > IPA_NUM_PROPS_MAX) || (ext->num_props == 0))) {
|
||||||
IPAERR_RL("invalid ext num_props=%d max=%d\n", ext->num_props,
|
IPAERR_RL("invalid ext num_props=%d max=%d\n", ext->num_props,
|
||||||
IPA_NUM_PROPS_MAX);
|
IPA_NUM_PROPS_MAX);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -473,6 +473,12 @@ void ipa3_odl_pipe_cleanup(bool is_ssr)
|
|||||||
IPAERR("adpl pipe not configured\n");
|
IPAERR("adpl pipe not configured\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!ipa3_odl_ctx->odl_state.odl_ep_setup) {
|
||||||
|
IPAERR("adpl pipe setup not done\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (ipa3_odl_ctx->odl_state.odl_open)
|
if (ipa3_odl_ctx->odl_state.odl_open)
|
||||||
ipa_odl_opened = true;
|
ipa_odl_opened = true;
|
||||||
|
|
||||||
|
@ -469,8 +469,8 @@ static int ipa3_qmi_send_req_wait(struct qmi_handle *client_handle,
|
|||||||
|
|
||||||
mutex_lock(&ipa3_qmi_lock);
|
mutex_lock(&ipa3_qmi_lock);
|
||||||
|
|
||||||
if (!client_handle) {
|
if (client_handle != ipa_q6_clnt) {
|
||||||
|
IPADBG("Q6 QMI clinet pointer already freed\n");
|
||||||
mutex_unlock(&ipa3_qmi_lock);
|
mutex_unlock(&ipa3_qmi_lock);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
@ -897,11 +897,7 @@ int ipa3_qmi_add_offload_request_send(
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check if the filter rules from IPACM is valid */
|
if (req->filter_spec_ex2_list_len == 0) {
|
||||||
if (req->filter_spec_ex2_list_len < 0) {
|
|
||||||
IPAWANERR("IPACM pass invalid num of rules\n");
|
|
||||||
return -EINVAL;
|
|
||||||
} else if (req->filter_spec_ex2_list_len == 0) {
|
|
||||||
IPAWANDBG("IPACM pass zero rules to Q6\n");
|
IPAWANDBG("IPACM pass zero rules to Q6\n");
|
||||||
} else {
|
} else {
|
||||||
IPAWANDBG("IPACM pass %u rules to Q6\n",
|
IPAWANDBG("IPACM pass %u rules to Q6\n",
|
||||||
@ -1861,6 +1857,7 @@ void ipa3_qmi_service_exit(void)
|
|||||||
|
|
||||||
workqueues_stopped = true;
|
workqueues_stopped = true;
|
||||||
|
|
||||||
|
IPADBG("Entry\n");
|
||||||
/* qmi-service */
|
/* qmi-service */
|
||||||
if (ipa3_svc_handle != NULL) {
|
if (ipa3_svc_handle != NULL) {
|
||||||
qmi_handle_release(ipa3_svc_handle);
|
qmi_handle_release(ipa3_svc_handle);
|
||||||
@ -1893,6 +1890,7 @@ void ipa3_qmi_service_exit(void)
|
|||||||
ipa3_qmi_indication_fin = false;
|
ipa3_qmi_indication_fin = false;
|
||||||
ipa3_modem_init_cmplt = false;
|
ipa3_modem_init_cmplt = false;
|
||||||
send_qmi_init_q6 = true;
|
send_qmi_init_q6 = true;
|
||||||
|
IPADBG("Exit\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void ipa3_qmi_stop_workqueues(void)
|
void ipa3_qmi_stop_workqueues(void)
|
||||||
|
@ -1083,7 +1083,7 @@ static int __ipa_finish_rt_rule_add(struct ipa3_rt_entry *entry, u32 *rule_hdl,
|
|||||||
if (tbl->rule_cnt < IPA_RULE_CNT_MAX)
|
if (tbl->rule_cnt < IPA_RULE_CNT_MAX)
|
||||||
tbl->rule_cnt++;
|
tbl->rule_cnt++;
|
||||||
else
|
else
|
||||||
return -EINVAL;
|
goto table_insert_failed;
|
||||||
if (entry->hdr)
|
if (entry->hdr)
|
||||||
entry->hdr->ref_cnt++;
|
entry->hdr->ref_cnt++;
|
||||||
else if (entry->proc_ctx)
|
else if (entry->proc_ctx)
|
||||||
@ -1107,6 +1107,7 @@ ipa_insert_failed:
|
|||||||
else if (entry->proc_ctx)
|
else if (entry->proc_ctx)
|
||||||
entry->proc_ctx->ref_cnt--;
|
entry->proc_ctx->ref_cnt--;
|
||||||
idr_remove(tbl->rule_ids, entry->rule_id);
|
idr_remove(tbl->rule_ids, entry->rule_id);
|
||||||
|
table_insert_failed:
|
||||||
list_del(&entry->link);
|
list_del(&entry->link);
|
||||||
kmem_cache_free(ipa3_ctx->rt_rule_cache, entry);
|
kmem_cache_free(ipa3_ctx->rt_rule_cache, entry);
|
||||||
return -EPERM;
|
return -EPERM;
|
||||||
|
@ -3532,12 +3532,12 @@ int ipahal_fltrt_init(enum ipa_hw_type ipa_hw_type)
|
|||||||
if (!IPA_IS_RULE_EQ_VALID(i))
|
if (!IPA_IS_RULE_EQ_VALID(i))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (eq_bits & IPA_GET_RULE_EQ_BIT_PTRN(eq_bitfield[i])) {
|
if (eq_bits & IPA_GET_RULE_EQ_BIT_PTRN(i)) {
|
||||||
IPAHAL_ERR("more than eq with same bit. eq=%d\n", i);
|
IPAHAL_ERR("more than eq with same bit. eq=%d\n", i);
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
eq_bits |= IPA_GET_RULE_EQ_BIT_PTRN(eq_bitfield[i]);
|
eq_bits |= IPA_GET_RULE_EQ_BIT_PTRN(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
mem = &ipahal_ctx->empty_fltrt_tbl;
|
mem = &ipahal_ctx->empty_fltrt_tbl;
|
||||||
|
@ -3410,8 +3410,7 @@ int rmnet_ipa3_set_tether_client_pipe(
|
|||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
/* error checking if dl_dst_pipe_len valid or not*/
|
/* error checking if dl_dst_pipe_len valid or not*/
|
||||||
if (data->dl_dst_pipe_len > QMI_IPA_MAX_PIPES_V01 ||
|
if (data->dl_dst_pipe_len > QMI_IPA_MAX_PIPES_V01) {
|
||||||
data->dl_dst_pipe_len < 0) {
|
|
||||||
IPAWANERR("DL dst pipes %d exceeding max %d\n",
|
IPAWANERR("DL dst pipes %d exceeding max %d\n",
|
||||||
data->dl_dst_pipe_len,
|
data->dl_dst_pipe_len,
|
||||||
QMI_IPA_MAX_PIPES_V01);
|
QMI_IPA_MAX_PIPES_V01);
|
||||||
|
Loading…
Reference in New Issue
Block a user