diff options
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/dev_addr_lists.c | 12 | ||||
-rw-r--r-- | net/core/drop_monitor.c | 12 | ||||
-rw-r--r-- | net/core/dst.c | 1 | ||||
-rw-r--r-- | net/core/gen_estimator.c | 9 | ||||
-rw-r--r-- | net/core/net-sysfs.c | 34 | ||||
-rw-r--r-- | net/core/net_namespace.c | 10 | ||||
-rw-r--r-- | net/core/pktgen.c | 1 | ||||
-rw-r--r-- | net/core/skbuff.c | 1 |
8 files changed, 15 insertions, 65 deletions
diff --git a/net/core/dev_addr_lists.c b/net/core/dev_addr_lists.c index 7b39f3ed2fda..e2e66939ed00 100644 --- a/net/core/dev_addr_lists.c +++ b/net/core/dev_addr_lists.c | |||
@@ -68,14 +68,6 @@ static int __hw_addr_add(struct netdev_hw_addr_list *list, unsigned char *addr, | |||
68 | return __hw_addr_add_ex(list, addr, addr_len, addr_type, false); | 68 | return __hw_addr_add_ex(list, addr, addr_len, addr_type, false); |
69 | } | 69 | } |
70 | 70 | ||
71 | static void ha_rcu_free(struct rcu_head *head) | ||
72 | { | ||
73 | struct netdev_hw_addr *ha; | ||
74 | |||
75 | ha = container_of(head, struct netdev_hw_addr, rcu_head); | ||
76 | kfree(ha); | ||
77 | } | ||
78 | |||
79 | static int __hw_addr_del_ex(struct netdev_hw_addr_list *list, | 71 | static int __hw_addr_del_ex(struct netdev_hw_addr_list *list, |
80 | unsigned char *addr, int addr_len, | 72 | unsigned char *addr, int addr_len, |
81 | unsigned char addr_type, bool global) | 73 | unsigned char addr_type, bool global) |
@@ -94,7 +86,7 @@ static int __hw_addr_del_ex(struct netdev_hw_addr_list *list, | |||
94 | if (--ha->refcount) | 86 | if (--ha->refcount) |
95 | return 0; | 87 | return 0; |
96 | list_del_rcu(&ha->list); | 88 | list_del_rcu(&ha->list); |
97 | call_rcu(&ha->rcu_head, ha_rcu_free); | 89 | kfree_rcu(ha, rcu_head); |
98 | list->count--; | 90 | list->count--; |
99 | return 0; | 91 | return 0; |
100 | } | 92 | } |
@@ -197,7 +189,7 @@ void __hw_addr_flush(struct netdev_hw_addr_list *list) | |||
197 | 189 | ||
198 | list_for_each_entry_safe(ha, tmp, &list->list, list) { | 190 | list_for_each_entry_safe(ha, tmp, &list->list, list) { |
199 | list_del_rcu(&ha->list); | 191 | list_del_rcu(&ha->list); |
200 | call_rcu(&ha->rcu_head, ha_rcu_free); | 192 | kfree_rcu(ha, rcu_head); |
201 | } | 193 | } |
202 | list->count = 0; | 194 | list->count = 0; |
203 | } | 195 | } |
diff --git a/net/core/drop_monitor.c b/net/core/drop_monitor.c index 706502ff64aa..7f36b38e060f 100644 --- a/net/core/drop_monitor.c +++ b/net/core/drop_monitor.c | |||
@@ -207,14 +207,6 @@ static void trace_napi_poll_hit(void *ignore, struct napi_struct *napi) | |||
207 | rcu_read_unlock(); | 207 | rcu_read_unlock(); |
208 | } | 208 | } |
209 | 209 | ||
210 | |||
211 | static void free_dm_hw_stat(struct rcu_head *head) | ||
212 | { | ||
213 | struct dm_hw_stat_delta *n; | ||
214 | n = container_of(head, struct dm_hw_stat_delta, rcu); | ||
215 | kfree(n); | ||
216 | } | ||
217 | |||
218 | static int set_all_monitor_traces(int state) | 210 | static int set_all_monitor_traces(int state) |
219 | { | 211 | { |
220 | int rc = 0; | 212 | int rc = 0; |
@@ -245,7 +237,7 @@ static int set_all_monitor_traces(int state) | |||
245 | list_for_each_entry_safe(new_stat, temp, &hw_stats_list, list) { | 237 | list_for_each_entry_safe(new_stat, temp, &hw_stats_list, list) { |
246 | if (new_stat->dev == NULL) { | 238 | if (new_stat->dev == NULL) { |
247 | list_del_rcu(&new_stat->list); | 239 | list_del_rcu(&new_stat->list); |
248 | call_rcu(&new_stat->rcu, free_dm_hw_stat); | 240 | kfree_rcu(new_stat, rcu); |
249 | } | 241 | } |
250 | } | 242 | } |
251 | break; | 243 | break; |
@@ -314,7 +306,7 @@ static int dropmon_net_event(struct notifier_block *ev_block, | |||
314 | new_stat->dev = NULL; | 306 | new_stat->dev = NULL; |
315 | if (trace_state == TRACE_OFF) { | 307 | if (trace_state == TRACE_OFF) { |
316 | list_del_rcu(&new_stat->list); | 308 | list_del_rcu(&new_stat->list); |
317 | call_rcu(&new_stat->rcu, free_dm_hw_stat); | 309 | kfree_rcu(new_stat, rcu); |
318 | break; | 310 | break; |
319 | } | 311 | } |
320 | } | 312 | } |
diff --git a/net/core/dst.c b/net/core/dst.c index da47a299618a..81a4fa1c95ed 100644 --- a/net/core/dst.c +++ b/net/core/dst.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/types.h> | 19 | #include <linux/types.h> |
20 | #include <net/net_namespace.h> | 20 | #include <net/net_namespace.h> |
21 | #include <linux/sched.h> | 21 | #include <linux/sched.h> |
22 | #include <linux/prefetch.h> | ||
22 | 23 | ||
23 | #include <net/dst.h> | 24 | #include <net/dst.h> |
24 | 25 | ||
diff --git a/net/core/gen_estimator.c b/net/core/gen_estimator.c index 7c2373321b74..43b03dd71e85 100644 --- a/net/core/gen_estimator.c +++ b/net/core/gen_estimator.c | |||
@@ -249,13 +249,6 @@ int gen_new_estimator(struct gnet_stats_basic_packed *bstats, | |||
249 | } | 249 | } |
250 | EXPORT_SYMBOL(gen_new_estimator); | 250 | EXPORT_SYMBOL(gen_new_estimator); |
251 | 251 | ||
252 | static void __gen_kill_estimator(struct rcu_head *head) | ||
253 | { | ||
254 | struct gen_estimator *e = container_of(head, | ||
255 | struct gen_estimator, e_rcu); | ||
256 | kfree(e); | ||
257 | } | ||
258 | |||
259 | /** | 252 | /** |
260 | * gen_kill_estimator - remove a rate estimator | 253 | * gen_kill_estimator - remove a rate estimator |
261 | * @bstats: basic statistics | 254 | * @bstats: basic statistics |
@@ -279,7 +272,7 @@ void gen_kill_estimator(struct gnet_stats_basic_packed *bstats, | |||
279 | write_unlock(&est_lock); | 272 | write_unlock(&est_lock); |
280 | 273 | ||
281 | list_del_rcu(&e->list); | 274 | list_del_rcu(&e->list); |
282 | call_rcu(&e->e_rcu, __gen_kill_estimator); | 275 | kfree_rcu(e, e_rcu); |
283 | } | 276 | } |
284 | spin_unlock_bh(&est_tree_lock); | 277 | spin_unlock_bh(&est_tree_lock); |
285 | } | 278 | } |
diff --git a/net/core/net-sysfs.c b/net/core/net-sysfs.c index 1b122177c8fa..11b98bc2aa8f 100644 --- a/net/core/net-sysfs.c +++ b/net/core/net-sysfs.c | |||
@@ -561,13 +561,6 @@ static ssize_t show_rps_map(struct netdev_rx_queue *queue, | |||
561 | return len; | 561 | return len; |
562 | } | 562 | } |
563 | 563 | ||
564 | static void rps_map_release(struct rcu_head *rcu) | ||
565 | { | ||
566 | struct rps_map *map = container_of(rcu, struct rps_map, rcu); | ||
567 | |||
568 | kfree(map); | ||
569 | } | ||
570 | |||
571 | static ssize_t store_rps_map(struct netdev_rx_queue *queue, | 564 | static ssize_t store_rps_map(struct netdev_rx_queue *queue, |
572 | struct rx_queue_attribute *attribute, | 565 | struct rx_queue_attribute *attribute, |
573 | const char *buf, size_t len) | 566 | const char *buf, size_t len) |
@@ -615,7 +608,7 @@ static ssize_t store_rps_map(struct netdev_rx_queue *queue, | |||
615 | spin_unlock(&rps_map_lock); | 608 | spin_unlock(&rps_map_lock); |
616 | 609 | ||
617 | if (old_map) | 610 | if (old_map) |
618 | call_rcu(&old_map->rcu, rps_map_release); | 611 | kfree_rcu(old_map, rcu); |
619 | 612 | ||
620 | free_cpumask_var(mask); | 613 | free_cpumask_var(mask); |
621 | return len; | 614 | return len; |
@@ -724,7 +717,7 @@ static void rx_queue_release(struct kobject *kobj) | |||
724 | map = rcu_dereference_raw(queue->rps_map); | 717 | map = rcu_dereference_raw(queue->rps_map); |
725 | if (map) { | 718 | if (map) { |
726 | RCU_INIT_POINTER(queue->rps_map, NULL); | 719 | RCU_INIT_POINTER(queue->rps_map, NULL); |
727 | call_rcu(&map->rcu, rps_map_release); | 720 | kfree_rcu(map, rcu); |
728 | } | 721 | } |
729 | 722 | ||
730 | flow_table = rcu_dereference_raw(queue->rps_flow_table); | 723 | flow_table = rcu_dereference_raw(queue->rps_flow_table); |
@@ -894,21 +887,6 @@ static ssize_t show_xps_map(struct netdev_queue *queue, | |||
894 | return len; | 887 | return len; |
895 | } | 888 | } |
896 | 889 | ||
897 | static void xps_map_release(struct rcu_head *rcu) | ||
898 | { | ||
899 | struct xps_map *map = container_of(rcu, struct xps_map, rcu); | ||
900 | |||
901 | kfree(map); | ||
902 | } | ||
903 | |||
904 | static void xps_dev_maps_release(struct rcu_head *rcu) | ||
905 | { | ||
906 | struct xps_dev_maps *dev_maps = | ||
907 | container_of(rcu, struct xps_dev_maps, rcu); | ||
908 | |||
909 | kfree(dev_maps); | ||
910 | } | ||
911 | |||
912 | static DEFINE_MUTEX(xps_map_mutex); | 890 | static DEFINE_MUTEX(xps_map_mutex); |
913 | #define xmap_dereference(P) \ | 891 | #define xmap_dereference(P) \ |
914 | rcu_dereference_protected((P), lockdep_is_held(&xps_map_mutex)) | 892 | rcu_dereference_protected((P), lockdep_is_held(&xps_map_mutex)) |
@@ -1005,7 +983,7 @@ static ssize_t store_xps_map(struct netdev_queue *queue, | |||
1005 | map = dev_maps ? | 983 | map = dev_maps ? |
1006 | xmap_dereference(dev_maps->cpu_map[cpu]) : NULL; | 984 | xmap_dereference(dev_maps->cpu_map[cpu]) : NULL; |
1007 | if (map && xmap_dereference(new_dev_maps->cpu_map[cpu]) != map) | 985 | if (map && xmap_dereference(new_dev_maps->cpu_map[cpu]) != map) |
1008 | call_rcu(&map->rcu, xps_map_release); | 986 | kfree_rcu(map, rcu); |
1009 | if (new_dev_maps->cpu_map[cpu]) | 987 | if (new_dev_maps->cpu_map[cpu]) |
1010 | nonempty = 1; | 988 | nonempty = 1; |
1011 | } | 989 | } |
@@ -1018,7 +996,7 @@ static ssize_t store_xps_map(struct netdev_queue *queue, | |||
1018 | } | 996 | } |
1019 | 997 | ||
1020 | if (dev_maps) | 998 | if (dev_maps) |
1021 | call_rcu(&dev_maps->rcu, xps_dev_maps_release); | 999 | kfree_rcu(dev_maps, rcu); |
1022 | 1000 | ||
1023 | netdev_queue_numa_node_write(queue, (numa_node >= 0) ? numa_node : | 1001 | netdev_queue_numa_node_write(queue, (numa_node >= 0) ? numa_node : |
1024 | NUMA_NO_NODE); | 1002 | NUMA_NO_NODE); |
@@ -1080,7 +1058,7 @@ static void netdev_queue_release(struct kobject *kobj) | |||
1080 | else { | 1058 | else { |
1081 | RCU_INIT_POINTER(dev_maps->cpu_map[i], | 1059 | RCU_INIT_POINTER(dev_maps->cpu_map[i], |
1082 | NULL); | 1060 | NULL); |
1083 | call_rcu(&map->rcu, xps_map_release); | 1061 | kfree_rcu(map, rcu); |
1084 | map = NULL; | 1062 | map = NULL; |
1085 | } | 1063 | } |
1086 | } | 1064 | } |
@@ -1090,7 +1068,7 @@ static void netdev_queue_release(struct kobject *kobj) | |||
1090 | 1068 | ||
1091 | if (!nonempty) { | 1069 | if (!nonempty) { |
1092 | RCU_INIT_POINTER(dev->xps_maps, NULL); | 1070 | RCU_INIT_POINTER(dev->xps_maps, NULL); |
1093 | call_rcu(&dev_maps->rcu, xps_dev_maps_release); | 1071 | kfree_rcu(dev_maps, rcu); |
1094 | } | 1072 | } |
1095 | } | 1073 | } |
1096 | 1074 | ||
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 1abb50841046..2e2dce6583e1 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c | |||
@@ -27,14 +27,6 @@ EXPORT_SYMBOL(init_net); | |||
27 | 27 | ||
28 | #define INITIAL_NET_GEN_PTRS 13 /* +1 for len +2 for rcu_head */ | 28 | #define INITIAL_NET_GEN_PTRS 13 /* +1 for len +2 for rcu_head */ |
29 | 29 | ||
30 | static void net_generic_release(struct rcu_head *rcu) | ||
31 | { | ||
32 | struct net_generic *ng; | ||
33 | |||
34 | ng = container_of(rcu, struct net_generic, rcu); | ||
35 | kfree(ng); | ||
36 | } | ||
37 | |||
38 | static int net_assign_generic(struct net *net, int id, void *data) | 30 | static int net_assign_generic(struct net *net, int id, void *data) |
39 | { | 31 | { |
40 | struct net_generic *ng, *old_ng; | 32 | struct net_generic *ng, *old_ng; |
@@ -68,7 +60,7 @@ static int net_assign_generic(struct net *net, int id, void *data) | |||
68 | memcpy(&ng->ptr, &old_ng->ptr, old_ng->len * sizeof(void*)); | 60 | memcpy(&ng->ptr, &old_ng->ptr, old_ng->len * sizeof(void*)); |
69 | 61 | ||
70 | rcu_assign_pointer(net->gen, ng); | 62 | rcu_assign_pointer(net->gen, ng); |
71 | call_rcu(&old_ng->rcu, net_generic_release); | 63 | kfree_rcu(old_ng, rcu); |
72 | assign: | 64 | assign: |
73 | ng->ptr[id - 1] = data; | 65 | ng->ptr[id - 1] = data; |
74 | return 0; | 66 | return 0; |
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 379270f14771..67870e9fd097 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -156,6 +156,7 @@ | |||
156 | #include <linux/wait.h> | 156 | #include <linux/wait.h> |
157 | #include <linux/etherdevice.h> | 157 | #include <linux/etherdevice.h> |
158 | #include <linux/kthread.h> | 158 | #include <linux/kthread.h> |
159 | #include <linux/prefetch.h> | ||
159 | #include <net/net_namespace.h> | 160 | #include <net/net_namespace.h> |
160 | #include <net/checksum.h> | 161 | #include <net/checksum.h> |
161 | #include <net/ipv6.h> | 162 | #include <net/ipv6.h> |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 3e934fe96f29..46cbd28f40f9 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -57,6 +57,7 @@ | |||
57 | #include <linux/init.h> | 57 | #include <linux/init.h> |
58 | #include <linux/scatterlist.h> | 58 | #include <linux/scatterlist.h> |
59 | #include <linux/errqueue.h> | 59 | #include <linux/errqueue.h> |
60 | #include <linux/prefetch.h> | ||
60 | 61 | ||
61 | #include <net/protocol.h> | 62 | #include <net/protocol.h> |
62 | #include <net/dst.h> | 63 | #include <net/dst.h> |