diff options
author | Subash Abhinov Kasiviswanathan <subashab@codeaurora.org> | 2020-05-30 11:07:06 -0700 |
---|---|---|
committer | Subash Abhinov Kasiviswanathan <subashab@codeaurora.org> | 2020-06-01 15:12:11 -0700 |
commit | c2621585f4cd96e5965099eb975c156328775481 (patch) | |
tree | 415afdafaaeac654214f5223bbfbca4e27b1b533 | |
parent | 7c43f1d0486aeaa238eed84527eaf2c979b56ffb (diff) | |
download | data-kernel-c2621585f4cd96e5965099eb975c156328775481.tar.gz |
drivers: rmnet_shs: Reset hstat node correctly
Previously hstat node was not being cleared correctly.
This change correctly resets segmentation field to prevent
the stale field from being used on a recycle.
CRs-Fixed: 2699690
Change-Id: Ie9d6b5f64d2e94d8a8c3fb99fdcee1b13ae2ec6d
Acked-by: Raul Martinez <mraul@qti.qualcomm.com>
Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org>
-rw-r--r-- | drivers/rmnet/shs/rmnet_shs_config.h | 1 | ||||
-rwxr-xr-x | drivers/rmnet/shs/rmnet_shs_main.c | 2 | ||||
-rw-r--r-- | drivers/rmnet/shs/rmnet_shs_wq.c | 4 |
3 files changed, 6 insertions, 1 deletions
diff --git a/drivers/rmnet/shs/rmnet_shs_config.h b/drivers/rmnet/shs/rmnet_shs_config.h index 10b8f58..8d318c1 100644 --- a/drivers/rmnet/shs/rmnet_shs_config.h +++ b/drivers/rmnet/shs/rmnet_shs_config.h @@ -48,6 +48,7 @@ enum rmnet_shs_crit_err_e { RMNET_SHS_WQ_NL_SOCKET_ERR, RMNET_SHS_CPU_FLOWS_BNDS_ERR, RMNET_SHS_OUT_OF_MEM_ERR, + RMNET_SHS_UDP_SEGMENT, RMNET_SHS_CRIT_ERR_MAX }; diff --git a/drivers/rmnet/shs/rmnet_shs_main.c b/drivers/rmnet/shs/rmnet_shs_main.c index 796858e..36ba75d 100755 --- a/drivers/rmnet/shs/rmnet_shs_main.c +++ b/drivers/rmnet/shs/rmnet_shs_main.c @@ -1012,6 +1012,8 @@ void rmnet_shs_flush_node(struct rmnet_shs_skbn_s *node, u8 ctext) skb_bytes_delivered += skb->len; if (segs_per_skb > 0) { + if (node->skb_tport_proto == IPPROTO_UDP) + rmnet_shs_crit_err[RMNET_SHS_UDP_SEGMENT]++; rmnet_shs_deliver_skb_segmented(skb, ctext, segs_per_skb); } else { diff --git a/drivers/rmnet/shs/rmnet_shs_wq.c b/drivers/rmnet/shs/rmnet_shs_wq.c index 6b2a31e..3445519 100644 --- a/drivers/rmnet/shs/rmnet_shs_wq.c +++ b/drivers/rmnet/shs/rmnet_shs_wq.c @@ -296,6 +296,7 @@ void rmnet_shs_wq_hstat_reset_node(struct rmnet_shs_wq_hstat_s *hnode) hnode->hash = 0; hnode->suggested_cpu = 0; hnode->current_cpu = 0; + hnode->segs_per_skb = 0; hnode->skb_tport_proto = 0; hnode->stat_idx = -1; INIT_LIST_HEAD(&hnode->cpu_node_id); @@ -409,7 +410,8 @@ void rmnet_shs_wq_create_new_flow(struct rmnet_shs_skbn_s *node_p) node_p->hstats->skb_tport_proto = node_p->skb_tport_proto; node_p->hstats->current_cpu = node_p->map_cpu; node_p->hstats->suggested_cpu = node_p->map_cpu; - + /* Set egmentation off by default */ + node_p->hstats->segs_per_skb = 0; /* Start TCP flows with segmentation if userspace connected */ if (rmnet_shs_userspace_connected && node_p->hstats->skb_tport_proto == IPPROTO_TCP) |