Skip to content

Commit 3de38c8

Browse files
mfijalkoAlexei Starovoitov
authored andcommitted
ice: update xdp_rxq_info::frag_size for ZC enabled Rx queue
Now that ice driver correctly sets up frag_size in xdp_rxq_info, let us make it work for ZC multi-buffer as well. ice_rx_ring::rx_buf_len for ZC is being set via xsk_pool_get_rx_frame_size() and this needs to be propagated up to xdp_rxq_info. Use a bigger hammer and instead of unregistering only xdp_rxq_info's memory model, unregister it altogether and register it again and have xdp_rxq_info with correct frag_size value. Fixes: 1bbc04d ("ice: xsk: add RX multi-buffer support") Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com> Link: https://lore.kernel.org/r/20240124191602.566724-9-maciej.fijalkowski@intel.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
1 parent 2907799 commit 3de38c8

1 file changed

Lines changed: 23 additions & 14 deletions

File tree

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

Lines changed: 23 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -547,19 +547,27 @@ int ice_vsi_cfg_rxq(struct ice_rx_ring *ring)
547547
ring->rx_buf_len = ring->vsi->rx_buf_len;
548548

549549
if (ring->vsi->type == ICE_VSI_PF) {
550-
if (!xdp_rxq_info_is_reg(&ring->xdp_rxq))
551-
/* coverity[check_return] */
552-
__xdp_rxq_info_reg(&ring->xdp_rxq, ring->netdev,
553-
ring->q_index,
554-
ring->q_vector->napi.napi_id,
555-
ring->vsi->rx_buf_len);
550+
if (!xdp_rxq_info_is_reg(&ring->xdp_rxq)) {
551+
err = __xdp_rxq_info_reg(&ring->xdp_rxq, ring->netdev,
552+
ring->q_index,
553+
ring->q_vector->napi.napi_id,
554+
ring->rx_buf_len);
555+
if (err)
556+
return err;
557+
}
556558

557559
ring->xsk_pool = ice_xsk_pool(ring);
558560
if (ring->xsk_pool) {
559-
xdp_rxq_info_unreg_mem_model(&ring->xdp_rxq);
561+
xdp_rxq_info_unreg(&ring->xdp_rxq);
560562

561563
ring->rx_buf_len =
562564
xsk_pool_get_rx_frame_size(ring->xsk_pool);
565+
err = __xdp_rxq_info_reg(&ring->xdp_rxq, ring->netdev,
566+
ring->q_index,
567+
ring->q_vector->napi.napi_id,
568+
ring->rx_buf_len);
569+
if (err)
570+
return err;
563571
err = xdp_rxq_info_reg_mem_model(&ring->xdp_rxq,
564572
MEM_TYPE_XSK_BUFF_POOL,
565573
NULL);
@@ -571,13 +579,14 @@ int ice_vsi_cfg_rxq(struct ice_rx_ring *ring)
571579
dev_info(dev, "Registered XDP mem model MEM_TYPE_XSK_BUFF_POOL on Rx ring %d\n",
572580
ring->q_index);
573581
} else {
574-
if (!xdp_rxq_info_is_reg(&ring->xdp_rxq))
575-
/* coverity[check_return] */
576-
__xdp_rxq_info_reg(&ring->xdp_rxq,
577-
ring->netdev,
578-
ring->q_index,
579-
ring->q_vector->napi.napi_id,
580-
ring->vsi->rx_buf_len);
582+
if (!xdp_rxq_info_is_reg(&ring->xdp_rxq)) {
583+
err = __xdp_rxq_info_reg(&ring->xdp_rxq, ring->netdev,
584+
ring->q_index,
585+
ring->q_vector->napi.napi_id,
586+
ring->rx_buf_len);
587+
if (err)
588+
return err;
589+
}
581590

582591
err = xdp_rxq_info_reg_mem_model(&ring->xdp_rxq,
583592
MEM_TYPE_PAGE_SHARED,

0 commit comments

Comments
 (0)