* [RFC PATCH 1/6] proc: Reduce cache miss in {snmp,netstat}_seq_show
2016-08-29 16:03 [RFC PATCH 0/6] Reduce cache miss for snmp_fold_field Jia He
@ 2016-08-29 16:03 ` Jia He
2016-08-29 16:41 ` Eric Dumazet
2016-08-29 16:03 ` [RFC PATCH 2/6] proc: Reduce cache miss in snmp6_seq_show Jia He
` (4 subsequent siblings)
5 siblings, 1 reply; 9+ messages in thread
From: Jia He @ 2016-08-29 16:03 UTC (permalink / raw)
To: netdev
Cc: linux-sctp, linux-kernel, davem, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy, Vlad Yasevich, Neil Horman,
Steffen Klassert, Herbert Xu, Jia He
This patch exchanges the two loop for collecting the percpu statistics
data. This can aggregate the data by going through all the items of each
cpu sequentially. In snmp_seq_show, just use one buff copy to dislay the
Udp and UdpLite data because they are the same.
Signed-off-by: Jia He <hejianet@gmail.com>
---
net/ipv4/proc.c | 78 ++++++++++++++++++++++++++++++++++++---------------------
1 file changed, 50 insertions(+), 28 deletions(-)
diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c
index 9f665b6..ed09566 100644
--- a/net/ipv4/proc.c
+++ b/net/ipv4/proc.c
@@ -380,11 +380,15 @@ static void icmp_put(struct seq_file *seq)
*/
static int snmp_seq_show(struct seq_file *seq, void *v)
{
- int i;
+ int i, c;
+ unsigned long buff[TCP_MIB_MAX];
+ u64 buff64[IPSTATS_MIB_MAX];
struct net *net = seq->private;
- seq_puts(seq, "Ip: Forwarding DefaultTTL");
+ memset(buff, 0, TCP_MIB_MAX * sizeof(unsigned long));
+ memset(buff64, 0, IPSTATS_MIB_MAX * sizeof(u64));
+ seq_puts(seq, "Ip: Forwarding DefaultTTL");
for (i = 0; snmp4_ipstats_list[i].name != NULL; i++)
seq_printf(seq, " %s", snmp4_ipstats_list[i].name);
@@ -393,11 +397,16 @@ static int snmp_seq_show(struct seq_file *seq, void *v)
net->ipv4.sysctl_ip_default_ttl);
BUILD_BUG_ON(offsetof(struct ipstats_mib, mibs) != 0);
+
+ for_each_possible_cpu(c) {
+ for (i = 0; snmp4_ipstats_list[i].name != NULL; i++)
+ buff64[i] += snmp_get_cpu_field64(
+ net->mib.ip_statistics,
+ c, snmp4_ipstats_list[i].entry,
+ offsetof(struct ipstats_mib, syncp));
+ }
for (i = 0; snmp4_ipstats_list[i].name != NULL; i++)
- seq_printf(seq, " %llu",
- snmp_fold_field64(net->mib.ip_statistics,
- snmp4_ipstats_list[i].entry,
- offsetof(struct ipstats_mib, syncp)));
+ seq_printf(seq, " %llu", buff64[i]);
icmp_put(seq); /* RFC 2011 compatibility */
icmpmsg_put(seq);
@@ -407,38 +416,41 @@ static int snmp_seq_show(struct seq_file *seq, void *v)
seq_printf(seq, " %s", snmp4_tcp_list[i].name);
seq_puts(seq, "\nTcp:");
+ for_each_possible_cpu(c) {
+ for (i = 0; snmp4_tcp_list[i].name != NULL; i++)
+ buff[i] += snmp_get_cpu_field(net->mib.tcp_statistics,
+ c, snmp4_tcp_list[i].entry);
+ }
+
for (i = 0; snmp4_tcp_list[i].name != NULL; i++) {
/* MaxConn field is signed, RFC 2012 */
if (snmp4_tcp_list[i].entry == TCP_MIB_MAXCONN)
- seq_printf(seq, " %ld",
- snmp_fold_field(net->mib.tcp_statistics,
- snmp4_tcp_list[i].entry));
+ seq_printf(seq, " %ld", buff[i]);
else
- seq_printf(seq, " %lu",
- snmp_fold_field(net->mib.tcp_statistics,
- snmp4_tcp_list[i].entry));
+ seq_printf(seq, " %lu", buff[i]);
}
+ memset(buff, 0, TCP_MIB_MAX * sizeof(unsigned long));
+
+ for_each_possible_cpu(c) {
+ for (i = 0; snmp4_udp_list[i].name != NULL; i++)
+ buff[i] += snmp_get_cpu_field(net->mib.udp_statistics,
+ c, snmp4_udp_list[i].entry);
+ }
seq_puts(seq, "\nUdp:");
for (i = 0; snmp4_udp_list[i].name != NULL; i++)
seq_printf(seq, " %s", snmp4_udp_list[i].name);
-
seq_puts(seq, "\nUdp:");
for (i = 0; snmp4_udp_list[i].name != NULL; i++)
- seq_printf(seq, " %lu",
- snmp_fold_field(net->mib.udp_statistics,
- snmp4_udp_list[i].entry));
+ seq_printf(seq, " %lu", buff[i]);
/* the UDP and UDP-Lite MIBs are the same */
seq_puts(seq, "\nUdpLite:");
for (i = 0; snmp4_udp_list[i].name != NULL; i++)
seq_printf(seq, " %s", snmp4_udp_list[i].name);
-
seq_puts(seq, "\nUdpLite:");
for (i = 0; snmp4_udp_list[i].name != NULL; i++)
- seq_printf(seq, " %lu",
- snmp_fold_field(net->mib.udplite_statistics,
- snmp4_udp_list[i].entry));
+ seq_printf(seq, " %lu", buff[i]);
seq_putc(seq, '\n');
return 0;
@@ -464,29 +476,39 @@ static const struct file_operations snmp_seq_fops = {
*/
static int netstat_seq_show(struct seq_file *seq, void *v)
{
- int i;
+ int i, c;
+ unsigned long buff[LINUX_MIB_MAX];
+ u64 buff64[IPSTATS_MIB_MAX];
struct net *net = seq->private;
+ memset(buff, 0, sizeof(unsigned long) * LINUX_MIB_MAX);
+ memset(buff64, 0, sizeof(u64) * IPSTATS_MIB_MAX);
+
seq_puts(seq, "TcpExt:");
for (i = 0; snmp4_net_list[i].name != NULL; i++)
seq_printf(seq, " %s", snmp4_net_list[i].name);
seq_puts(seq, "\nTcpExt:");
+ for_each_possible_cpu(c)
+ for (i = 0; snmp4_net_list[i].name != NULL; i++)
+ buff[i] += snmp_get_cpu_field(net->mib.net_statistics,
+ c, snmp4_net_list[i].entry);
for (i = 0; snmp4_net_list[i].name != NULL; i++)
- seq_printf(seq, " %lu",
- snmp_fold_field(net->mib.net_statistics,
- snmp4_net_list[i].entry));
+ seq_printf(seq, " %lu", buff[i]);
seq_puts(seq, "\nIpExt:");
for (i = 0; snmp4_ipextstats_list[i].name != NULL; i++)
seq_printf(seq, " %s", snmp4_ipextstats_list[i].name);
seq_puts(seq, "\nIpExt:");
+ for_each_possible_cpu(c)
+ for (i = 0; snmp4_ipextstats_list[i].name != NULL; i++)
+ buff64[i] += snmp_get_cpu_field64(
+ net->mib.ip_statistics,
+ c, snmp4_ipextstats_list[i].entry,
+ offsetof(struct ipstats_mib, syncp));
for (i = 0; snmp4_ipextstats_list[i].name != NULL; i++)
- seq_printf(seq, " %llu",
- snmp_fold_field64(net->mib.ip_statistics,
- snmp4_ipextstats_list[i].entry,
- offsetof(struct ipstats_mib, syncp)));
+ seq_printf(seq, " %llu", buff64[i]);
seq_putc(seq, '\n');
return 0;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [RFC PATCH 1/6] proc: Reduce cache miss in {snmp,netstat}_seq_show
2016-08-29 16:03 ` [RFC PATCH 1/6] proc: Reduce cache miss in {snmp,netstat}_seq_show Jia He
@ 2016-08-29 16:41 ` Eric Dumazet
2016-08-30 8:15 ` hejianet
0 siblings, 1 reply; 9+ messages in thread
From: Eric Dumazet @ 2016-08-29 16:41 UTC (permalink / raw)
To: Jia He
Cc: netdev, linux-sctp, linux-kernel, davem, Alexey Kuznetsov,
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, Vlad Yasevich,
Neil Horman, Steffen Klassert, Herbert Xu
On Tue, 2016-08-30 at 00:03 +0800, Jia He wrote:
> This patch exchanges the two loop for collecting the percpu statistics
> data. This can aggregate the data by going through all the items of each
> cpu sequentially. In snmp_seq_show, just use one buff copy to dislay the
> Udp and UdpLite data because they are the same.
This is obviously not true.
On my laptop it seems it handled no UdpLite frames, but got plenty of
Udp ones.
$ grep Udp /proc/net/snmp
Udp: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors InCsumErrors
Udp: 1555889 108318 0 3740780 0 0 0
UdpLite: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors InCsumErrors
UdpLite: 0 0 0 0 0 0 0
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [RFC PATCH 1/6] proc: Reduce cache miss in {snmp,netstat}_seq_show
2016-08-29 16:41 ` Eric Dumazet
@ 2016-08-30 8:15 ` hejianet
0 siblings, 0 replies; 9+ messages in thread
From: hejianet @ 2016-08-30 8:15 UTC (permalink / raw)
To: Eric Dumazet
Cc: netdev, linux-sctp, linux-kernel, davem, Alexey Kuznetsov,
James Morris, Hideaki YOSHIFUJI, Patrick McHardy, Vlad Yasevich,
Neil Horman, Steffen Klassert, Herbert Xu
Hi Eric
On 8/30/16 12:41 AM, Eric Dumazet wrote:
> On Tue, 2016-08-30 at 00:03 +0800, Jia He wrote:
>> This patch exchanges the two loop for collecting the percpu statistics
>> data. This can aggregate the data by going through all the items of each
>> cpu sequentially. In snmp_seq_show, just use one buff copy to dislay the
>> Udp and UdpLite data because they are the same.
> This is obviously not true.
>
> On my laptop it seems it handled no UdpLite frames, but got plenty of
> Udp ones.
>
> $ grep Udp /proc/net/snmp
> Udp: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors InCsumErrors
> Udp: 1555889 108318 0 3740780 0 0 0
> UdpLite: InDatagrams NoPorts InErrors OutDatagrams RcvbufErrors SndbufErrors InCsumErrors
> UdpLite: 0 0 0 0 0 0 0
Thanks, you are right. I misunderstand the comments of source codes.
Will resend it
B.R.
Jia
>
>
>
> .
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [RFC PATCH 2/6] proc: Reduce cache miss in snmp6_seq_show
2016-08-29 16:03 [RFC PATCH 0/6] Reduce cache miss for snmp_fold_field Jia He
2016-08-29 16:03 ` [RFC PATCH 1/6] proc: Reduce cache miss in {snmp,netstat}_seq_show Jia He
@ 2016-08-29 16:03 ` Jia He
2016-08-29 16:03 ` [RFC PATCH 3/6] proc: Reduce cache miss in sctp_snmp_seq_show Jia He
` (3 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Jia He @ 2016-08-29 16:03 UTC (permalink / raw)
To: netdev
Cc: linux-sctp, linux-kernel, davem, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy, Vlad Yasevich, Neil Horman,
Steffen Klassert, Herbert Xu, Jia He
This patch exchanges the two loop for collecting the percpu
statistics data. This can reduce cache misses by going through
all the items of each cpu sequentially.
Signed-off-by: Jia He <hejianet@gmail.com>
---
net/ipv6/proc.c | 47 ++++++++++++++++++++++++++++++++++++-----------
1 file changed, 36 insertions(+), 11 deletions(-)
diff --git a/net/ipv6/proc.c b/net/ipv6/proc.c
index 679253d0..c834646 100644
--- a/net/ipv6/proc.c
+++ b/net/ipv6/proc.c
@@ -30,6 +30,13 @@
#include <net/transp_v6.h>
#include <net/ipv6.h>
+#define MAX(a, b) ((u32)(a) >= (u32)(b) ? (a) : (b))
+
+#define MAX4(a, b, c, d) \
+ MAX(MAX(a, b), MAX(c, d))
+#define SNMP_MIB_MAX MAX4(UDP_MIB_MAX, TCP_MIB_MAX, \
+ IPSTATS_MIB_MAX, ICMP_MIB_MAX)
+
static int sockstat6_seq_show(struct seq_file *seq, void *v)
{
struct net *net = seq->private;
@@ -191,25 +198,43 @@ static void snmp6_seq_show_item(struct seq_file *seq, void __percpu *pcpumib,
atomic_long_t *smib,
const struct snmp_mib *itemlist)
{
- int i;
- unsigned long val;
-
- for (i = 0; itemlist[i].name; i++) {
- val = pcpumib ?
- snmp_fold_field(pcpumib, itemlist[i].entry) :
- atomic_long_read(smib + itemlist[i].entry);
- seq_printf(seq, "%-32s\t%lu\n", itemlist[i].name, val);
+ int i, c;
+ unsigned long buff[SNMP_MIB_MAX];
+
+ memset(buff, 0, sizeof(unsigned long) * SNMP_MIB_MAX);
+
+ if (pcpumib) {
+ for_each_possible_cpu(c)
+ for (i = 0; itemlist[i].name; i++)
+ buff[i] += snmp_get_cpu_field(pcpumib, c,
+ itemlist[i].entry);
+ for (i = 0; itemlist[i].name; i++)
+ seq_printf(seq, "%-32s\t%lu\n",
+ itemlist[i].name, buff[i]);
+ } else {
+ for (i = 0; itemlist[i].name; i++)
+ seq_printf(seq, "%-32s\t%lu\n", itemlist[i].name,
+ atomic_long_read(smib + itemlist[i].entry));
}
}
static void snmp6_seq_show_item64(struct seq_file *seq, void __percpu *mib,
const struct snmp_mib *itemlist, size_t syncpoff)
{
- int i;
+ int i, c;
+ u64 buff[SNMP_MIB_MAX];
+
+ memset(buff, 0, sizeof(unsigned long) * SNMP_MIB_MAX);
+ for_each_possible_cpu(c) {
+ for (i = 0; itemlist[i].name; i++) {
+ buff[i] += snmp_get_cpu_field64(mib, c,
+ itemlist[i].entry,
+ syncpoff);
+ }
+ }
for (i = 0; itemlist[i].name; i++)
- seq_printf(seq, "%-32s\t%llu\n", itemlist[i].name,
- snmp_fold_field64(mib, itemlist[i].entry, syncpoff));
+ seq_printf(seq, "%-32s\t%llu\n", itemlist[i].name, buff[i]);
}
static int snmp6_seq_show(struct seq_file *seq, void *v)
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [RFC PATCH 3/6] proc: Reduce cache miss in sctp_snmp_seq_show
2016-08-29 16:03 [RFC PATCH 0/6] Reduce cache miss for snmp_fold_field Jia He
2016-08-29 16:03 ` [RFC PATCH 1/6] proc: Reduce cache miss in {snmp,netstat}_seq_show Jia He
2016-08-29 16:03 ` [RFC PATCH 2/6] proc: Reduce cache miss in snmp6_seq_show Jia He
@ 2016-08-29 16:03 ` Jia He
2016-08-29 16:03 ` [RFC PATCH 4/6] proc: Reduce cache miss in xfrm_statistics_seq_show Jia He
` (2 subsequent siblings)
5 siblings, 0 replies; 9+ messages in thread
From: Jia He @ 2016-08-29 16:03 UTC (permalink / raw)
To: netdev
Cc: linux-sctp, linux-kernel, davem, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy, Vlad Yasevich, Neil Horman,
Steffen Klassert, Herbert Xu, Jia He
This patch exchanges the two loop for collecting the percpu
statistics data. This can reduce cache misses by going through
all the items of each cpu sequentially.
Signed-off-by: Jia He <hejianet@gmail.com>
---
net/sctp/proc.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/net/sctp/proc.c b/net/sctp/proc.c
index ef8ba77..085fb95 100644
--- a/net/sctp/proc.c
+++ b/net/sctp/proc.c
@@ -74,12 +74,19 @@ static const struct snmp_mib sctp_snmp_list[] = {
static int sctp_snmp_seq_show(struct seq_file *seq, void *v)
{
struct net *net = seq->private;
- int i;
+ int i, c;
+ unsigned long buff[SCTP_MIB_MAX];
+ memset(buff, 0, sizeof(unsigned long) * SCTP_MIB_MAX);
+
+ for_each_possible_cpu(c)
+ for (i = 0; sctp_snmp_list[i].name != NULL; i++)
+ buff[i] += snmp_get_cpu_field(
+ net->sctp.sctp_statistics,
+ c, sctp_snmp_list[i].entry);
for (i = 0; sctp_snmp_list[i].name != NULL; i++)
seq_printf(seq, "%-32s\t%ld\n", sctp_snmp_list[i].name,
- snmp_fold_field(net->sctp.sctp_statistics,
- sctp_snmp_list[i].entry));
+ buff[i]);
return 0;
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [RFC PATCH 4/6] proc: Reduce cache miss in xfrm_statistics_seq_show
2016-08-29 16:03 [RFC PATCH 0/6] Reduce cache miss for snmp_fold_field Jia He
` (2 preceding siblings ...)
2016-08-29 16:03 ` [RFC PATCH 3/6] proc: Reduce cache miss in sctp_snmp_seq_show Jia He
@ 2016-08-29 16:03 ` Jia He
2016-08-29 16:03 ` [RFC PATCH 5/6] ipv6: Remove useless parameter in __snmp6_fill_statsdev Jia He
2016-08-29 16:04 ` [RFC PATCH 6/6] net: Suppress the "Comparison to NULL Jia He
5 siblings, 0 replies; 9+ messages in thread
From: Jia He @ 2016-08-29 16:03 UTC (permalink / raw)
To: netdev
Cc: linux-sctp, linux-kernel, davem, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy, Vlad Yasevich, Neil Horman,
Steffen Klassert, Herbert Xu, Jia He
This patch exchanges the two loop for collecting the percpu
statistics data. This can reduce cache misses by going through
all the items of each cpu sequentially.
Signed-off-by: Jia He <hejianet@gmail.com>
---
net/xfrm/xfrm_proc.c | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/net/xfrm/xfrm_proc.c b/net/xfrm/xfrm_proc.c
index 9c4fbd8..c9df546 100644
--- a/net/xfrm/xfrm_proc.c
+++ b/net/xfrm/xfrm_proc.c
@@ -51,11 +51,20 @@ static const struct snmp_mib xfrm_mib_list[] = {
static int xfrm_statistics_seq_show(struct seq_file *seq, void *v)
{
struct net *net = seq->private;
- int i;
- for (i = 0; xfrm_mib_list[i].name; i++)
+ int i, c;
+ unsigned long buff[LINUX_MIB_XFRMMAX];
+
+ memset(buff, 0, sizeof(unsigned long) * LINUX_MIB_XFRMMAX);
+
+ for_each_possible_cpu(c)
+ for (i = 0; xfrm_mib_list[i].name != NULL; i++)
+ buff[i] += snmp_get_cpu_field(
+ net->mib.xfrm_statistics,
+ c, xfrm_mib_list[i].entry);
+ for (i = 0; xfrm_mib_list[i].name != NULL; i++)
seq_printf(seq, "%-24s\t%lu\n", xfrm_mib_list[i].name,
- snmp_fold_field(net->mib.xfrm_statistics,
- xfrm_mib_list[i].entry));
+ buff[i]);
+
return 0;
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [RFC PATCH 5/6] ipv6: Remove useless parameter in __snmp6_fill_statsdev
2016-08-29 16:03 [RFC PATCH 0/6] Reduce cache miss for snmp_fold_field Jia He
` (3 preceding siblings ...)
2016-08-29 16:03 ` [RFC PATCH 4/6] proc: Reduce cache miss in xfrm_statistics_seq_show Jia He
@ 2016-08-29 16:03 ` Jia He
2016-08-29 16:04 ` [RFC PATCH 6/6] net: Suppress the "Comparison to NULL Jia He
5 siblings, 0 replies; 9+ messages in thread
From: Jia He @ 2016-08-29 16:03 UTC (permalink / raw)
To: netdev
Cc: linux-sctp, linux-kernel, davem, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy, Vlad Yasevich, Neil Horman,
Steffen Klassert, Herbert Xu, Jia He
The parameter items(always ICMP6_MIB_MAX) is useless for __snmp6_fill_statsdev.
Signed-off-by: Jia He <hejianet@gmail.com>
---
net/ipv6/addrconf.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index df8425f..0fa5aa1 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -4944,18 +4944,18 @@ static inline size_t inet6_if_nlmsg_size(void)
}
static inline void __snmp6_fill_statsdev(u64 *stats, atomic_long_t *mib,
- int items, int bytes)
+ int bytes)
{
int i;
- int pad = bytes - sizeof(u64) * items;
+ int pad = bytes - sizeof(u64) * ICMP6_MIB_MAX;
BUG_ON(pad < 0);
/* Use put_unaligned() because stats may not be aligned for u64. */
- put_unaligned(items, &stats[0]);
- for (i = 1; i < items; i++)
+ put_unaligned(ICMP6_MIB_MAX, &stats[0]);
+ for (i = 1; i < ICMP6_MIB_MAX; i++)
put_unaligned(atomic_long_read(&mib[i]), &stats[i]);
- memset(&stats[items], 0, pad);
+ memset(&stats[ICMP6_MIB_MAX], 0, pad);
}
static inline void __snmp6_fill_stats64(u64 *stats, void __percpu *mib,
@@ -4988,7 +4988,7 @@ static void snmp6_fill_stats(u64 *stats, struct inet6_dev *idev, int attrtype,
offsetof(struct ipstats_mib, syncp));
break;
case IFLA_INET6_ICMP6STATS:
- __snmp6_fill_statsdev(stats, idev->stats.icmpv6dev->mibs, ICMP6_MIB_MAX, bytes);
+ __snmp6_fill_statsdev(stats, idev->stats.icmpv6dev->mibs, bytes);
break;
}
}
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [RFC PATCH 6/6] net: Suppress the "Comparison to NULL
2016-08-29 16:03 [RFC PATCH 0/6] Reduce cache miss for snmp_fold_field Jia He
` (4 preceding siblings ...)
2016-08-29 16:03 ` [RFC PATCH 5/6] ipv6: Remove useless parameter in __snmp6_fill_statsdev Jia He
@ 2016-08-29 16:04 ` Jia He
5 siblings, 0 replies; 9+ messages in thread
From: Jia He @ 2016-08-29 16:04 UTC (permalink / raw)
To: netdev
Cc: linux-sctp, linux-kernel, davem, Alexey Kuznetsov, James Morris,
Hideaki YOSHIFUJI, Patrick McHardy, Vlad Yasevich, Neil Horman,
Steffen Klassert, Herbert Xu, Jia He
This is to suppress the checkpatch.pl warning "Comparison to NULL
could be written". No functional changes here.
Signed-off-by: Jia He <hejianet@gmail.com>
---
net/ipv4/proc.c | 42 +++++++++++++++++++++---------------------
net/sctp/proc.c | 4 ++--
net/xfrm/xfrm_proc.c | 4 ++--
3 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/net/ipv4/proc.c b/net/ipv4/proc.c
index ed09566..8cbf3e0 100644
--- a/net/ipv4/proc.c
+++ b/net/ipv4/proc.c
@@ -355,22 +355,22 @@ static void icmp_put(struct seq_file *seq)
atomic_long_t *ptr = net->mib.icmpmsg_statistics->mibs;
seq_puts(seq, "\nIcmp: InMsgs InErrors InCsumErrors");
- for (i = 0; icmpmibmap[i].name != NULL; i++)
+ for (i = 0; icmpmibmap[i].name; i++)
seq_printf(seq, " In%s", icmpmibmap[i].name);
seq_puts(seq, " OutMsgs OutErrors");
- for (i = 0; icmpmibmap[i].name != NULL; i++)
+ for (i = 0; icmpmibmap[i].name; i++)
seq_printf(seq, " Out%s", icmpmibmap[i].name);
seq_printf(seq, "\nIcmp: %lu %lu %lu",
snmp_fold_field(net->mib.icmp_statistics, ICMP_MIB_INMSGS),
snmp_fold_field(net->mib.icmp_statistics, ICMP_MIB_INERRORS),
snmp_fold_field(net->mib.icmp_statistics, ICMP_MIB_CSUMERRORS));
- for (i = 0; icmpmibmap[i].name != NULL; i++)
+ for (i = 0; icmpmibmap[i].name; i++)
seq_printf(seq, " %lu",
atomic_long_read(ptr + icmpmibmap[i].index));
seq_printf(seq, " %lu %lu",
snmp_fold_field(net->mib.icmp_statistics, ICMP_MIB_OUTMSGS),
snmp_fold_field(net->mib.icmp_statistics, ICMP_MIB_OUTERRORS));
- for (i = 0; icmpmibmap[i].name != NULL; i++)
+ for (i = 0; icmpmibmap[i].name; i++)
seq_printf(seq, " %lu",
atomic_long_read(ptr + (icmpmibmap[i].index | 0x100)));
}
@@ -389,7 +389,7 @@ static int snmp_seq_show(struct seq_file *seq, void *v)
memset(buff64, 0, IPSTATS_MIB_MAX * sizeof(u64));
seq_puts(seq, "Ip: Forwarding DefaultTTL");
- for (i = 0; snmp4_ipstats_list[i].name != NULL; i++)
+ for (i = 0; snmp4_ipstats_list[i].name; i++)
seq_printf(seq, " %s", snmp4_ipstats_list[i].name);
seq_printf(seq, "\nIp: %d %d",
@@ -399,30 +399,30 @@ static int snmp_seq_show(struct seq_file *seq, void *v)
BUILD_BUG_ON(offsetof(struct ipstats_mib, mibs) != 0);
for_each_possible_cpu(c) {
- for (i = 0; snmp4_ipstats_list[i].name != NULL; i++)
+ for (i = 0; snmp4_ipstats_list[i].name; i++)
buff64[i] += snmp_get_cpu_field64(
net->mib.ip_statistics,
c, snmp4_ipstats_list[i].entry,
offsetof(struct ipstats_mib, syncp));
}
- for (i = 0; snmp4_ipstats_list[i].name != NULL; i++)
+ for (i = 0; snmp4_ipstats_list[i].name; i++)
seq_printf(seq, " %llu", buff64[i]);
icmp_put(seq); /* RFC 2011 compatibility */
icmpmsg_put(seq);
seq_puts(seq, "\nTcp:");
- for (i = 0; snmp4_tcp_list[i].name != NULL; i++)
+ for (i = 0; snmp4_tcp_list[i].name; i++)
seq_printf(seq, " %s", snmp4_tcp_list[i].name);
seq_puts(seq, "\nTcp:");
for_each_possible_cpu(c) {
- for (i = 0; snmp4_tcp_list[i].name != NULL; i++)
+ for (i = 0; snmp4_tcp_list[i].name; i++)
buff[i] += snmp_get_cpu_field(net->mib.tcp_statistics,
c, snmp4_tcp_list[i].entry);
}
- for (i = 0; snmp4_tcp_list[i].name != NULL; i++) {
+ for (i = 0; snmp4_tcp_list[i].name; i++) {
/* MaxConn field is signed, RFC 2012 */
if (snmp4_tcp_list[i].entry == TCP_MIB_MAXCONN)
seq_printf(seq, " %ld", buff[i]);
@@ -433,23 +433,23 @@ static int snmp_seq_show(struct seq_file *seq, void *v)
memset(buff, 0, TCP_MIB_MAX * sizeof(unsigned long));
for_each_possible_cpu(c) {
- for (i = 0; snmp4_udp_list[i].name != NULL; i++)
+ for (i = 0; snmp4_udp_list[i].name; i++)
buff[i] += snmp_get_cpu_field(net->mib.udp_statistics,
c, snmp4_udp_list[i].entry);
}
seq_puts(seq, "\nUdp:");
- for (i = 0; snmp4_udp_list[i].name != NULL; i++)
+ for (i = 0; snmp4_udp_list[i].name; i++)
seq_printf(seq, " %s", snmp4_udp_list[i].name);
seq_puts(seq, "\nUdp:");
- for (i = 0; snmp4_udp_list[i].name != NULL; i++)
+ for (i = 0; snmp4_udp_list[i].name; i++)
seq_printf(seq, " %lu", buff[i]);
/* the UDP and UDP-Lite MIBs are the same */
seq_puts(seq, "\nUdpLite:");
- for (i = 0; snmp4_udp_list[i].name != NULL; i++)
+ for (i = 0; snmp4_udp_list[i].name; i++)
seq_printf(seq, " %s", snmp4_udp_list[i].name);
seq_puts(seq, "\nUdpLite:");
- for (i = 0; snmp4_udp_list[i].name != NULL; i++)
+ for (i = 0; snmp4_udp_list[i].name; i++)
seq_printf(seq, " %lu", buff[i]);
seq_putc(seq, '\n');
@@ -485,29 +485,29 @@ static int netstat_seq_show(struct seq_file *seq, void *v)
memset(buff64, 0, sizeof(u64) * IPSTATS_MIB_MAX);
seq_puts(seq, "TcpExt:");
- for (i = 0; snmp4_net_list[i].name != NULL; i++)
+ for (i = 0; snmp4_net_list[i].name; i++)
seq_printf(seq, " %s", snmp4_net_list[i].name);
seq_puts(seq, "\nTcpExt:");
for_each_possible_cpu(c)
- for (i = 0; snmp4_net_list[i].name != NULL; i++)
+ for (i = 0; snmp4_net_list[i].name; i++)
buff[i] += snmp_get_cpu_field(net->mib.net_statistics,
c, snmp4_net_list[i].entry);
- for (i = 0; snmp4_net_list[i].name != NULL; i++)
+ for (i = 0; snmp4_net_list[i].name; i++)
seq_printf(seq, " %lu", buff[i]);
seq_puts(seq, "\nIpExt:");
- for (i = 0; snmp4_ipextstats_list[i].name != NULL; i++)
+ for (i = 0; snmp4_ipextstats_list[i].name; i++)
seq_printf(seq, " %s", snmp4_ipextstats_list[i].name);
seq_puts(seq, "\nIpExt:");
for_each_possible_cpu(c)
- for (i = 0; snmp4_ipextstats_list[i].name != NULL; i++)
+ for (i = 0; snmp4_ipextstats_list[i].name; i++)
buff64[i] += snmp_get_cpu_field64(
net->mib.ip_statistics,
c, snmp4_ipextstats_list[i].entry,
offsetof(struct ipstats_mib, syncp));
- for (i = 0; snmp4_ipextstats_list[i].name != NULL; i++)
+ for (i = 0; snmp4_ipextstats_list[i].name; i++)
seq_printf(seq, " %llu", buff64[i]);
seq_putc(seq, '\n');
diff --git a/net/sctp/proc.c b/net/sctp/proc.c
index 085fb95..816a5e8 100644
--- a/net/sctp/proc.c
+++ b/net/sctp/proc.c
@@ -80,11 +80,11 @@ static int sctp_snmp_seq_show(struct seq_file *seq, void *v)
memset(buff, 0, sizeof(unsigned long) * SCTP_MIB_MAX);
for_each_possible_cpu(c)
- for (i = 0; sctp_snmp_list[i].name != NULL; i++)
+ for (i = 0; sctp_snmp_list[i].name; i++)
buff[i] += snmp_get_cpu_field(
net->sctp.sctp_statistics,
c, sctp_snmp_list[i].entry);
- for (i = 0; sctp_snmp_list[i].name != NULL; i++)
+ for (i = 0; sctp_snmp_list[i].name; i++)
seq_printf(seq, "%-32s\t%ld\n", sctp_snmp_list[i].name,
buff[i]);
diff --git a/net/xfrm/xfrm_proc.c b/net/xfrm/xfrm_proc.c
index c9df546..2f1da2d 100644
--- a/net/xfrm/xfrm_proc.c
+++ b/net/xfrm/xfrm_proc.c
@@ -57,11 +57,11 @@ static int xfrm_statistics_seq_show(struct seq_file *seq, void *v)
memset(buff, 0, sizeof(unsigned long) * LINUX_MIB_XFRMMAX);
for_each_possible_cpu(c)
- for (i = 0; xfrm_mib_list[i].name != NULL; i++)
+ for (i = 0; xfrm_mib_list[i].name; i++)
buff[i] += snmp_get_cpu_field(
net->mib.xfrm_statistics,
c, xfrm_mib_list[i].entry);
- for (i = 0; xfrm_mib_list[i].name != NULL; i++)
+ for (i = 0; xfrm_mib_list[i].name; i++)
seq_printf(seq, "%-24s\t%lu\n", xfrm_mib_list[i].name,
buff[i]);
--
1.8.3.1
^ permalink raw reply related [flat|nested] 9+ messages in thread