aboutsummaryrefslogtreecommitdiffstats
path: root/net/packet/af_packet.c
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2009-10-16 00:02:20 -0400
committerDavid S. Miller <davem@davemloft.net>2009-10-20 04:02:06 -0400
commit94b059520d6c0cea852dc9a3e9033c6f123df7c1 (patch)
tree591e57d7d41edf0469695a35c36cfeb4d2b265b3 /net/packet/af_packet.c
parent7b6856a0296a8f187bb88ba31fa83a08abba7966 (diff)
af_packet: Avoid cache line dirtying
While doing multiple captures, I found af_packet was dirtying cache line containing its prot_hook. This slow down machines where several cpus are necessary to handle capture traffic, as each prot_hook is traversed for each packet coming in or out the host. This patches moves "struct packet_type prot_hook" to the end of packet_sock, and uses a ____cacheline_aligned_in_smp to make sure this remains shared by all cpus. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/packet/af_packet.c')
-rw-r--r--net/packet/af_packet.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index bf3a2954cd4d..dac775e0bc72 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -188,7 +188,6 @@ struct packet_sock {
188 struct packet_ring_buffer tx_ring; 188 struct packet_ring_buffer tx_ring;
189 int copy_thresh; 189 int copy_thresh;
190#endif 190#endif
191 struct packet_type prot_hook;
192 spinlock_t bind_lock; 191 spinlock_t bind_lock;
193 struct mutex pg_vec_lock; 192 struct mutex pg_vec_lock;
194 unsigned int running:1, /* prot_hook is attached*/ 193 unsigned int running:1, /* prot_hook is attached*/
@@ -204,6 +203,7 @@ struct packet_sock {
204 unsigned int tp_reserve; 203 unsigned int tp_reserve;
205 unsigned int tp_loss:1; 204 unsigned int tp_loss:1;
206#endif 205#endif
206 struct packet_type prot_hook ____cacheline_aligned_in_smp;
207}; 207};
208 208
209struct packet_skb_cb { 209struct packet_skb_cb {