bnxt: change receive ring space parameters
Modify ring header data split and jumbo parameters to account for the fact that the design for XDP multibuffer puts close to the first 4k of data in a page and the remaining portions of the packet go in the aggregation ring. v3: Simplified code around initial buffer size calculation Signed-off-by: Andy Gospodarek <gospo@broadcom.com> Signed-off-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
31b9998bf2
commit
3286123619
@ -56,6 +56,7 @@
|
||||
#include <linux/hwmon.h>
|
||||
#include <linux/hwmon-sysfs.h>
|
||||
#include <net/page_pool.h>
|
||||
#include <linux/align.h>
|
||||
|
||||
#include "bnxt_hsi.h"
|
||||
#include "bnxt.h"
|
||||
@ -1933,11 +1934,13 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
|
||||
}
|
||||
|
||||
if (agg_bufs) {
|
||||
skb = bnxt_rx_agg_pages_skb(bp, cpr, skb, cp_cons, agg_bufs, false);
|
||||
if (!skb) {
|
||||
cpr->sw_stats.rx.rx_oom_discards += 1;
|
||||
rc = -ENOMEM;
|
||||
goto next_rx;
|
||||
if (!xdp_active) {
|
||||
skb = bnxt_rx_agg_pages_skb(bp, cpr, skb, cp_cons, agg_bufs, false);
|
||||
if (!skb) {
|
||||
cpr->sw_stats.rx.rx_oom_discards += 1;
|
||||
rc = -ENOMEM;
|
||||
goto next_rx;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3854,7 +3857,7 @@ void bnxt_set_ring_params(struct bnxt *bp)
|
||||
/* 8 for CRC and VLAN */
|
||||
rx_size = SKB_DATA_ALIGN(bp->dev->mtu + ETH_HLEN + NET_IP_ALIGN + 8);
|
||||
|
||||
rx_space = rx_size + NET_SKB_PAD +
|
||||
rx_space = rx_size + ALIGN(max(NET_SKB_PAD, XDP_PACKET_HEADROOM), 8) +
|
||||
SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
|
||||
|
||||
bp->rx_copy_thresh = BNXT_RX_COPY_THRESH;
|
||||
@ -3895,9 +3898,15 @@ void bnxt_set_ring_params(struct bnxt *bp)
|
||||
}
|
||||
bp->rx_agg_ring_size = agg_ring_size;
|
||||
bp->rx_agg_ring_mask = (bp->rx_agg_nr_pages * RX_DESC_CNT) - 1;
|
||||
rx_size = SKB_DATA_ALIGN(BNXT_RX_COPY_THRESH + NET_IP_ALIGN);
|
||||
rx_space = rx_size + NET_SKB_PAD +
|
||||
SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
|
||||
|
||||
if (BNXT_RX_PAGE_MODE(bp)) {
|
||||
rx_space = BNXT_PAGE_MODE_BUF_SIZE;
|
||||
rx_size = BNXT_MAX_PAGE_MODE_MTU;
|
||||
} else {
|
||||
rx_size = SKB_DATA_ALIGN(BNXT_RX_COPY_THRESH + NET_IP_ALIGN);
|
||||
rx_space = rx_size + NET_SKB_PAD +
|
||||
SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
|
||||
}
|
||||
}
|
||||
|
||||
bp->rx_buf_use_size = rx_size;
|
||||
@ -5287,12 +5296,15 @@ static int bnxt_hwrm_vnic_set_hds(struct bnxt *bp, u16 vnic_id)
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
req->flags = cpu_to_le32(VNIC_PLCMODES_CFG_REQ_FLAGS_JUMBO_PLACEMENT |
|
||||
VNIC_PLCMODES_CFG_REQ_FLAGS_HDS_IPV4 |
|
||||
VNIC_PLCMODES_CFG_REQ_FLAGS_HDS_IPV6);
|
||||
req->enables =
|
||||
cpu_to_le32(VNIC_PLCMODES_CFG_REQ_ENABLES_JUMBO_THRESH_VALID |
|
||||
VNIC_PLCMODES_CFG_REQ_ENABLES_HDS_THRESHOLD_VALID);
|
||||
req->flags = cpu_to_le32(VNIC_PLCMODES_CFG_REQ_FLAGS_JUMBO_PLACEMENT);
|
||||
req->enables = cpu_to_le32(VNIC_PLCMODES_CFG_REQ_ENABLES_JUMBO_THRESH_VALID);
|
||||
|
||||
if (BNXT_RX_PAGE_MODE(bp) && !BNXT_RX_JUMBO_MODE(bp)) {
|
||||
req->flags |= cpu_to_le32(VNIC_PLCMODES_CFG_REQ_FLAGS_HDS_IPV4 |
|
||||
VNIC_PLCMODES_CFG_REQ_FLAGS_HDS_IPV6);
|
||||
req->enables |=
|
||||
cpu_to_le32(VNIC_PLCMODES_CFG_REQ_ENABLES_HDS_THRESHOLD_VALID);
|
||||
}
|
||||
/* thresholds not implemented in firmware yet */
|
||||
req->jumbo_thresh = cpu_to_le16(bp->rx_copy_thresh);
|
||||
req->hds_threshold = cpu_to_le16(bp->rx_copy_thresh);
|
||||
|
@ -1819,6 +1819,7 @@ struct bnxt {
|
||||
#define BNXT_SUPPORTS_TPA(bp) (!BNXT_CHIP_TYPE_NITRO_A0(bp) && \
|
||||
(!((bp)->flags & BNXT_FLAG_CHIP_P5) || \
|
||||
(bp)->max_tpa_v2) && !is_kdump_kernel())
|
||||
#define BNXT_RX_JUMBO_MODE(bp) ((bp)->flags & BNXT_FLAG_JUMBO)
|
||||
|
||||
#define BNXT_CHIP_SR2(bp) \
|
||||
((bp)->chip_num == CHIP_NUM_58818)
|
||||
|
Loading…
Reference in New Issue
Block a user