aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/generic/pending-3.18/080-02-fib_trie-Update-usage-stats-to-be-percpu-instead-of-.patch
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2019-03-25 15:29:06 +0100
committerHauke Mehrtens <hauke@hauke-m.de>2019-05-03 22:41:38 +0200
commit1325e74e0c2f9ebdafe05b1492cec77a60059920 (patch)
treeaf21c4890a4ae5c08dc08ee7cabdc14a651f33ad /target/linux/generic/pending-3.18/080-02-fib_trie-Update-usage-stats-to-be-percpu-instead-of-.patch
parent675832de79ec14ddc1183a66d1084aff7a856289 (diff)
downloadupstream-1325e74e0c2f9ebdafe05b1492cec77a60059920.tar.gz
upstream-1325e74e0c2f9ebdafe05b1492cec77a60059920.tar.bz2
upstream-1325e74e0c2f9ebdafe05b1492cec77a60059920.zip
kernel: Remove support for kernel 3.18
No target is using kernel 3.18 anymore, remove all the generic support for kernel 3.18. The removed packages are depending on kernel 3.18 only and are not used on any recent kernel. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Diffstat (limited to 'target/linux/generic/pending-3.18/080-02-fib_trie-Update-usage-stats-to-be-percpu-instead-of-.patch')
-rw-r--r--target/linux/generic/pending-3.18/080-02-fib_trie-Update-usage-stats-to-be-percpu-instead-of-.patch200
1 files changed, 0 insertions, 200 deletions
diff --git a/target/linux/generic/pending-3.18/080-02-fib_trie-Update-usage-stats-to-be-percpu-instead-of-.patch b/target/linux/generic/pending-3.18/080-02-fib_trie-Update-usage-stats-to-be-percpu-instead-of-.patch
deleted file mode 100644
index 2e6deb5bbc..0000000000
--- a/target/linux/generic/pending-3.18/080-02-fib_trie-Update-usage-stats-to-be-percpu-instead-of-.patch
+++ /dev/null
@@ -1,200 +0,0 @@
-From: Alexander Duyck <alexander.h.duyck@redhat.com>
-Date: Wed, 31 Dec 2014 10:55:29 -0800
-Subject: [PATCH] fib_trie: Update usage stats to be percpu instead of
- global variables
-
-The trie usage stats were currently being shared by all threads that were
-calling fib_table_lookup. As a result when multiple threads were
-performing lookups simultaneously the trie would begin to cache bounce
-between those threads.
-
-In order to prevent this I have updated the usage stats to use a set of
-percpu variables. By doing this we should be able to avoid the cache
-bouncing and still make use of these stats.
-
-Signed-off-by: Alexander Duyck <alexander.h.duyck@redhat.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
-
---- a/net/ipv4/fib_frontend.c
-+++ b/net/ipv4/fib_frontend.c
-@@ -67,7 +67,7 @@ static int __net_init fib4_rules_init(st
- return 0;
-
- fail:
-- kfree(local_table);
-+ fib_free_table(local_table);
- return -ENOMEM;
- }
- #else
---- a/net/ipv4/fib_trie.c
-+++ b/net/ipv4/fib_trie.c
-@@ -153,7 +153,7 @@ struct trie_stat {
- struct trie {
- struct rt_trie_node __rcu *trie;
- #ifdef CONFIG_IP_FIB_TRIE_STATS
-- struct trie_use_stats stats;
-+ struct trie_use_stats __percpu *stats;
- #endif
- };
-
-@@ -631,7 +631,7 @@ static struct rt_trie_node *resize(struc
- if (IS_ERR(tn)) {
- tn = old_tn;
- #ifdef CONFIG_IP_FIB_TRIE_STATS
-- t->stats.resize_node_skipped++;
-+ this_cpu_inc(t->stats->resize_node_skipped);
- #endif
- break;
- }
-@@ -658,7 +658,7 @@ static struct rt_trie_node *resize(struc
- if (IS_ERR(tn)) {
- tn = old_tn;
- #ifdef CONFIG_IP_FIB_TRIE_STATS
-- t->stats.resize_node_skipped++;
-+ this_cpu_inc(t->stats->resize_node_skipped);
- #endif
- break;
- }
-@@ -1357,7 +1357,7 @@ static int check_leaf(struct fib_table *
- err = fib_props[fa->fa_type].error;
- if (err) {
- #ifdef CONFIG_IP_FIB_TRIE_STATS
-- t->stats.semantic_match_passed++;
-+ this_cpu_inc(t->stats->semantic_match_passed);
- #endif
- return err;
- }
-@@ -1372,7 +1372,7 @@ static int check_leaf(struct fib_table *
- continue;
-
- #ifdef CONFIG_IP_FIB_TRIE_STATS
-- t->stats.semantic_match_passed++;
-+ this_cpu_inc(t->stats->semantic_match_passed);
- #endif
- res->prefixlen = li->plen;
- res->nh_sel = nhsel;
-@@ -1388,7 +1388,7 @@ static int check_leaf(struct fib_table *
- }
-
- #ifdef CONFIG_IP_FIB_TRIE_STATS
-- t->stats.semantic_match_miss++;
-+ this_cpu_inc(t->stats->semantic_match_miss);
- #endif
- }
-
-@@ -1399,6 +1399,9 @@ int fib_table_lookup(struct fib_table *t
- struct fib_result *res, int fib_flags)
- {
- struct trie *t = (struct trie *) tb->tb_data;
-+#ifdef CONFIG_IP_FIB_TRIE_STATS
-+ struct trie_use_stats __percpu *stats = t->stats;
-+#endif
- int ret;
- struct rt_trie_node *n;
- struct tnode *pn;
-@@ -1417,7 +1420,7 @@ int fib_table_lookup(struct fib_table *t
- goto failed;
-
- #ifdef CONFIG_IP_FIB_TRIE_STATS
-- t->stats.gets++;
-+ this_cpu_inc(stats->gets);
- #endif
-
- /* Just a leaf? */
-@@ -1441,7 +1444,7 @@ int fib_table_lookup(struct fib_table *t
-
- if (n == NULL) {
- #ifdef CONFIG_IP_FIB_TRIE_STATS
-- t->stats.null_node_hit++;
-+ this_cpu_inc(stats->null_node_hit);
- #endif
- goto backtrace;
- }
-@@ -1576,7 +1579,7 @@ backtrace:
- chopped_off = 0;
-
- #ifdef CONFIG_IP_FIB_TRIE_STATS
-- t->stats.backtrack++;
-+ this_cpu_inc(stats->backtrack);
- #endif
- goto backtrace;
- }
-@@ -1830,6 +1833,11 @@ int fib_table_flush(struct fib_table *tb
-
- void fib_free_table(struct fib_table *tb)
- {
-+#ifdef CONFIG_IP_FIB_TRIE_STATS
-+ struct trie *t = (struct trie *)tb->tb_data;
-+
-+ free_percpu(t->stats);
-+#endif /* CONFIG_IP_FIB_TRIE_STATS */
- kfree(tb);
- }
-
-@@ -1973,7 +1981,14 @@ struct fib_table *fib_trie_table(u32 id)
- tb->tb_num_default = 0;
-
- t = (struct trie *) tb->tb_data;
-- memset(t, 0, sizeof(*t));
-+ RCU_INIT_POINTER(t->trie, NULL);
-+#ifdef CONFIG_IP_FIB_TRIE_STATS
-+ t->stats = alloc_percpu(struct trie_use_stats);
-+ if (!t->stats) {
-+ kfree(tb);
-+ tb = NULL;
-+ }
-+#endif
-
- return tb;
- }
-@@ -2139,18 +2154,31 @@ static void trie_show_stats(struct seq_f
-
- #ifdef CONFIG_IP_FIB_TRIE_STATS
- static void trie_show_usage(struct seq_file *seq,
-- const struct trie_use_stats *stats)
-+ const struct trie_use_stats __percpu *stats)
- {
-+ struct trie_use_stats s = { 0 };
-+ int cpu;
-+
-+ /* loop through all of the CPUs and gather up the stats */
-+ for_each_possible_cpu(cpu) {
-+ const struct trie_use_stats *pcpu = per_cpu_ptr(stats, cpu);
-+
-+ s.gets += pcpu->gets;
-+ s.backtrack += pcpu->backtrack;
-+ s.semantic_match_passed += pcpu->semantic_match_passed;
-+ s.semantic_match_miss += pcpu->semantic_match_miss;
-+ s.null_node_hit += pcpu->null_node_hit;
-+ s.resize_node_skipped += pcpu->resize_node_skipped;
-+ }
-+
- seq_printf(seq, "\nCounters:\n---------\n");
-- seq_printf(seq, "gets = %u\n", stats->gets);
-- seq_printf(seq, "backtracks = %u\n", stats->backtrack);
-+ seq_printf(seq, "gets = %u\n", s.gets);
-+ seq_printf(seq, "backtracks = %u\n", s.backtrack);
- seq_printf(seq, "semantic match passed = %u\n",
-- stats->semantic_match_passed);
-- seq_printf(seq, "semantic match miss = %u\n",
-- stats->semantic_match_miss);
-- seq_printf(seq, "null node hit= %u\n", stats->null_node_hit);
-- seq_printf(seq, "skipped node resize = %u\n\n",
-- stats->resize_node_skipped);
-+ s.semantic_match_passed);
-+ seq_printf(seq, "semantic match miss = %u\n", s.semantic_match_miss);
-+ seq_printf(seq, "null node hit= %u\n", s.null_node_hit);
-+ seq_printf(seq, "skipped node resize = %u\n\n", s.resize_node_skipped);
- }
- #endif /* CONFIG_IP_FIB_TRIE_STATS */
-
-@@ -2191,7 +2219,7 @@ static int fib_triestat_seq_show(struct
- trie_collect_stats(t, &stat);
- trie_show_stats(seq, &stat);
- #ifdef CONFIG_IP_FIB_TRIE_STATS
-- trie_show_usage(seq, &t->stats);
-+ trie_show_usage(seq, t->stats);
- #endif
- }
- }