bnxt: use the NAPI skb allocation cache
authorJakub Kicinski <kuba@kernel.org>
Tue, 22 Aug 2023 21:51:42 +0000 (14:51 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 23 Aug 2023 10:45:54 +0000 (11:45 +0100)
commite3b3a87967cef1fa157d93fd726960b1b812401d
treeac93b81fe6faa56646534c5570257a214021112d
parent2e0c8ee2b56ffaf4ceac934d75f131a9c9becf72
bnxt: use the NAPI skb allocation cache

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: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Michael Chan <michael.chan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnxt/bnxt.c