Skip to content

Commit 08450ea

Browse files
Michael Chankuba-moo
Michael Chan
authored andcommitted
bnxt_en: Fix max_mtu setting for multi-buf XDP
The existing code does not allow the MTU to be set to the maximum even after an XDP program supporting multiple buffers is attached. Fix it to set the netdev->max_mtu to the maximum value if the attached XDP program supports mutiple buffers, regardless of the current MTU value. Also use a local variable dev instead of repeatedly using bp->dev. Fixes: 1dc4c55 ("bnxt: adding bnxt_xdp_build_skb to build skb from multibuffer xdp_buff") Reviewed-by: Somnath Kotur <[email protected]> Reviewed-by: Ajit Khaparde <[email protected]> Reviewed-by: Andy Gospodarek <[email protected]> Signed-off-by: Michael Chan <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent f6974b4 commit 08450ea

File tree

1 file changed

+10
-7
lines changed
  • drivers/net/ethernet/broadcom/bnxt

1 file changed

+10
-7
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt.c

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4001,26 +4001,29 @@ void bnxt_set_ring_params(struct bnxt *bp)
40014001
*/
40024002
int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode)
40034003
{
4004+
struct net_device *dev = bp->dev;
4005+
40044006
if (page_mode) {
40054007
bp->flags &= ~BNXT_FLAG_AGG_RINGS;
40064008
bp->flags |= BNXT_FLAG_RX_PAGE_MODE;
40074009

4008-
if (bp->dev->mtu > BNXT_MAX_PAGE_MODE_MTU) {
4010+
if (bp->xdp_prog->aux->xdp_has_frags)
4011+
dev->max_mtu = min_t(u16, bp->max_mtu, BNXT_MAX_MTU);
4012+
else
4013+
dev->max_mtu =
4014+
min_t(u16, bp->max_mtu, BNXT_MAX_PAGE_MODE_MTU);
4015+
if (dev->mtu > BNXT_MAX_PAGE_MODE_MTU) {
40094016
bp->flags |= BNXT_FLAG_JUMBO;
40104017
bp->rx_skb_func = bnxt_rx_multi_page_skb;
4011-
bp->dev->max_mtu =
4012-
min_t(u16, bp->max_mtu, BNXT_MAX_MTU);
40134018
} else {
40144019
bp->flags |= BNXT_FLAG_NO_AGG_RINGS;
40154020
bp->rx_skb_func = bnxt_rx_page_skb;
4016-
bp->dev->max_mtu =
4017-
min_t(u16, bp->max_mtu, BNXT_MAX_PAGE_MODE_MTU);
40184021
}
40194022
bp->rx_dir = DMA_BIDIRECTIONAL;
40204023
/* Disable LRO or GRO_HW */
4021-
netdev_update_features(bp->dev);
4024+
netdev_update_features(dev);
40224025
} else {
4023-
bp->dev->max_mtu = bp->max_mtu;
4026+
dev->max_mtu = bp->max_mtu;
40244027
bp->flags &= ~BNXT_FLAG_RX_PAGE_MODE;
40254028
bp->rx_dir = DMA_FROM_DEVICE;
40264029
bp->rx_skb_func = bnxt_rx_skb;

0 commit comments

Comments
 (0)