net: optimize ____napi_schedule() to avoid extra NET_RX_SOFTIRQ
authorEric Dumazet <edumazet@google.com>
Tue, 28 Mar 2023 23:50:21 +0000 (23:50 +0000)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 30 Mar 2023 11:40:00 +0000 (13:40 +0200)
commit8b43fd3d1d7d88293eb15e92090826e6b7cc13e4
tree955e0aa2919e1b114b1727e7fddd538c73b3c205
parent821eba962d95806beb0440742c4062a9da8a386b
net: optimize ____napi_schedule() to avoid extra NET_RX_SOFTIRQ

____napi_schedule() adds a napi into current cpu softnet_data poll_list,
then raises NET_RX_SOFTIRQ to make sure net_rx_action() will process it.

Idea of this patch is to not raise NET_RX_SOFTIRQ when being called indirectly
from net_rx_action(), because we can process poll_list from this point,
without going to full softirq loop.

This needs a change in net_rx_action() to make sure we restart
its main loop if sd->poll_list was updated without NET_RX_SOFTIRQ
being raised.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Jason Xing <kernelxing@tencent.com>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Tested-by: Jason Xing <kerneljasonxing@gmail.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net/core/dev.c