diff options
author | Eric Dumazet | 2021-10-25 09:48:18 -0700 |
---|---|---|
committer | Jakub Kicinski | 2021-10-25 18:02:12 -0700 |
commit | 2b13af8ade38ef3afe48d60c518c64010cfa8b0d (patch) | |
tree | 384bc13ff6108731032d556b0859d5549fc2e842 | |
parent | ef57c1610dd8fba5031bf71e0db73356190de151 (diff) |
net: avoid dirtying sk->sk_napi_id
sk_napi_id is located in a cache line that can be kept read mostly.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
-rw-r--r-- | include/net/busy_poll.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/include/net/busy_poll.h b/include/net/busy_poll.h index 40296ed976a9..4202c609bb0b 100644 --- a/include/net/busy_poll.h +++ b/include/net/busy_poll.h @@ -130,7 +130,8 @@ static inline void skb_mark_napi_id(struct sk_buff *skb, static inline void sk_mark_napi_id(struct sock *sk, const struct sk_buff *skb) { #ifdef CONFIG_NET_RX_BUSY_POLL - WRITE_ONCE(sk->sk_napi_id, skb->napi_id); + if (unlikely(READ_ONCE(sk->sk_napi_id) != skb->napi_id)) + WRITE_ONCE(sk->sk_napi_id, skb->napi_id); #endif sk_rx_queue_set(sk, skb); } |