> -----Original Message----- > From: Paul Moses <[email protected]> > Sent: Wednesday, October 28, 2026 9:35 AM > To: [email protected] > Cc: [email protected]; Nguyen, Anthony L > <[email protected]>; Kitszel, Przemyslaw > <[email protected]>; [email protected]; > [email protected]; [email protected]; [email protected]; > [email protected]; [email protected]; [email protected]; > [email protected]; [email protected]; [email protected]; > [email protected]; [email protected]; Fijalkowski, Maciej > <[email protected]>; [email protected]; Loktionov, > Aleksandr <[email protected]>; Dahan, AvigailX > <[email protected]>; [email protected]; > [email protected]; [email protected] > Subject: [PATCH net v3 2/2] igc: fix AF_XDP receive buffer size for 2K > UMEM chunks > nit: Perhaps use "2 KiB" instead of "2K" here, as the latter does not specify the unit.
> From: Maciej Fijalkowski <[email protected]> > > SRRCTL.BSIZEPKT has a granularity of 1 KiB. With a 2 KiB UMEM chunk and > the default XDP headroom, xsk_pool_get_rx_frame_size() returns 1792. > Programming this value truncates the hardware receive buffer size to 1 > KiB, even though an MTU-sized frame fits in the usable UMEM area. > > XDP on igc is limited to MTU 1500, so configure a 2 KiB receive buffer > for XSK rings. Limit RLPML to the maximum supported Ethernet frame size > while XDP is attached, regardless of PAGE_SIZE, to avoid oversized > frames spanning descriptors or exceeding the usable UMEM space. > > RLPML is currently programmed from igc_set_rx_mode(), which can run > without RTNL, for example on an IPv6 multicast join, and could then use > a stale XDP state. RLPML does not depend on the address lists. > Program it from igc_setup_rctl() instead, next to RCTL.LPE, and from > igc_xdp_set_prog() while the rings are disabled. This avoids > netif_addr_lock_bh() usage. > > Validate that the XSK frame size accommodates a maximum-size frame with > two VLAN tags, FCS and the optional inline RX timestamp. Check against > the maximum supported XDP MTU, rather than the current MTU, which can > change after the socket is bound. > > Fixes: fc9df2a0b520 ("igc: Enable RX via AF_XDP zero-copy") > Signed-off-by: Maciej Fijalkowski <[email protected]> > Signed-off-by: Paul Moses <[email protected]> > --- > drivers/net/ethernet/intel/igc/igc.h | 1 + > drivers/net/ethernet/intel/igc/igc_main.c | 33 +++++++++++++++++------ > drivers/net/ethernet/intel/igc/igc_xdp.c | 11 +++++--- > 3 files changed, 33 insertions(+), 12 deletions(-) > > diff --git a/drivers/net/ethernet/intel/igc/igc.h > b/drivers/net/ethernet/intel/igc/igc.h > index 17f213cc9..ad1062f85 100644 > --- a/drivers/net/ethernet/intel/igc/igc.h > +++ b/drivers/net/ethernet/intel/igc/igc.h > @@ -765,6 +765,7 @@ static inline s32 igc_read_phy_reg(struct igc_hw > *hw, u32 offset, u16 *data) > return -EOPNOTSUPP; > } > > +void igc_set_rlpml(struct igc_adapter *adapter); > void igc_reinit_locked(struct igc_adapter *); struct igc_nfc_rule > *igc_get_nfc_rule(struct igc_adapter *adapter, > u32 location); > diff --git a/drivers/net/ethernet/intel/igc/igc_main.c > b/drivers/net/ethernet/intel/igc/igc_main.c > index 41b293dc1..6b418dc71 100644 > --- a/drivers/net/ethernet/intel/igc/igc_main.c > +++ b/drivers/net/ethernet/intel/igc/igc_main.c > @@ -674,8 +674,11 @@ static void igc_configure_rx_ring(struct > igc_adapter *adapter, > ring->next_to_clean = 0; > ring->next_to_use = 0; > Also, below: > + /* igc's XDP limits MTU to 1500; all XSK RX buffers can use 2kb; > + * RLPML limits the receive length to fit after UMEM headroom. > + */ "2kb" normally means 2 kilobits, whereas the buffer size here is 2048 bytes. I suggest using "2 KiB" consistently in the subject, commit message, and comments. ... Also, below: > + /* igc's XDP currently does not support jumbo frames. Limit the > + * accepted packet size regardless of PAGE_SIZE so it fits in a > 2kb > + * XSK chunk. > + */ > + if (igc_xdp_is_enabled(adapter)) > + rlpml = ETH_FRAME_LEN + VLAN_HLEN * 2 + ETH_FCS_LEN; > + > + wr32(IGC_RLPML, rlpml); > +} > + Otherwise, looks fine for me Reviewed-by: Aleksandr Loktionov <[email protected]>
