diff options
author | Eric Dumazet <edumazet@google.com> | 2023-04-21 11:43:55 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2023-04-23 14:35:07 +0200 |
commit | e6f50edfef046cf8ad541b4d5972bf38fdcdec39 (patch) | |
tree | e0d491c1503cb5e44e348c92ff462d4968419a64 /net | |
parent | net: do not provide hard irq safety for sd->defer_lock (diff) | |
download | linux-e6f50edfef046cf8ad541b4d5972bf38fdcdec39.tar.xz linux-e6f50edfef046cf8ad541b4d5972bf38fdcdec39.zip |
net: move skb_defer_free_flush() up
We plan using skb_defer_free_flush() from napi_threaded_poll()
in the following patch.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/core/dev.c | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index d15568f5a44f..81ded215731b 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -6598,6 +6598,27 @@ static int napi_thread_wait(struct napi_struct *napi) return -1; } +static void skb_defer_free_flush(struct softnet_data *sd) +{ + struct sk_buff *skb, *next; + + /* Paired with WRITE_ONCE() in skb_attempt_defer_free() */ + if (!READ_ONCE(sd->defer_list)) + return; + + spin_lock(&sd->defer_lock); + skb = sd->defer_list; + sd->defer_list = NULL; + sd->defer_count = 0; + spin_unlock(&sd->defer_lock); + + while (skb != NULL) { + next = skb->next; + napi_consume_skb(skb, 1); + skb = next; + } +} + static int napi_threaded_poll(void *data) { struct napi_struct *napi = data; @@ -6624,27 +6645,6 @@ static int napi_threaded_poll(void *data) return 0; } -static void skb_defer_free_flush(struct softnet_data *sd) -{ - struct sk_buff *skb, *next; - - /* Paired with WRITE_ONCE() in skb_attempt_defer_free() */ - if (!READ_ONCE(sd->defer_list)) - return; - - spin_lock(&sd->defer_lock); - skb = sd->defer_list; - sd->defer_list = NULL; - sd->defer_count = 0; - spin_unlock(&sd->defer_lock); - - while (skb != NULL) { - next = skb->next; - napi_consume_skb(skb, 1); - skb = next; - } -} - static __latent_entropy void net_rx_action(struct softirq_action *h) { struct softnet_data *sd = this_cpu_ptr(&softnet_data); |