]> git.baikalelectronics.ru Git - kernel.git/commit
net: flush the softnet backlog in process context
authorPaolo Abeni <pabeni@redhat.com>
Thu, 25 Aug 2016 13:58:44 +0000 (15:58 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 26 Aug 2016 18:51:07 +0000 (11:51 -0700)
commitba461fc01c7b4a1e086060b07b3a1a7ad94120de
tree56b9f438ca15357f29ce2c86137877c57b79010c
parent1a11d942fc68285bddb2f5c6b127f7a0d1e3342d
net: flush the softnet backlog in process context

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.

This patch moves the flush operation to a work queue and runs the
callback with bottom half disabled to protect the process_queue
against dequeuing.
Since process_queue is now always manipulated in bottom half context,
the irq disable/enable pair around the dequeue operation are removed.

To keep the flush time as low as possible, the flush
works are scheduled on all online cpu simultaneously, using the
high priority work-queue and statically allocated, per cpu,
work structs.

Overall this change increases the time required to destroy a device
to improve slightly the packets reinjection performances.

Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/dev.c