• Alexander Duyck's avatar
    i40e/i40evf: Rewrite logic for 8 descriptor per packet check · 2d37490b
    Alexander Duyck authored
    This patch is meant to rewrite the logic for how we determine if we can
    transmit the frame or if it needs to be linearized.
    
    The previous code for this function was using a mix of division and modulus
    division as a part of computing if we need to take the slow path.  Instead
    I have replaced this by simply working with a sliding window which will
    tell us if the frame would be capable of causing a single packet to span
    several descriptors.
    
    The logic for the scan is fairly simple.  If any given group of 6 fragments
    is less than gso_size - 1 then it is possible for us to have one byte
    coming out of the first fragment, 6 fragments, and one or more bytes coming
    out of the last fragment.  This gives us a total of 8 fragments
    which exceeds what we can allow so we send such frames to be linearized.
    
    Arguably the use of modulus might be more exact as the approach I propose
    may generate some false positives.  However the likelihood of us taking much
    of a hit for those false positives is fairly low, and I would rather not
    add more overhead in the case where we are receiving a frame composed of 4K
    pages.
    Signed-off-by: default avatarAlexander Duyck <aduyck@mirantis.com>
    Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    2d37490b
i40e_fcoe.c 44.8 KB