Commit 0868e253 authored by Jiri Benc's avatar Jiri Benc Committed by David S. Miller

route: move lwtunnel state to a single place

Commit 751a587a ("route: fix breakage after moving lwtunnel state")
moved lwtstate to the end of dst_entry for 32bit archs. This makes it share
the cacheline with __refcnt which had an unkown effect on performance. For
this reason, the pointer was kept in place for 64bit archs.

However, later performance measurements showed this is of no concern. It
turns out that every performance sensitive path that accesses lwtstate
accesses also struct rtable or struct rt6_info which share the same cache
line.

Thus, to get rid of a few #ifdefs, move the field to the end of the struct
also for 64bit.
Signed-off-by: default avatarJiri Benc <jbenc@redhat.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6a025a50
...@@ -85,12 +85,11 @@ struct dst_entry { ...@@ -85,12 +85,11 @@ struct dst_entry {
#endif #endif
#ifdef CONFIG_64BIT #ifdef CONFIG_64BIT
struct lwtunnel_state *lwtstate;
/* /*
* Align __refcnt to a 64 bytes alignment * Align __refcnt to a 64 bytes alignment
* (L1_CACHE_SIZE would be too much) * (L1_CACHE_SIZE would be too much)
*/ */
long __pad_to_align_refcnt[1]; long __pad_to_align_refcnt[2];
#endif #endif
/* /*
* __refcnt wants to be on a different cache line from * __refcnt wants to be on a different cache line from
...@@ -99,9 +98,7 @@ struct dst_entry { ...@@ -99,9 +98,7 @@ struct dst_entry {
atomic_t __refcnt; /* client references */ atomic_t __refcnt; /* client references */
int __use; int __use;
unsigned long lastuse; unsigned long lastuse;
#ifndef CONFIG_64BIT
struct lwtunnel_state *lwtstate; struct lwtunnel_state *lwtstate;
#endif
union { union {
struct dst_entry *next; struct dst_entry *next;
struct rtable __rcu *rt_next; struct rtable __rcu *rt_next;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment