diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 05e609adf6a3..2ada2bb8fd57 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -14115,10 +14115,11 @@ static int bnxt_set_features(struct net_device *dev, netdev_features_t features)
{
bool update_tpa = false, update_ntuple = false;
struct bnxt *bp = netdev_priv(dev);
+ bool irq_re_init = false;
u32 flags = bp->flags;
+ bool re_init = false;
u32 changes;
int rc = 0;
- bool re_init = false;
bp->tx_wake_thresh = max_t(int, bp->tx_ring_size / 2,
bnxt_min_tx_desc_cnt(bp, features));@@ -14145,8 +14146,12 @@ static int bnxt_set_features(struct net_device *dev, netdev_features_t features)
update_tpa = true;
if ((bp->flags & BNXT_FLAG_TPA) == 0 ||
(flags & BNXT_FLAG_TPA) == 0 ||
- (bp->flags & BNXT_FLAG_CHIP_P5_PLUS))
+ (bp->flags & BNXT_FLAG_CHIP_P5_PLUS)) {
re_init = true;
+ if (!(bp->flags & BNXT_FLAG_AGG_RINGS) &&
+ (flags & BNXT_FLAG_AGG_RINGS))
+ irq_re_init = true;
+ }
}
if (changes & ~BNXT_FLAG_TPA)@@ -14169,7 +14174,7 @@ static int bnxt_set_features(struct net_device *dev, netdev_features_t features)
return bnxt_reinit_features(bp, true, false, flags, update_tpa);
if (re_init)
- return bnxt_reinit_features(bp, false, false, flags, update_tpa);
+ return bnxt_reinit_features(bp, irq_re_init, false, flags, update_tpa);
if (update_tpa) {
bp->flags = flags;diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
index 622e89587e5d..5c9e770960e6 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
@@ -853,6 +853,7 @@ static int bnxt_set_ringparam(struct net_device *dev,
{
u8 tcp_data_split = kernel_ering->tcp_data_split;
struct bnxt *bp = netdev_priv(dev);
+ bool irq_re_init = false;
u8 hds_config_mod;
int rc;
@@ -876,8 +877,13 @@ static int bnxt_set_ringparam(struct net_device *dev,
return -EINVAL;
}
+ if (hds_config_mod &&
+ tcp_data_split == ETHTOOL_TCP_DATA_SPLIT_ENABLED &&
+ !(bp->flags & BNXT_FLAG_AGG_RINGS))
+ irq_re_init = true;
+
if (netif_running(dev))
- bnxt_close_nic(bp, false, false);
+ bnxt_close_nic(bp, irq_re_init, false);
if (hds_config_mod) {
if (tcp_data_split == ETHTOOL_TCP_DATA_SPLIT_ENABLED)@@ -891,7 +897,7 @@ static int bnxt_set_ringparam(struct net_device *dev,
bnxt_set_ring_params(bp);
if (netif_running(dev)) {
- rc = bnxt_open_nic(bp, false, false);
+ rc = bnxt_open_nic(bp, irq_re_init, false);
if (rc)
return rc;
}--
2.51.0