|
56 | 56 | #include <linux/hwmon.h>
|
57 | 57 | #include <linux/hwmon-sysfs.h>
|
58 | 58 | #include <net/page_pool.h>
|
| 59 | +#include <linux/align.h> |
59 | 60 |
|
60 | 61 | #include "bnxt_hsi.h"
|
61 | 62 | #include "bnxt.h"
|
@@ -1933,11 +1934,13 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr,
|
1933 | 1934 | }
|
1934 | 1935 |
|
1935 | 1936 | if (agg_bufs) {
|
1936 |
| - skb = bnxt_rx_agg_pages_skb(bp, cpr, skb, cp_cons, agg_bufs, false); |
1937 |
| - if (!skb) { |
1938 |
| - cpr->sw_stats.rx.rx_oom_discards += 1; |
1939 |
| - rc = -ENOMEM; |
1940 |
| - goto next_rx; |
| 1937 | + if (!xdp_active) { |
| 1938 | + skb = bnxt_rx_agg_pages_skb(bp, cpr, skb, cp_cons, agg_bufs, false); |
| 1939 | + if (!skb) { |
| 1940 | + cpr->sw_stats.rx.rx_oom_discards += 1; |
| 1941 | + rc = -ENOMEM; |
| 1942 | + goto next_rx; |
| 1943 | + } |
1941 | 1944 | }
|
1942 | 1945 | }
|
1943 | 1946 |
|
@@ -3854,7 +3857,7 @@ void bnxt_set_ring_params(struct bnxt *bp)
|
3854 | 3857 | /* 8 for CRC and VLAN */
|
3855 | 3858 | rx_size = SKB_DATA_ALIGN(bp->dev->mtu + ETH_HLEN + NET_IP_ALIGN + 8);
|
3856 | 3859 |
|
3857 |
| - rx_space = rx_size + NET_SKB_PAD + |
| 3860 | + rx_space = rx_size + ALIGN(max(NET_SKB_PAD, XDP_PACKET_HEADROOM), 8) + |
3858 | 3861 | SKB_DATA_ALIGN(sizeof(struct skb_shared_info));
|
3859 | 3862 |
|
3860 | 3863 | bp->rx_copy_thresh = BNXT_RX_COPY_THRESH;
|
@@ -3895,9 +3898,15 @@ void bnxt_set_ring_params(struct bnxt *bp)
|
3895 | 3898 | }
|
3896 | 3899 | bp->rx_agg_ring_size = agg_ring_size;
|
3897 | 3900 | bp->rx_agg_ring_mask = (bp->rx_agg_nr_pages * RX_DESC_CNT) - 1;
|
3898 |
| - rx_size = SKB_DATA_ALIGN(BNXT_RX_COPY_THRESH + NET_IP_ALIGN); |
3899 |
| - rx_space = rx_size + NET_SKB_PAD + |
3900 |
| - SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); |
| 3901 | + |
| 3902 | + if (BNXT_RX_PAGE_MODE(bp)) { |
| 3903 | + rx_space = BNXT_PAGE_MODE_BUF_SIZE; |
| 3904 | + rx_size = BNXT_MAX_PAGE_MODE_MTU; |
| 3905 | + } else { |
| 3906 | + rx_size = SKB_DATA_ALIGN(BNXT_RX_COPY_THRESH + NET_IP_ALIGN); |
| 3907 | + rx_space = rx_size + NET_SKB_PAD + |
| 3908 | + SKB_DATA_ALIGN(sizeof(struct skb_shared_info)); |
| 3909 | + } |
3901 | 3910 | }
|
3902 | 3911 |
|
3903 | 3912 | bp->rx_buf_use_size = rx_size;
|
@@ -5287,12 +5296,15 @@ static int bnxt_hwrm_vnic_set_hds(struct bnxt *bp, u16 vnic_id)
|
5287 | 5296 | if (rc)
|
5288 | 5297 | return rc;
|
5289 | 5298 |
|
5290 |
| - req->flags = cpu_to_le32(VNIC_PLCMODES_CFG_REQ_FLAGS_JUMBO_PLACEMENT | |
5291 |
| - VNIC_PLCMODES_CFG_REQ_FLAGS_HDS_IPV4 | |
5292 |
| - VNIC_PLCMODES_CFG_REQ_FLAGS_HDS_IPV6); |
5293 |
| - req->enables = |
5294 |
| - cpu_to_le32(VNIC_PLCMODES_CFG_REQ_ENABLES_JUMBO_THRESH_VALID | |
5295 |
| - VNIC_PLCMODES_CFG_REQ_ENABLES_HDS_THRESHOLD_VALID); |
| 5299 | + req->flags = cpu_to_le32(VNIC_PLCMODES_CFG_REQ_FLAGS_JUMBO_PLACEMENT); |
| 5300 | + req->enables = cpu_to_le32(VNIC_PLCMODES_CFG_REQ_ENABLES_JUMBO_THRESH_VALID); |
| 5301 | + |
| 5302 | + if (BNXT_RX_PAGE_MODE(bp) && !BNXT_RX_JUMBO_MODE(bp)) { |
| 5303 | + req->flags |= cpu_to_le32(VNIC_PLCMODES_CFG_REQ_FLAGS_HDS_IPV4 | |
| 5304 | + VNIC_PLCMODES_CFG_REQ_FLAGS_HDS_IPV6); |
| 5305 | + req->enables |= |
| 5306 | + cpu_to_le32(VNIC_PLCMODES_CFG_REQ_ENABLES_HDS_THRESHOLD_VALID); |
| 5307 | + } |
5296 | 5308 | /* thresholds not implemented in firmware yet */
|
5297 | 5309 | req->jumbo_thresh = cpu_to_le16(bp->rx_copy_thresh);
|
5298 | 5310 | req->hds_threshold = cpu_to_le16(bp->rx_copy_thresh);
|
|
0 commit comments