diff options
author | qctecmdr <qctecmdr@localhost> | 2019-10-01 17:15:15 -0700 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2019-10-01 17:15:14 -0700 |
commit | 8fe6c879a80decde1253d48411f7b8da57e202e1 (patch) | |
tree | 444c999ef8236e7993acb9a7a153c9c37bae09d9 /drivers | |
parent | c614b36db9e0ad44bee743cd73d5e88f2a983243 (diff) | |
parent | 5a4d2fe1d54d704d38da0257a8e6c7621e860638 (diff) | |
download | data-kernel-8fe6c879a80decde1253d48411f7b8da57e202e1.tar.gz |
Merge "drivers: rmnet_perf: Fix SSR cleanup of structs"
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/rmnet/perf/rmnet_perf_config.c | 4 | ||||
-rw-r--r-- | drivers/rmnet/perf/rmnet_perf_opt.c | 12 | ||||
-rw-r--r-- | drivers/rmnet/perf/rmnet_perf_opt.h | 1 |
3 files changed, 17 insertions, 0 deletions
diff --git a/drivers/rmnet/perf/rmnet_perf_config.c b/drivers/rmnet/perf/rmnet_perf_config.c index 2489d6d..0ebc6f4 100644 --- a/drivers/rmnet/perf/rmnet_perf_config.c +++ b/drivers/rmnet/perf/rmnet_perf_config.c @@ -125,6 +125,9 @@ rmnet_perf_config_free_resources(struct rmnet_perf *perf) */ rmnet_perf_core_free_held_skbs(); + /* Clean up any remaining nodes in the flow table before freeing */ + rmnet_perf_free_hash_table(); + /* Since we allocated in one chunk, we will also free in one chunk */ kfree(perf); @@ -427,6 +430,7 @@ exit: static struct notifier_block rmnet_perf_dev_notifier __read_mostly = { .notifier_call = rmnet_perf_config_notify_cb, + .priority = 1, }; int __init rmnet_perf_init(void) diff --git a/drivers/rmnet/perf/rmnet_perf_opt.c b/drivers/rmnet/perf/rmnet_perf_opt.c index 1a695d8..b411483 100644 --- a/drivers/rmnet/perf/rmnet_perf_opt.c +++ b/drivers/rmnet/perf/rmnet_perf_opt.c @@ -709,6 +709,18 @@ void rmnet_perf_opt_insert_pkt_in_flow( if (pkt_info->trans_proto == IPPROTO_TCP) flow_node->next_seq += payload_len; } +void +rmnet_perf_free_hash_table() +{ + int i; + struct rmnet_perf_opt_flow_node *flow_node; + struct hlist_node *tmp; + + hash_for_each_safe(rmnet_perf_opt_fht, i, tmp, flow_node, list) { + hash_del(&flow_node->list); + } + +} /* rmnet_perf_opt_ingress() - Core business logic of optimization framework * @pkt_info: characteristics of the current packet diff --git a/drivers/rmnet/perf/rmnet_perf_opt.h b/drivers/rmnet/perf/rmnet_perf_opt.h index b90a7a9..b98261d 100644 --- a/drivers/rmnet/perf/rmnet_perf_opt.h +++ b/drivers/rmnet/perf/rmnet_perf_opt.h @@ -107,5 +107,6 @@ void rmnet_perf_opt_insert_pkt_in_flow( struct rmnet_perf_opt_flow_node *flow_node, struct rmnet_perf_pkt_info *pkt_info); bool rmnet_perf_opt_ingress(struct rmnet_perf_pkt_info *pkt_info); +void rmnet_perf_free_hash_table(void); #endif /* _RMNET_PERF_OPT_H_ */ |