• Björn Töpel's avatar
    i40e, xsk: clear the status bits for the next_to_use descriptor · 64050b5b
    Björn Töpel authored
    On the Rx side, the next_to_use index points to the next item in the
    HW ring to be refilled/allocated, and next_to_clean points to the next
    item to potentially be processed.
    
    When the HW Rx ring is fully refilled, i.e. no packets has been
    processed, the next_to_use will be next_to_clean - 1. When the ring is
    fully processed next_to_clean will be equal to next_to_use. The latter
    case is where a bug is triggered.
    
    If the next_to_use bits are not cleared, and the "fully processed"
    state is entered, a stale descriptor can be processed.
    
    The skb-path correctly clear the status bit for the next_to_use
    descriptor, but the AF_XDP zero-copy path did not do that.
    
    This change adds the status bits clearing of the next_to_use
    descriptor.
    
    Fixes: 3b4f0b66 ("i40e, xsk: Migrate to new MEM_TYPE_XSK_BUFF_POOL")
    Signed-off-by: default avatarBjörn Töpel <bjorn.topel@intel.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    64050b5b
i40e_xsk.c 16 KB