On Thu, 2016-08-25 at 15:58 +0200, Paolo Abeni wrote: > Currently in process_backlog(), the process_queue dequeuing is > performed with local IRQ disabled, to protect against > flush_backlog(), which runs in hard IRQ context.
Acked-by: Eric Dumazet <eduma...@google.com> > @@ -6707,7 +6735,7 @@ static void rollback_registered_many(struct list_head > *head) > unlist_netdevice(dev); > > dev->reg_state = NETREG_UNREGISTERING; > - on_each_cpu(flush_backlog, dev, 1); > + flush_all_backlogs(dev); > } > > synchronize_net(); In a future patch, we could change this so that we kick flush_all_backlogs() once for all devices, instead of one device at a time. We would not pass @dev anymore as a parameter and simply look at skb->dev->reg_state to decide to remove packets from queues in flush_backlog() Batching matters for some guys using hundred of devices and suddenly removing them all in one go. Thanks.