summaryrefslogtreecommitdiff
path: root/drivers/rmnet/shs/rmnet_shs_wq.c
diff options
context:
space:
mode:
authorSubash Abhinov Kasiviswanathan <subashab@codeaurora.org>2018-09-24 19:41:34 -0600
committerGerrit - the friendly Code Review server <code-review@localhost>2018-09-25 10:52:57 -0700
commit6791a971dc9a5133a1f1d573bfcd82a32d623836 (patch)
tree9e4da34e10a082e2557ed8b65076aefd97a99c41 /drivers/rmnet/shs/rmnet_shs_wq.c
parent40c660009b1230483fa03fa6600996829efe2e30 (diff)
downloaddata-kernel-6791a971dc9a5133a1f1d573bfcd82a32d623836.tar.gz
rmnet_shs: RPS mask overridden issue
Fixes issue when user manually reduces configured cores for network stack processing. CRs-Fixed: 2321632 Acked-by: Mahadevan Appadurai <mappadur@qti.qualcomm.com> Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
Diffstat (limited to 'drivers/rmnet/shs/rmnet_shs_wq.c')
-rw-r--r--drivers/rmnet/shs/rmnet_shs_wq.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/rmnet/shs/rmnet_shs_wq.c b/drivers/rmnet/shs/rmnet_shs_wq.c
index 88b6a07..a008108 100644
--- a/drivers/rmnet/shs/rmnet_shs_wq.c
+++ b/drivers/rmnet/shs/rmnet_shs_wq.c
@@ -962,19 +962,21 @@ void rmnet_shs_wq_refresh_new_flow_list_per_ep(struct rmnet_shs_wq_ep_s *ep)
rps_msk = ep->rps_config_msk;
lo_msk = ep->default_core_msk;
hi_msk = ep->pri_core_msk;
-
+ memset(ep->new_lo_core, -1, sizeof(*ep->new_lo_core) * MAX_CPUS);
+ memset(ep->new_hi_core, -1, sizeof(*ep->new_hi_core) * MAX_CPUS);
do {
lo_core = rmnet_shs_wq_get_least_utilized_core(lo_msk);
if (lo_core >= 0) {
ep->new_lo_core[lo_core_idx] = lo_core;
lo_msk = lo_msk & ~(1 << lo_core);
lo_core_idx++;
- } else
+ } else {
break;
+ }
} while (lo_msk != 0);
- trace_rmnet_shs_wq_low(RMNET_SHS_WQ_CPU_STATS,
+ trace_rmnet_shs_wq_low(RMNET_SHS_WQ_CPU_STATS,
RMNET_SHS_WQ_CPU_STATS_NEW_FLOW_LIST_LO,
ep->new_lo_core[0], ep->new_lo_core[1],
ep->new_lo_core[2], ep->new_lo_max,
@@ -1061,9 +1063,10 @@ int rmnet_shs_wq_get_lpwr_cpu_new_flow(struct net_device *dev)
}
lo_idx++;
}
+
/* Increment CPU assignment idx to be ready for next flow assignment*/
- if (cpu_assigned >= 0)
- ep->new_lo_idx = ((lo_idx + 1) % lo_max);
+ if ((cpu_assigned >= 0)|| ((ep->new_lo_idx + 1) >= ep->new_lo_max))
+ ep->new_lo_idx = ((ep->new_lo_idx + 1) % ep->new_lo_max);
return cpu_assigned;
}
@@ -1166,7 +1169,7 @@ void rmnet_shs_wq_update_ep_rps_msk(struct rmnet_shs_wq_ep_s *ep)
}
map = rcu_dereference(ep->ep->egress_dev->_rx->rps_map);
-
+ ep->rps_config_msk = 0;
if (map != NULL) {
for (len = 0; len < map->len; len++)
ep->rps_config_msk |= (1 << map->cpus[len]);