• Joshua Hay's avatar
    idpf: add TX splitq napi poll support · c2d548ca
    Joshua Hay authored
    Add support to handle the interrupts for the TX completion queue and
    process the various completion types.
    
    In the flow scheduling mode, the driver processes primarily buffer
    completions as well as descriptor completions occasionally. This mode
    supports out of order TX completions. To do so, HW generates one buffer
    completion per packet. Each of those completions contains the unique tag
    provided during the TX encoding which is used to locate the packet either
    on the TX buffer ring or in a hash table. The hash table is used to track
    TX buffer information so the descriptor(s) for a given packet can be
    reused while the driver is still waiting on the buffer completion(s).
    
    Packets end up in the hash table in one of 2 ways: 1) a packet was
    stashed during descriptor completion cleaning, or 2) because an out of
    order buffer completion was processed. A descriptor completion arrives
    only every so often and is primarily used to guarantee the TX descriptor
    ring can be reused without having to wait on the individual buffer
    completions. E.g. a descriptor completion for N+16 guarantees HW read all
    of the descriptors for packets N through N+15, therefore all of the
    buffers for packets N through N+15 are stashed into the hash table and the
    descriptors can be reused for more TX packets. Similarly, a packet can be
    stashed in the hash table because an out an order buffer completion was
    processed. E.g. processing a buffer completion for packet N+3 implies that
    HW read all of the descriptors for packets N through N+3 and they can be
    reused. However, the HW did not do the DMA yet. The buffers for packets N
    through N+2 cannot be freed, so they are stashed in the hash table.
    In either case, the buffer completions will eventually be processed for
    all of the stashed packets, and all of the buffers will be cleaned from
    the hash table.
    
    In queue based scheduling mode, the driver processes primarily descriptor
    completions and cleans the TX ring the conventional way.
    
    Finally, the driver triggers a TX queue drain after sending the disable
    queues virtchnl message. When the HW completes the queue draining, it
    sends the driver a queue marker packet completion. The driver determines
    when all TX queues have been drained and proceeds with the disable flow.
    
    With this, the driver can send TX packets and clean up the resources
    properly.
    Signed-off-by: default avatarJoshua Hay <joshua.a.hay@intel.com>
    Co-developed-by: default avatarAlan Brady <alan.brady@intel.com>
    Signed-off-by: default avatarAlan Brady <alan.brady@intel.com>
    Co-developed-by: default avatarMadhu Chittim <madhu.chittim@intel.com>
    Signed-off-by: default avatarMadhu Chittim <madhu.chittim@intel.com>
    Co-developed-by: default avatarPhani Burra <phani.r.burra@intel.com>
    Signed-off-by: default avatarPhani Burra <phani.r.burra@intel.com>
    Reviewed-by: default avatarSridhar Samudrala <sridhar.samudrala@intel.com>
    Reviewed-by: default avatarWillem de Bruijn <willemb@google.com>
    Co-developed-by: default avatarPavan Kumar Linga <pavan.kumar.linga@intel.com>
    Signed-off-by: default avatarPavan Kumar Linga <pavan.kumar.linga@intel.com>
    Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
    c2d548ca
idpf_txrx.c 91.2 KB