• Herbert Xu's avatar
    macvlan: Move broadcasts into a work queue · 412ca155
    Herbert Xu authored
    Currently broadcasts are handled in network RX context, where
    the packets are sent through netif_rx.  This means that the number
    of macvlans will be constrained by the capacity of netif_rx.
    
    For example, setting up 4096 macvlans practically causes all
    broadcast packets to be dropped as the default netif_rx queue
    size simply can't handle 4096 skbs being stuffed into it all
    at once.
    
    Fundamentally, we need to ensure that the amount of work handled
    in each netif_rx backlog run is constrained.  As broadcasts are
    anything but constrained, it either needs to be limited per run
    or moved to process context.
    
    This patch picks the second option and moves all broadcast handling
    bar the trivial case of packets going to a single interface into
    a work queue.  Obviously there also needs to be a limit on how
    many broadcast packets we postpone in this way.  I've arbitrarily
    chosen tx_queue_len of the master device as the limit (act_mirred
    also happens to use this parameter in a similar way).
    
    In order to ensure we don't exceed the backlog queue we will use
    netif_rx_ni instead of netif_rx for broadcast packets.
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    
    Thanks,
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    412ca155
macvlan.c 28.4 KB