mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-15 00:04:15 +08:00
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: 1dc4c557bf
("bnxt: adding bnxt_xdp_build_skb to build skb from multibuffer xdp_buff")
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
Reviewed-by: Andy Gospodarek <andrew.gospodarek@broadcom.com>
Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Link: https://lore.kernel.org/r/20230731142043.58855-3-michael.chan@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
f6974b4c2d
commit
08450ea98a
@ -4001,26 +4001,29 @@ void bnxt_set_ring_params(struct bnxt *bp)
|
||||
*/
|
||||
int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode)
|
||||
{
|
||||
struct net_device *dev = bp->dev;
|
||||
|
||||
if (page_mode) {
|
||||
bp->flags &= ~BNXT_FLAG_AGG_RINGS;
|
||||
bp->flags |= BNXT_FLAG_RX_PAGE_MODE;
|
||||
|
||||
if (bp->dev->mtu > BNXT_MAX_PAGE_MODE_MTU) {
|
||||
if (bp->xdp_prog->aux->xdp_has_frags)
|
||||
dev->max_mtu = min_t(u16, bp->max_mtu, BNXT_MAX_MTU);
|
||||
else
|
||||
dev->max_mtu =
|
||||
min_t(u16, bp->max_mtu, BNXT_MAX_PAGE_MODE_MTU);
|
||||
if (dev->mtu > BNXT_MAX_PAGE_MODE_MTU) {
|
||||
bp->flags |= BNXT_FLAG_JUMBO;
|
||||
bp->rx_skb_func = bnxt_rx_multi_page_skb;
|
||||
bp->dev->max_mtu =
|
||||
min_t(u16, bp->max_mtu, BNXT_MAX_MTU);
|
||||
} else {
|
||||
bp->flags |= BNXT_FLAG_NO_AGG_RINGS;
|
||||
bp->rx_skb_func = bnxt_rx_page_skb;
|
||||
bp->dev->max_mtu =
|
||||
min_t(u16, bp->max_mtu, BNXT_MAX_PAGE_MODE_MTU);
|
||||
}
|
||||
bp->rx_dir = DMA_BIDIRECTIONAL;
|
||||
/* Disable LRO or GRO_HW */
|
||||
netdev_update_features(bp->dev);
|
||||
netdev_update_features(dev);
|
||||
} else {
|
||||
bp->dev->max_mtu = bp->max_mtu;
|
||||
dev->max_mtu = bp->max_mtu;
|
||||
bp->flags &= ~BNXT_FLAG_RX_PAGE_MODE;
|
||||
bp->rx_dir = DMA_FROM_DEVICE;
|
||||
bp->rx_skb_func = bnxt_rx_skb;
|
||||
|
Loading…
Reference in New Issue
Block a user