• Michael Chan's avatar
    bnxt_en: Separate bnxt_{rx|tx}_ring_info structs from bnxt_napi struct. · b6ab4b01
    Michael Chan authored
    Currently, an rx and a tx ring are always paired with a completion ring.
    We want to restructure it so that it is possible to have a dedicated
    completion ring for tx or rx only.
    The bnxt hardware uses a completion ring for rx and tx events.  The driver
    has to process the completion ring entries sequentially for the rx and tx
    events.  Using a dedicated completion ring for rx only or tx only has these
    1. A burst of rx packets can cause delay in processing tx events if the
    completion ring is shared.  If tx queue is stopped by BQL, this can cause
    delay in re-starting the tx queue.
    2. A completion ring is sized according to the rx and tx ring size rounded
    up to the nearest power of 2.  When the completion ring is shared, it is
    sized by adding the rx and tx ring sizes and then rounded to the next power
    of 2, often with a lot of wasted space.
    3. Using dedicated completion ring, we can adjust the tx and rx coalescing
    parameters independently for rx and tx.
    The first step is to separate the rx and tx ring structures from the
    bnxt_napi struct.
    In this patch, an rx ring and a tx ring will point to the same bnxt_napi
    struct to share the same completion ring.  No change in ring assignment
    and mapping yet.
    Signed-off-by: default avatarMichael Chan <mchan@broadcom.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>