• Magnus Karlsson's avatar
    i40e: fix broken XDP support · ae4393df
    Magnus Karlsson authored
    Commit 12738ac4 ("i40e: Fix sparse errors in i40e_txrx.c") broke
    XDP support in the i40e driver. That commit was fixing a sparse error
    in the code by introducing a new variable xdp_res instead of
    overloading this into the skb pointer. The problem is that the code
    later uses the skb pointer in if statements and these where not
    extended to also test for the new xdp_res variable. Fix this by adding
    the correct tests for xdp_res in these places.
    
    The skb pointer was used to store the result of the XDP program by
    overloading the results in the error pointer
    ERR_PTR(-result). Therefore, the allocation failure test that used to
    only test for !skb now need to be extended to also consider !xdp_res.
    
    i40e_cleanup_headers() had a check that based on the skb value being
    an error pointer, i.e. a result from the XDP program != XDP_PASS, and
    if so start to process a new packet immediately, instead of populating
    skb fields and sending the skb to the stack. This check is not needed
    anymore, since we have added an explicit test for xdp_res being set
    and if so just do continue to pick the next packet from the NIC.
    
    Fixes: 12738ac4
    
     ("i40e: Fix sparse errors in i40e_txrx.c")
    Acked-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
    Tested-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
    Reported-by: default avatarJesper Dangaard Brouer <brouer@redhat.com>
    Reviewed-by: default avatarMaciej Fijalkowski <maciej.fijalkowski@intel.com>
    Signed-off-by: default avatarMagnus Karlsson <magnus.karlsson@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    ae4393df
i40e_txrx.c 107 KB