• Sebastian Andrzej Siewior's avatar
    net: Optimize xdp_do_flush() with bpf_net_context infos. · d839a731
    Sebastian Andrzej Siewior authored
    Every NIC driver utilizing XDP should invoke xdp_do_flush() after
    processing all packages. With the introduction of the bpf_net_context
    logic the flush lists (for dev, CPU-map and xsk) are lazy initialized
    only if used. However xdp_do_flush() tries to flush all three of them so
    all three lists are always initialized and the likely empty lists are
    "iterated".
    Without the usage of XDP but with CONFIG_DEBUG_NET the lists are also
    initialized due to xdp_do_check_flushed().
    
    Jakub suggest to utilize the hints in bpf_net_context and avoid invoking
    the flush function. This will also avoiding initializing the lists which
    are otherwise unused.
    
    Introduce bpf_net_ctx_get_all_used_flush_lists() to return the
    individual list if not-empty. Use the logic in xdp_do_flush() and
    xdp_do_check_flushed(). Remove the not needed .*_check_flush().
    Suggested-by: default avatarJakub Kicinski <kuba@kernel.org>
    Signed-off-by: default avatarSebastian Andrzej Siewior <bigeasy@linutronix.de>
    Reviewed-by: default avatarJakub Kicinski <kuba@kernel.org>
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    d839a731
devmap.c 30.1 KB