• David Arinzon's avatar
    net: ena: Use bitmask to indicate packet redirection · 59811faa
    David Arinzon authored
    Redirecting packets with XDP Redirect is done in two phases:
    1. A packet is passed by the driver to the kernel using
       xdp_do_redirect().
    2. After finishing polling for new packets the driver lets the kernel
       know that it can now process the redirected packet using
       xdp_do_flush_map().
       The packets' redirection is handled in the napi context of the
       queue that called xdp_do_redirect()
    
    To avoid calling xdp_do_flush_map() each time the driver first checks
    whether any packets were redirected, using
    	xdp_flags |= xdp_verdict;
    and
    	if (xdp_flags & XDP_REDIRECT)
    	    xdp_do_flush_map()
    
    essentially treating XDP instructions as a bitmask, which isn't the case:
        enum xdp_action {
    	    XDP_ABORTED = 0,
    	    XDP_DROP,
    	    XDP_PASS,
    	    XDP_TX,
    	    XDP_REDIRECT,
        };
    
    Given the current possible values of xdp_action, the current design
    doesn't have a bug (since XDP_REDIRECT = 100b), but it is still
    flawed.
    
    This patch makes the driver use a bitmask instead, to avoid future
    issues.
    
    Fixes: a318c70a ("net: ena: introduce XDP redirect implementation")
    Signed-off-by: default avatarShay Agroskin <shayagr@amazon.com>
    Signed-off-by: default avatarDavid Arinzon <darinzon@amazon.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    59811faa
ena_netdev.h 10.6 KB