msm: ipa3: adding check for holb stats

Adding null checks while getting the holb stats

Change-Id: Iba83cd86522679137f66fa1e7844884955fecf4d
Signed-off-by: Veerendra Kumar Kamsali <quic_veekum@quicinc.com>
This commit is contained in:
Veerendra Kumar Kamsali
2022-10-26 11:14:04 +05:30
کامیت شده توسط Gerrit - the friendly Code Review server
والد 757a544d71
کامیت e739dfa5ab

مشاهده پرونده

@@ -229,47 +229,51 @@ static int ipa_get_generic_stats(unsigned long arg)
return res;
}
/* HOLB Discard stats */
holb_disc_stats_ptr = &generic_stats->holb_stats.holb_disc_stats[0];
for (i = 0; i < IPA_CLIENT_MAX; i++) {
int ep_idx = ipa_get_ep_mapping(i);
if(ipa_lnx_agent_ctx.alloc_info.num_holb_drop_stats_clients != 0 ) {
/* HOLB Discard stats */
holb_disc_stats_ptr = &generic_stats->holb_stats.holb_disc_stats[0];
for (i = 0; i < IPA_CLIENT_MAX; i++) {
int ep_idx = ipa_get_ep_mapping(i);
if ((ep_idx == -1) || (!IPA_CLIENT_IS_CONS(i)) ||
(IPA_CLIENT_IS_TEST(i)))
continue;
if ((ep_idx == -1) || (!IPA_CLIENT_IS_CONS(i)) ||
(IPA_CLIENT_IS_TEST(i)))
continue;
reg_idx = ipahal_get_ep_reg_idx(ep_idx);
if (!(ipa3_ctx->hw_stats &&
(ipa3_ctx->hw_stats->drop.init.enabled_bitmask[reg_idx] &
ipahal_get_ep_bit(ep_idx))))
continue;
reg_idx = ipahal_get_ep_reg_idx(ep_idx);
if (!(ipa3_ctx->hw_stats &&
(ipa3_ctx->hw_stats->drop.init.enabled_bitmask[reg_idx] &
ipahal_get_ep_bit(ep_idx))))
continue;
holb_disc_stats_ptr->client_type = i;
holb_disc_stats_ptr->num_drp_cnt = out->client[i].drop_packet_cnt;
holb_disc_stats_ptr->num_drp_bytes = out->client[i].drop_byte_cnt;
holb_disc_stats_ptr = (struct holb_discard_stats *)((
uint64_t)holb_disc_stats_ptr + sizeof(struct holb_discard_stats));
holb_disc_stats_ptr->client_type = i;
holb_disc_stats_ptr->num_drp_cnt = out->client[i].drop_packet_cnt;
holb_disc_stats_ptr->num_drp_bytes = out->client[i].drop_byte_cnt;
holb_disc_stats_ptr = (struct holb_discard_stats *)((
uint64_t)holb_disc_stats_ptr + sizeof(struct holb_discard_stats));
}
}
/* HOLB Monitor stats */
holb_mon_stats_ptr = (struct holb_monitor_stats *)(
(uint64_t)&generic_stats->holb_stats.holb_disc_stats[0] +
(ipa_lnx_agent_ctx.alloc_info.num_holb_drop_stats_clients *
sizeof(struct holb_discard_stats)));
for (i = 0; i < generic_stats->holb_stats.num_holb_mon_clients; i++) {
holb_client = &(ipa3_ctx->uc_ctx.holb_monitor.client[i]);
/* Get the client type from gsi_hdl */
for (j = 0; j < IPA5_MAX_NUM_PIPES; j++) {
if (ipa3_ctx->ep[j].gsi_chan_hdl == holb_client->gsi_chan_hdl) {
holb_mon_stats_ptr->client_type = ipa3_ctx->ep[j].client;
break;
if(ipa_lnx_agent_ctx.alloc_info.num_holb_mon_stats_clients != 0 ) {
/* HOLB Monitor stats */
holb_mon_stats_ptr = (struct holb_monitor_stats *)(
(uint64_t)&generic_stats->holb_stats.holb_disc_stats[0] +
(ipa_lnx_agent_ctx.alloc_info.num_holb_drop_stats_clients *
sizeof(struct holb_discard_stats)));
for (i = 0; i < generic_stats->holb_stats.num_holb_mon_clients; i++) {
holb_client = &(ipa3_ctx->uc_ctx.holb_monitor.client[i]);
/* Get the client type from gsi_hdl */
for (j = 0; j < IPA5_MAX_NUM_PIPES; j++) {
if (ipa3_ctx->ep[j].gsi_chan_hdl == holb_client->gsi_chan_hdl) {
holb_mon_stats_ptr->client_type = ipa3_ctx->ep[j].client;
break;
}
}
holb_mon_stats_ptr->curr_index = holb_client->current_idx;
holb_mon_stats_ptr->num_en_cnt = holb_client->enable_cnt;
holb_mon_stats_ptr->num_dis_cnt = holb_client->disable_cnt;
holb_mon_stats_ptr = (struct holb_monitor_stats *)((
uint64_t)holb_mon_stats_ptr + sizeof(struct holb_monitor_stats));
}
holb_mon_stats_ptr->curr_index = holb_client->current_idx;
holb_mon_stats_ptr->num_en_cnt = holb_client->enable_cnt;
holb_mon_stats_ptr->num_dis_cnt = holb_client->disable_cnt;
holb_mon_stats_ptr = (struct holb_monitor_stats *)((
uint64_t)holb_mon_stats_ptr + sizeof(struct holb_monitor_stats));
}
if(copy_to_user((void __user *)arg,