[NET]: Reorder fields of struct dst_entry

This last patch (but not least :) ) finally moves the next pointer at
the end of struct dst_entry. This permits to perform route cache
lookups with a minimal cost of one cache line per entry, instead of
two.

Both 32bits and 64bits platforms benefit from this new layout.

Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Eric Dumazet 2007-02-09 16:26:55 -08:00 коммит произвёл David S. Miller
Родитель 0c195c3fc4
Коммит 1e19e02ca0
1 изменённых файлов: 10 добавлений и 10 удалений

Просмотреть файл

@ -37,14 +37,7 @@ struct sk_buff;
struct dst_entry struct dst_entry
{ {
union { struct rcu_head rcu_head;
struct dst_entry *next;
struct rtable *rt_next;
struct rt6_info *rt6_next;
struct dn_route *dn_next;
};
atomic_t __refcnt; /* client references */
int __use;
struct dst_entry *child; struct dst_entry *child;
struct net_device *dev; struct net_device *dev;
short error; short error;
@ -55,7 +48,6 @@ struct dst_entry
#define DST_NOPOLICY 4 #define DST_NOPOLICY 4
#define DST_NOHASH 8 #define DST_NOHASH 8
#define DST_BALANCED 0x10 #define DST_BALANCED 0x10
unsigned long lastuse;
unsigned long expires; unsigned long expires;
unsigned short header_len; /* more space at head required */ unsigned short header_len; /* more space at head required */
@ -80,8 +72,16 @@ struct dst_entry
#endif #endif
struct dst_ops *ops; struct dst_ops *ops;
struct rcu_head rcu_head;
unsigned long lastuse;
atomic_t __refcnt; /* client references */
int __use;
union {
struct dst_entry *next;
struct rtable *rt_next;
struct rt6_info *rt6_next;
struct dn_route *dn_next;
};
char info[0]; char info[0];
}; };