summaryrefslogtreecommitdiff
path: root/drivers/rmnet
diff options
context:
space:
mode:
authorqctecmdr <qctecmdr@localhost>2019-10-01 17:15:15 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2019-10-01 17:15:14 -0700
commit8fe6c879a80decde1253d48411f7b8da57e202e1 (patch)
tree444c999ef8236e7993acb9a7a153c9c37bae09d9 /drivers/rmnet
parentc614b36db9e0ad44bee743cd73d5e88f2a983243 (diff)
parent5a4d2fe1d54d704d38da0257a8e6c7621e860638 (diff)
downloaddata-kernel-8fe6c879a80decde1253d48411f7b8da57e202e1.tar.gz
Merge "drivers: rmnet_perf: Fix SSR cleanup of structs"
Diffstat (limited to 'drivers/rmnet')
-rw-r--r--drivers/rmnet/perf/rmnet_perf_config.c4
-rw-r--r--drivers/rmnet/perf/rmnet_perf_opt.c12
-rw-r--r--drivers/rmnet/perf/rmnet_perf_opt.h1
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_ */