Skip to content

Commit 02852b4

Browse files
walking-machinekuba-moo
authored andcommitted
ice: fix rxq info registering in mbuf packets
XDP RxQ info contains frag_size, which depends on the MTU. This makes the old way of registering RxQ info before calculating new buffer sizes invalid. Currently, it leads to frag_size being outdated, making it sometimes impossible to grow tailroom in a mbuf packet. E.g. fragments are actually 3K+, but frag size is still as if MTU was 1500. Always register new XDP RxQ info after reconfiguring memory pools. Fixes: 2fba7dc ("ice: Add support for XDP multi-buffer on Rx side") Reviewed-by: Aleksandr Loktionov <[email protected]> Signed-off-by: Larysa Zaremba <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 16394d8 commit 02852b4

4 files changed

Lines changed: 14 additions & 20 deletions

File tree

drivers/net/ethernet/intel/ice/ice_base.c

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -666,23 +666,12 @@ static int ice_vsi_cfg_rxq(struct ice_rx_ring *ring)
666666

667667
if (ring->vsi->type == ICE_VSI_PF || ring->vsi->type == ICE_VSI_SF ||
668668
ring->vsi->type == ICE_VSI_LB) {
669-
if (!xdp_rxq_info_is_reg(&ring->xdp_rxq)) {
670-
err = __xdp_rxq_info_reg(&ring->xdp_rxq, ring->netdev,
671-
ring->q_index,
672-
ring->q_vector->napi.napi_id,
673-
ring->rx_buf_len);
674-
if (err)
675-
return err;
676-
}
677-
678669
ice_rx_xsk_pool(ring);
679670
err = ice_realloc_rx_xdp_bufs(ring, ring->xsk_pool);
680671
if (err)
681672
return err;
682673

683674
if (ring->xsk_pool) {
684-
xdp_rxq_info_unreg(&ring->xdp_rxq);
685-
686675
rx_buf_len =
687676
xsk_pool_get_rx_frame_size(ring->xsk_pool);
688677
err = __xdp_rxq_info_reg(&ring->xdp_rxq, ring->netdev,
@@ -705,14 +694,13 @@ static int ice_vsi_cfg_rxq(struct ice_rx_ring *ring)
705694
if (err)
706695
return err;
707696

708-
if (!xdp_rxq_info_is_reg(&ring->xdp_rxq)) {
709-
err = __xdp_rxq_info_reg(&ring->xdp_rxq, ring->netdev,
710-
ring->q_index,
711-
ring->q_vector->napi.napi_id,
712-
ring->rx_buf_len);
713-
if (err)
714-
goto err_destroy_fq;
715-
}
697+
err = __xdp_rxq_info_reg(&ring->xdp_rxq, ring->netdev,
698+
ring->q_index,
699+
ring->q_vector->napi.napi_id,
700+
ring->rx_buf_len);
701+
if (err)
702+
goto err_destroy_fq;
703+
716704
xdp_rxq_info_attach_page_pool(&ring->xdp_rxq,
717705
ring->pp);
718706
}

drivers/net/ethernet/intel/ice/ice_ethtool.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3342,6 +3342,7 @@ ice_set_ringparam(struct net_device *netdev, struct ethtool_ringparam *ring,
33423342
rx_rings[i].cached_phctime = pf->ptp.cached_phc_time;
33433343
rx_rings[i].desc = NULL;
33443344
rx_rings[i].xdp_buf = NULL;
3345+
rx_rings[i].xdp_rxq = (struct xdp_rxq_info){ };
33453346

33463347
/* this is to allow wr32 to have something to write to
33473348
* during early allocation of Rx buffers

drivers/net/ethernet/intel/ice/ice_txrx.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,9 @@ void ice_clean_rx_ring(struct ice_rx_ring *rx_ring)
560560
i = 0;
561561
}
562562

563-
if (rx_ring->vsi->type == ICE_VSI_PF &&
563+
if ((rx_ring->vsi->type == ICE_VSI_PF ||
564+
rx_ring->vsi->type == ICE_VSI_SF ||
565+
rx_ring->vsi->type == ICE_VSI_LB) &&
564566
xdp_rxq_info_is_reg(&rx_ring->xdp_rxq)) {
565567
xdp_rxq_info_detach_mem_model(&rx_ring->xdp_rxq);
566568
xdp_rxq_info_unreg(&rx_ring->xdp_rxq);

drivers/net/ethernet/intel/ice/ice_xsk.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -899,6 +899,9 @@ void ice_xsk_clean_rx_ring(struct ice_rx_ring *rx_ring)
899899
u16 ntc = rx_ring->next_to_clean;
900900
u16 ntu = rx_ring->next_to_use;
901901

902+
if (xdp_rxq_info_is_reg(&rx_ring->xdp_rxq))
903+
xdp_rxq_info_unreg(&rx_ring->xdp_rxq);
904+
902905
while (ntc != ntu) {
903906
struct xdp_buff *xdp = *ice_xdp_buf(rx_ring, ntc);
904907

0 commit comments

Comments
 (0)