macvlan: Skip broadcast queue if multicast with single receiver
authorHerbert Xu <herbert@gondor.apana.org.au>
Tue, 28 Mar 2023 02:57:56 +0000 (10:57 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 29 Mar 2023 08:03:32 +0000 (09:03 +0100)
commitd45276e75e90f1b67eb689fb3b4c556963796351
treeb2a51115a9d426c5f363e5e9c3b7c62ac32a3342
parent6fc5f5bcc0c34138d955a51642f1c4fbb353f0af
macvlan: Skip broadcast queue if multicast with single receiver

As it stands all broadcast and multicast packets are queued and
processed in a work queue.  This is so that we don't overwhelm
the receive softirq path by generating thousands of packets or
more (see commit 412ca1550cbe "macvlan: Move broadcasts into a
work queue").

As such all multicast packets will be delayed, even if they will
be received by a single macvlan device.  As using a workqueue
is not free in terms of latency, we should avoid this where possible.

This patch adds a new filter to determine which addresses should
be delayed and which ones won't.  This is done using a crude
counter of how many times an address has been added to the macvlan
port (ha->synced).  For now if an address has been added more than
once, then it will be considered to be broadcast.  This could be
tuned further by making this threshold configurable.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/macvlan.c