Message ID | 20210303153928.11764-4-maciej.fijalkowski@intel.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | intel: Rx headroom fixes | expand |
> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of > Maciej Fijalkowski > Sent: Wednesday, March 3, 2021 9:09 PM > To: intel-wired-lan@lists.osuosl.org > Cc: netdev@vger.kernel.org; brouer@redhat.com; kuba@kernel.org; > bpf@vger.kernel.org; Topel, Bjorn <bjorn.topel@intel.com>; Karlsson, > Magnus <magnus.karlsson@intel.com> > Subject: [Intel-wired-lan] [PATCH intel-net 3/3] ixgbe: move headroom > initialization to ixgbe_configure_rx_ring > > ixgbe_rx_offset(), that is supposed to initialize the Rx buffer headroom, relies > on __IXGBE_RX_BUILD_SKB_ENABLED flag. > > Currently, the callsite of mentioned function is placed incorrectly within > ixgbe_setup_rx_resources() where Rx ring's build skb flag is not set yet. This > causes the XDP_REDIRECT to be partially broken due to inability to create > xdp_frame in the headroom space, as the headroom is 0. > > Fix this by moving ixgbe_rx_offset() to ixgbe_configure_rx_ring() after the > flag setting, which happens to be set in ixgbe_set_rx_buffer_len. > > Fixes: c0d4e9d223c5 ("ixgbe: store the result of ixgbe_rx_offset() onto > ixgbe_ring") > Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com> > --- > drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > Tested-by: Vishakha Jambekar <vishakha.jambekar@intel.com>
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index fae84202d870..ac0d7a80de0d 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -4118,6 +4118,8 @@ void ixgbe_configure_rx_ring(struct ixgbe_adapter *adapter, #endif } + ring->rx_offset = ixgbe_rx_offset(ring); + if (ring->xsk_pool && hw->mac.type != ixgbe_mac_82599EB) { u32 xsk_buf_len = xsk_pool_get_rx_frame_size(ring->xsk_pool); @@ -6578,7 +6580,6 @@ int ixgbe_setup_rx_resources(struct ixgbe_adapter *adapter, rx_ring->next_to_clean = 0; rx_ring->next_to_use = 0; - rx_ring->rx_offset = ixgbe_rx_offset(rx_ring); /* XDP RX-queue info */ if (xdp_rxq_info_reg(&rx_ring->xdp_rxq, adapter->netdev,
ixgbe_rx_offset(), that is supposed to initialize the Rx buffer headroom, relies on __IXGBE_RX_BUILD_SKB_ENABLED flag. Currently, the callsite of mentioned function is placed incorrectly within ixgbe_setup_rx_resources() where Rx ring's build skb flag is not set yet. This causes the XDP_REDIRECT to be partially broken due to inability to create xdp_frame in the headroom space, as the headroom is 0. Fix this by moving ixgbe_rx_offset() to ixgbe_configure_rx_ring() after the flag setting, which happens to be set in ixgbe_set_rx_buffer_len. Fixes: c0d4e9d223c5 ("ixgbe: store the result of ixgbe_rx_offset() onto ixgbe_ring") Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com> --- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)