bnxt_en: Fix max_mtu setting for multi-buf XDP
[ Upstream commit08450ea98a
] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
e9f11bfc03
commit
421e02bda0
|
@ -4027,26 +4027,29 @@ void bnxt_set_ring_params(struct bnxt *bp)
|
||||||
*/
|
*/
|
||||||
int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode)
|
int bnxt_set_rx_skb_mode(struct bnxt *bp, bool page_mode)
|
||||||
{
|
{
|
||||||
|
struct net_device *dev = bp->dev;
|
||||||
|
|
||||||
if (page_mode) {
|
if (page_mode) {
|
||||||
bp->flags &= ~BNXT_FLAG_AGG_RINGS;
|
bp->flags &= ~BNXT_FLAG_AGG_RINGS;
|
||||||
bp->flags |= BNXT_FLAG_RX_PAGE_MODE;
|
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->flags |= BNXT_FLAG_JUMBO;
|
||||||
bp->rx_skb_func = bnxt_rx_multi_page_skb;
|
bp->rx_skb_func = bnxt_rx_multi_page_skb;
|
||||||
bp->dev->max_mtu =
|
|
||||||
min_t(u16, bp->max_mtu, BNXT_MAX_MTU);
|
|
||||||
} else {
|
} else {
|
||||||
bp->flags |= BNXT_FLAG_NO_AGG_RINGS;
|
bp->flags |= BNXT_FLAG_NO_AGG_RINGS;
|
||||||
bp->rx_skb_func = bnxt_rx_page_skb;
|
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;
|
bp->rx_dir = DMA_BIDIRECTIONAL;
|
||||||
/* Disable LRO or GRO_HW */
|
/* Disable LRO or GRO_HW */
|
||||||
netdev_update_features(bp->dev);
|
netdev_update_features(dev);
|
||||||
} else {
|
} else {
|
||||||
bp->dev->max_mtu = bp->max_mtu;
|
dev->max_mtu = bp->max_mtu;
|
||||||
bp->flags &= ~BNXT_FLAG_RX_PAGE_MODE;
|
bp->flags &= ~BNXT_FLAG_RX_PAGE_MODE;
|
||||||
bp->rx_dir = DMA_FROM_DEVICE;
|
bp->rx_dir = DMA_FROM_DEVICE;
|
||||||
bp->rx_skb_func = bnxt_rx_skb;
|
bp->rx_skb_func = bnxt_rx_skb;
|
||||||
|
|
Loading…
Reference in New Issue