Call skb_defer_free_flush() immediately before invoking napi_skb_cache_get_bulk() in the XDP batch path. This ensures any deferred skb frees are processed so that the NAPI skb cache is refilled just in time for use. Keeping the cache warm helps reduce unnecessary IPIs during heavy transmit workloads. Signed-off-by: Jon Kohler --- drivers/net/tun.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/net/tun.c b/drivers/net/tun.c index b48a66b39e0a..7d7f1ddcb707 100644 --- a/drivers/net/tun.c +++ b/drivers/net/tun.c @@ -2589,6 +2589,12 @@ static int tun_sendmsg(struct socket *sock, struct msghdr *m, size_t total_len) rcu_read_lock(); bpf_net_ctx = bpf_net_ctx_set(&__bpf_net_ctx); + /* Attempt to flush deferred free list immediately + * prior to bulk get, which will help repopulate the local + * cache and help reduce the amount of IPIs a TX hot core + * will receive when the defer list grows high. + */ + skb_defer_free_flush(); num_skbs = napi_skb_cache_get_bulk(skbs, n); for (i = 0; i < num_skbs; i++) { -- 2.43.0