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>
This commit is contained in:
parent
931e93bdf8
commit
e6f50edfef
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue