linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next] net: use in_softirq() to indicate the NAPI context in napi_consume_skb()
@ 2020-09-21  2:04 Yunsheng Lin
  2020-09-21  7:19 ` Eric Dumazet
  0 siblings, 1 reply; 6+ messages in thread
From: Yunsheng Lin @ 2020-09-21  2:04 UTC (permalink / raw)
  To: davem, kuba, linmiaohe, martin.varghese, fw, edumazet, dcaratti,
	steffen.klassert, pabeni, kyk.segfault, saeed
  Cc: netdev, linux-kernel, linuxarm

When napi_consume_skb() is called in the tx desc cleaning process,
it is usually in the softirq context(BH disabled, or are processing
softirqs), but it may also be in the task context, such as in the
netpoll or loopback selftest process.

Currently napi_consume_skb() uses non-zero budget to indicate the
NAPI context, the driver writer may provide the wrong budget when
tx desc cleaning function is reused for both NAPI and non-NAPI
context, see [1].

So this patch uses in_softirq() to indicate the NAPI context, which
doesn't necessarily mean in NAPI context, but it shouldn't care if
NAPI context or not as long as it runs in softirq context or with BH
disabled, then _kfree_skb_defer() will push the skb to the particular
cpu' napi_alloc_cache atomically.

[1] https://lkml.org/lkml/2020/9/15/38

Signed-off-by: Yunsheng Lin <linyunsheng@huawei.com>
---
note that budget parameter is not removed in this patch because it
involves many driver changes, we can remove it in separate patch if
this patch is accepted.
---
 net/core/skbuff.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index e077447..03d0d28 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -895,8 +895,10 @@ void __kfree_skb_defer(struct sk_buff *skb)
 
 void napi_consume_skb(struct sk_buff *skb, int budget)
 {
-	/* Zero budget indicate non-NAPI context called us, like netpoll */
-	if (unlikely(!budget)) {
+	/* called by non-softirq context, which usually means non-NAPI
+	 * context, like netpoll.
+	 */
+	if (unlikely(!in_softirq())) {
 		dev_consume_skb_any(skb);
 		return;
 	}
-- 
2.8.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-09-21  9:09 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-21  2:04 [PATCH net-next] net: use in_softirq() to indicate the NAPI context in napi_consume_skb() Yunsheng Lin
2020-09-21  7:19 ` Eric Dumazet
2020-09-21  8:09   ` Yunsheng Lin
2020-09-21  8:17     ` Eric Dumazet
2020-09-21  8:40       ` Yunsheng Lin
2020-09-21  9:09         ` Eric Dumazet

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).