• Jakub Kicinski's avatar
    bnxt: use the NAPI skb allocation cache · e3b3a879
    Jakub Kicinski authored
    All callers of build_skb() (*) in bnxt are in NAPI context.
    The budget checking is somewhat convoluted because in the shared
    completion queue cases Rx packets are discarded by netpoll
    by forcing an error (E). But that happens before skb allocation.
    Only a call chain starting at __bnxt_poll_work() can lead to
    an skb allocation and it checks budget (b).
    
    * bnxt_rx_multi_page_skb
    * bnxt_rx_skb
      ` bp->rx_skb_func
      * bnxt_tpa_end
        ` bnxt_rx_pkt
          E bnxt_force_rx_discard
          E bnxt_poll_nitroa0
          b __bnxt_poll_work
    
    Use napi_build_skb() to take advantage of the skb cache.
    In iperf tests with HW-GRO enabled it barely makes a difference
    but in cases where HW-GRO is not as effective (or disabled) it
    can give even a >10% boost (20.7Gbps -> 23.1Gbps).
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    Reviewed-by: default avatarMichael Chan <michael.chan@broadcom.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    e3b3a879
bnxt.c 365 KB