diff options
author | Tejun Heo <tj@kernel.org> | 2010-02-16 10:20:26 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-02-17 02:05:38 -0500 |
commit | 7d720c3e4f0c4fc152a6bf17e24244a3c85412d2 (patch) | |
tree | 36e037187ce79acb211702bea22e99c625787757 /net/ipv4/proc.c | |
parent | 2bb4646fce8d09916b351d1a62f98db7cec6fc41 (diff) |
percpu: add __percpu sparse annotations to net
Add __percpu sparse annotations to net.
These annotations are to make sparse consider percpu variables to be
in a different address space and warn if accessed without going
through percpu accessors. This patch doesn't affect normal builds.
The macro and type tricks around snmp stats make things a bit
interesting. DEFINE/DECLARE_SNMP_STAT() macros mark the target field
as __percpu and SNMP_UPD_PO_STATS() macro is updated accordingly. All
snmp_mib_*() users which used to cast the argument to (void **) are
updated to cast it to (void __percpu **).
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: David S. Miller <davem@davemloft.net>
Cc: Patrick McHardy <kaber@trash.net>
Cc: Arnaldo Carvalho de Melo <acme@ghostprotocols.net>
Cc: Vlad Yasevich <vladislav.yasevich@hp.com>
Cc: netdev@vger.kernel.org
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/proc.c')
-rw-r--r-- | net/ipv4/proc.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c index 1b09a6dde7c0..242ed2307370 100644 --- a/net/ipv4/proc.c +++ b/net/ipv4/proc.c | |||
@@ -280,7 +280,7 @@ static void icmpmsg_put(struct seq_file *seq) | |||
280 | 280 | ||
281 | count = 0; | 281 | count = 0; |
282 | for (i = 0; i < ICMPMSG_MIB_MAX; i++) { | 282 | for (i = 0; i < ICMPMSG_MIB_MAX; i++) { |
283 | val = snmp_fold_field((void **) net->mib.icmpmsg_statistics, i); | 283 | val = snmp_fold_field((void __percpu **) net->mib.icmpmsg_statistics, i); |
284 | if (val) { | 284 | if (val) { |
285 | type[count] = i; | 285 | type[count] = i; |
286 | vals[count++] = val; | 286 | vals[count++] = val; |
@@ -307,18 +307,18 @@ static void icmp_put(struct seq_file *seq) | |||
307 | for (i=0; icmpmibmap[i].name != NULL; i++) | 307 | for (i=0; icmpmibmap[i].name != NULL; i++) |
308 | seq_printf(seq, " Out%s", icmpmibmap[i].name); | 308 | seq_printf(seq, " Out%s", icmpmibmap[i].name); |
309 | seq_printf(seq, "\nIcmp: %lu %lu", | 309 | seq_printf(seq, "\nIcmp: %lu %lu", |
310 | snmp_fold_field((void **) net->mib.icmp_statistics, ICMP_MIB_INMSGS), | 310 | snmp_fold_field((void __percpu **) net->mib.icmp_statistics, ICMP_MIB_INMSGS), |
311 | snmp_fold_field((void **) net->mib.icmp_statistics, ICMP_MIB_INERRORS)); | 311 | snmp_fold_field((void __percpu **) net->mib.icmp_statistics, ICMP_MIB_INERRORS)); |
312 | for (i=0; icmpmibmap[i].name != NULL; i++) | 312 | for (i=0; icmpmibmap[i].name != NULL; i++) |
313 | seq_printf(seq, " %lu", | 313 | seq_printf(seq, " %lu", |
314 | snmp_fold_field((void **) net->mib.icmpmsg_statistics, | 314 | snmp_fold_field((void __percpu **) net->mib.icmpmsg_statistics, |
315 | icmpmibmap[i].index)); | 315 | icmpmibmap[i].index)); |
316 | seq_printf(seq, " %lu %lu", | 316 | seq_printf(seq, " %lu %lu", |
317 | snmp_fold_field((void **) net->mib.icmp_statistics, ICMP_MIB_OUTMSGS), | 317 | snmp_fold_field((void __percpu **) net->mib.icmp_statistics, ICMP_MIB_OUTMSGS), |
318 | snmp_fold_field((void **) net->mib.icmp_statistics, ICMP_MIB_OUTERRORS)); | 318 | snmp_fold_field((void __percpu **) net->mib.icmp_statistics, ICMP_MIB_OUTERRORS)); |
319 | for (i=0; icmpmibmap[i].name != NULL; i++) | 319 | for (i=0; icmpmibmap[i].name != NULL; i++) |
320 | seq_printf(seq, " %lu", | 320 | seq_printf(seq, " %lu", |
321 | snmp_fold_field((void **) net->mib.icmpmsg_statistics, | 321 | snmp_fold_field((void __percpu **) net->mib.icmpmsg_statistics, |
322 | icmpmibmap[i].index | 0x100)); | 322 | icmpmibmap[i].index | 0x100)); |
323 | } | 323 | } |
324 | 324 | ||
@@ -341,7 +341,7 @@ static int snmp_seq_show(struct seq_file *seq, void *v) | |||
341 | 341 | ||
342 | for (i = 0; snmp4_ipstats_list[i].name != NULL; i++) | 342 | for (i = 0; snmp4_ipstats_list[i].name != NULL; i++) |
343 | seq_printf(seq, " %lu", | 343 | seq_printf(seq, " %lu", |
344 | snmp_fold_field((void **)net->mib.ip_statistics, | 344 | snmp_fold_field((void __percpu **)net->mib.ip_statistics, |
345 | snmp4_ipstats_list[i].entry)); | 345 | snmp4_ipstats_list[i].entry)); |
346 | 346 | ||
347 | icmp_put(seq); /* RFC 2011 compatibility */ | 347 | icmp_put(seq); /* RFC 2011 compatibility */ |
@@ -356,11 +356,11 @@ static int snmp_seq_show(struct seq_file *seq, void *v) | |||
356 | /* MaxConn field is signed, RFC 2012 */ | 356 | /* MaxConn field is signed, RFC 2012 */ |
357 | if (snmp4_tcp_list[i].entry == TCP_MIB_MAXCONN) | 357 | if (snmp4_tcp_list[i].entry == TCP_MIB_MAXCONN) |
358 | seq_printf(seq, " %ld", | 358 | seq_printf(seq, " %ld", |
359 | snmp_fold_field((void **)net->mib.tcp_statistics, | 359 | snmp_fold_field((void __percpu **)net->mib.tcp_statistics, |
360 | snmp4_tcp_list[i].entry)); | 360 | snmp4_tcp_list[i].entry)); |
361 | else | 361 | else |
362 | seq_printf(seq, " %lu", | 362 | seq_printf(seq, " %lu", |
363 | snmp_fold_field((void **)net->mib.tcp_statistics, | 363 | snmp_fold_field((void __percpu **)net->mib.tcp_statistics, |
364 | snmp4_tcp_list[i].entry)); | 364 | snmp4_tcp_list[i].entry)); |
365 | } | 365 | } |
366 | 366 | ||
@@ -371,7 +371,7 @@ static int snmp_seq_show(struct seq_file *seq, void *v) | |||
371 | seq_puts(seq, "\nUdp:"); | 371 | seq_puts(seq, "\nUdp:"); |
372 | for (i = 0; snmp4_udp_list[i].name != NULL; i++) | 372 | for (i = 0; snmp4_udp_list[i].name != NULL; i++) |
373 | seq_printf(seq, " %lu", | 373 | seq_printf(seq, " %lu", |
374 | snmp_fold_field((void **)net->mib.udp_statistics, | 374 | snmp_fold_field((void __percpu **)net->mib.udp_statistics, |
375 | snmp4_udp_list[i].entry)); | 375 | snmp4_udp_list[i].entry)); |
376 | 376 | ||
377 | /* the UDP and UDP-Lite MIBs are the same */ | 377 | /* the UDP and UDP-Lite MIBs are the same */ |
@@ -382,7 +382,7 @@ static int snmp_seq_show(struct seq_file *seq, void *v) | |||
382 | seq_puts(seq, "\nUdpLite:"); | 382 | seq_puts(seq, "\nUdpLite:"); |
383 | for (i = 0; snmp4_udp_list[i].name != NULL; i++) | 383 | for (i = 0; snmp4_udp_list[i].name != NULL; i++) |
384 | seq_printf(seq, " %lu", | 384 | seq_printf(seq, " %lu", |
385 | snmp_fold_field((void **)net->mib.udplite_statistics, | 385 | snmp_fold_field((void __percpu **)net->mib.udplite_statistics, |
386 | snmp4_udp_list[i].entry)); | 386 | snmp4_udp_list[i].entry)); |
387 | 387 | ||
388 | seq_putc(seq, '\n'); | 388 | seq_putc(seq, '\n'); |
@@ -419,7 +419,7 @@ static int netstat_seq_show(struct seq_file *seq, void *v) | |||
419 | seq_puts(seq, "\nTcpExt:"); | 419 | seq_puts(seq, "\nTcpExt:"); |
420 | for (i = 0; snmp4_net_list[i].name != NULL; i++) | 420 | for (i = 0; snmp4_net_list[i].name != NULL; i++) |
421 | seq_printf(seq, " %lu", | 421 | seq_printf(seq, " %lu", |
422 | snmp_fold_field((void **)net->mib.net_statistics, | 422 | snmp_fold_field((void __percpu **)net->mib.net_statistics, |
423 | snmp4_net_list[i].entry)); | 423 | snmp4_net_list[i].entry)); |
424 | 424 | ||
425 | seq_puts(seq, "\nIpExt:"); | 425 | seq_puts(seq, "\nIpExt:"); |
@@ -429,7 +429,7 @@ static int netstat_seq_show(struct seq_file *seq, void *v) | |||
429 | seq_puts(seq, "\nIpExt:"); | 429 | seq_puts(seq, "\nIpExt:"); |
430 | for (i = 0; snmp4_ipextstats_list[i].name != NULL; i++) | 430 | for (i = 0; snmp4_ipextstats_list[i].name != NULL; i++) |
431 | seq_printf(seq, " %lu", | 431 | seq_printf(seq, " %lu", |
432 | snmp_fold_field((void **)net->mib.ip_statistics, | 432 | snmp_fold_field((void __percpu **)net->mib.ip_statistics, |
433 | snmp4_ipextstats_list[i].entry)); | 433 | snmp4_ipextstats_list[i].entry)); |
434 | 434 | ||
435 | seq_putc(seq, '\n'); | 435 | seq_putc(seq, '\n'); |