|
@@ -2482,8 +2482,7 @@ static void bnx2x_bz_fp(struct bnx2x *bp, int index)
|
|
|
*/
|
|
|
if (bp->dev->features & NETIF_F_LRO)
|
|
|
fp->mode = TPA_MODE_LRO;
|
|
|
- else if (bp->dev->features & NETIF_F_GRO &&
|
|
|
- bnx2x_mtu_allows_gro(bp->dev->mtu))
|
|
|
+ else if (bp->dev->features & NETIF_F_GRO_HW)
|
|
|
fp->mode = TPA_MODE_GRO;
|
|
|
else
|
|
|
fp->mode = TPA_MODE_DISABLED;
|
|
@@ -4874,6 +4873,9 @@ int bnx2x_change_mtu(struct net_device *dev, int new_mtu)
|
|
|
*/
|
|
|
dev->mtu = new_mtu;
|
|
|
|
|
|
+ if (!bnx2x_mtu_allows_gro(new_mtu))
|
|
|
+ dev->features &= ~NETIF_F_GRO_HW;
|
|
|
+
|
|
|
if (IS_PF(bp) && SHMEM2_HAS(bp, curr_cfg))
|
|
|
SHMEM2_WR(bp, curr_cfg, CURR_CFG_MET_OS);
|
|
|
|
|
@@ -4903,10 +4905,13 @@ netdev_features_t bnx2x_fix_features(struct net_device *dev,
|
|
|
}
|
|
|
|
|
|
/* TPA requires Rx CSUM offloading */
|
|
|
- if (!(features & NETIF_F_RXCSUM)) {
|
|
|
+ if (!(features & NETIF_F_RXCSUM))
|
|
|
+ features &= ~NETIF_F_LRO;
|
|
|
+
|
|
|
+ if (!(features & NETIF_F_GRO) || !bnx2x_mtu_allows_gro(dev->mtu))
|
|
|
+ features &= ~NETIF_F_GRO_HW;
|
|
|
+ if (features & NETIF_F_GRO_HW)
|
|
|
features &= ~NETIF_F_LRO;
|
|
|
- features &= ~NETIF_F_GRO;
|
|
|
- }
|
|
|
|
|
|
return features;
|
|
|
}
|
|
@@ -4933,13 +4938,8 @@ int bnx2x_set_features(struct net_device *dev, netdev_features_t features)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /* if GRO is changed while LRO is enabled, don't force a reload */
|
|
|
- if ((changes & NETIF_F_GRO) && (features & NETIF_F_LRO))
|
|
|
- changes &= ~NETIF_F_GRO;
|
|
|
-
|
|
|
- /* if GRO is changed while HW TPA is off, don't force a reload */
|
|
|
- if ((changes & NETIF_F_GRO) && bp->disable_tpa)
|
|
|
- changes &= ~NETIF_F_GRO;
|
|
|
+ /* Don't care about GRO changes */
|
|
|
+ changes &= ~NETIF_F_GRO;
|
|
|
|
|
|
if (changes)
|
|
|
bnx2x_reload = true;
|