net: try to avoid unneeded backlog flush
authorPaolo Abeni <pabeni@redhat.com>
Thu, 10 Sep 2020 21:33:18 +0000 (23:33 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 14 Sep 2020 21:39:00 +0000 (14:39 -0700)
commit2de79ee27fdb52626ac4ac48ec6d8d52ba6f9047
treee5ab4d5630bb0de1ad741d616d17ef97882bfb9e
parent7b2d1b8d9d3e4e4d30217012357989ee498e789c
net: try to avoid unneeded backlog flush

flush_all_backlogs() may cause deadlock on systems
running processes with FIFO scheduling policy.

The above is critical in -RT scenarios, where user-space
specifically ensure no network activity is scheduled on
the CPU running the mentioned FIFO process, but still get
stuck.

This commit tries to address the problem checking the
backlog status on the remote CPUs before scheduling the
flush operation. If the backlog is empty, we can skip it.

v1 -> v2:
 - explicitly clear flushed cpu mask - Eric

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/dev.c