diff options
author | Eric Dumazet <edumazet@google.com> | 2012-08-07 10:55:45 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-08-08 16:00:28 -0700 |
commit | a37e6e344910a43b9ebc2bbf29a029f5ea942598 (patch) | |
tree | 028fe1af3e85510fa7c341bfe3dadd099189156b /include/net/dst.h | |
parent | 0c03eca3d995e73d691edea8c787e25929ec156d (diff) | |
download | lwn-a37e6e344910a43b9ebc2bbf29a029f5ea942598.tar.gz lwn-a37e6e344910a43b9ebc2bbf29a029f5ea942598.zip |
net: force dst_default_metrics to const section
While investigating on network performance problems, I found this little
gem :
$ nm -v vmlinux | grep -1 dst_default_metrics
ffffffff82736540 b busy.46605
ffffffff82736560 B dst_default_metrics
ffffffff82736598 b dst_busy_list
Apparently, declaring a const array without initializer put it in
(writeable) bss section, in middle of possibly often dirtied cache
lines.
Since we really want dst_default_metrics be const to avoid any possible
false sharing and catch any buggy writes, I force a null initializer.
ffffffff818a4c20 R dst_default_metrics
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Ben Hutchings <bhutchings@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/dst.h')
-rw-r--r-- | include/net/dst.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/include/net/dst.h b/include/net/dst.h index baf597890064..621e3513ef5e 100644 --- a/include/net/dst.h +++ b/include/net/dst.h @@ -110,7 +110,7 @@ struct dst_entry { }; extern u32 *dst_cow_metrics_generic(struct dst_entry *dst, unsigned long old); -extern const u32 dst_default_metrics[RTAX_MAX]; +extern const u32 dst_default_metrics[]; #define DST_METRICS_READ_ONLY 0x1UL #define __DST_METRICS_PTR(Y) \ |