diff options
Diffstat (limited to 'include/linux/netdevice.h')
-rw-r--r-- | include/linux/netdevice.h | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index c57088f575a3..6be767c76b37 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
@@ -193,13 +193,20 @@ struct hh_cache | |||
193 | { | 193 | { |
194 | struct hh_cache *hh_next; /* Next entry */ | 194 | struct hh_cache *hh_next; /* Next entry */ |
195 | atomic_t hh_refcnt; /* number of users */ | 195 | atomic_t hh_refcnt; /* number of users */ |
196 | __be16 hh_type; /* protocol identifier, f.e ETH_P_IP | 196 | /* |
197 | * We want hh_output, hh_len, hh_lock and hh_data be a in a separate | ||
198 | * cache line on SMP. | ||
199 | * They are mostly read, but hh_refcnt may be changed quite frequently, | ||
200 | * incurring cache line ping pongs. | ||
201 | */ | ||
202 | __be16 hh_type ____cacheline_aligned_in_smp; | ||
203 | /* protocol identifier, f.e ETH_P_IP | ||
197 | * NOTE: For VLANs, this will be the | 204 | * NOTE: For VLANs, this will be the |
198 | * encapuslated type. --BLG | 205 | * encapuslated type. --BLG |
199 | */ | 206 | */ |
200 | u16 hh_len; /* length of header */ | 207 | u16 hh_len; /* length of header */ |
201 | int (*hh_output)(struct sk_buff *skb); | 208 | int (*hh_output)(struct sk_buff *skb); |
202 | rwlock_t hh_lock; | 209 | seqlock_t hh_lock; |
203 | 210 | ||
204 | /* cached hardware header; allow for machine alignment needs. */ | 211 | /* cached hardware header; allow for machine alignment needs. */ |
205 | #define HH_DATA_MOD 16 | 212 | #define HH_DATA_MOD 16 |