• Michael Chan's avatar
    bnxt_en: Fix TX timeout when TX ring size is set to the smallest · 5bed8b07
    Michael Chan authored
    The smallest TX ring size we support must fit a TX SKB with MAX_SKB_FRAGS
    + 1.  Because the first TX BD for a packet is always a long TX BD, we
    need an extra TX BD to fit this packet.  Define BNXT_MIN_TX_DESC_CNT with
    this value to make this more clear.  The current code uses a minimum
    that is off by 1.  Fix it using this constant.
    
    The tx_wake_thresh to determine when to wake up the TX queue is half the
    ring size but we must have at least BNXT_MIN_TX_DESC_CNT for the next
    packet which may have maximum fragments.  So the comparison of the
    available TX BDs with tx_wake_thresh should be >= instead of > in the
    current code.  Otherwise, at the smallest ring size, we will never wake
    up the TX queue and will cause TX timeout.
    
    Fixes: c0c050c5 ("bnxt_en: New Broadcom ethernet driver.")
    Reviewed-by: default avatarPavan Chebbi <pavan.chebbi@broadcom.com>
    Signed-off-by: default avatarMichael Chan <michael.chan@broadocm.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    5bed8b07
bnxt.h 66.7 KB