ixgbe: consolidate, setup for multiple traffic classes
This consolidates setup code for multiple traffic classes in the setup_tc routine. Prep work to allow IEEE DCBX to optimize for number of traffic classes. Also simplifies code paths. Signed-off-by: John Fastabend <john.r.fastabend@intel.com> Tested-by: Ross Brattain <ross.b.brattain@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
6172207634
commit
e7589eab92
2 changed files with 27 additions and 49 deletions
|
@ -118,49 +118,11 @@ static u8 ixgbe_dcbnl_set_state(struct net_device *netdev, u8 state)
|
||||||
if (!!state != !(adapter->flags & IXGBE_FLAG_DCB_ENABLED))
|
if (!!state != !(adapter->flags & IXGBE_FLAG_DCB_ENABLED))
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
if (state > 0) {
|
if (state > 0)
|
||||||
/* Turn on DCB */
|
err = ixgbe_setup_tc(netdev, MAX_TRAFFIC_CLASS);
|
||||||
if (!(adapter->flags & IXGBE_FLAG_MSIX_ENABLED)) {
|
else
|
||||||
e_err(drv, "Enable failed, needs MSI-X\n");
|
err = ixgbe_setup_tc(netdev, 0);
|
||||||
err = 1;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
adapter->flags |= IXGBE_FLAG_DCB_ENABLED;
|
|
||||||
|
|
||||||
switch (adapter->hw.mac.type) {
|
|
||||||
case ixgbe_mac_82598EB:
|
|
||||||
adapter->last_lfc_mode = adapter->hw.fc.current_mode;
|
|
||||||
adapter->hw.fc.requested_mode = ixgbe_fc_none;
|
|
||||||
break;
|
|
||||||
case ixgbe_mac_82599EB:
|
|
||||||
case ixgbe_mac_X540:
|
|
||||||
adapter->flags &= ~IXGBE_FLAG_FDIR_HASH_CAPABLE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
ixgbe_setup_tc(netdev, MAX_TRAFFIC_CLASS);
|
|
||||||
} else {
|
|
||||||
/* Turn off DCB */
|
|
||||||
adapter->hw.fc.requested_mode = adapter->last_lfc_mode;
|
|
||||||
adapter->temp_dcb_cfg.pfc_mode_enable = false;
|
|
||||||
adapter->dcb_cfg.pfc_mode_enable = false;
|
|
||||||
adapter->flags &= ~IXGBE_FLAG_DCB_ENABLED;
|
|
||||||
switch (adapter->hw.mac.type) {
|
|
||||||
case ixgbe_mac_82599EB:
|
|
||||||
case ixgbe_mac_X540:
|
|
||||||
if (!(adapter->flags & IXGBE_FLAG_FDIR_PERFECT_CAPABLE))
|
|
||||||
adapter->flags |= IXGBE_FLAG_FDIR_HASH_CAPABLE;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
ixgbe_setup_tc(netdev, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
out:
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7065,11 +7065,11 @@ int ixgbe_setup_tc(struct net_device *dev, u8 tc)
|
||||||
struct ixgbe_adapter *adapter = netdev_priv(dev);
|
struct ixgbe_adapter *adapter = netdev_priv(dev);
|
||||||
struct ixgbe_hw *hw = &adapter->hw;
|
struct ixgbe_hw *hw = &adapter->hw;
|
||||||
|
|
||||||
/* If DCB is anabled do not remove traffic classes, multiple
|
/* Multiple traffic classes requires multiple queues */
|
||||||
* traffic classes are required to implement DCB
|
if (!(adapter->flags & IXGBE_FLAG_MSIX_ENABLED)) {
|
||||||
*/
|
e_err(drv, "Enable failed, needs MSI-X\n");
|
||||||
if (!tc && (adapter->flags & IXGBE_FLAG_DCB_ENABLED))
|
return -EINVAL;
|
||||||
return 0;
|
}
|
||||||
|
|
||||||
/* Hardware supports up to 8 traffic classes */
|
/* Hardware supports up to 8 traffic classes */
|
||||||
if (tc > MAX_TRAFFIC_CLASS ||
|
if (tc > MAX_TRAFFIC_CLASS ||
|
||||||
|
@ -7084,11 +7084,27 @@ int ixgbe_setup_tc(struct net_device *dev, u8 tc)
|
||||||
ixgbe_close(dev);
|
ixgbe_close(dev);
|
||||||
ixgbe_clear_interrupt_scheme(adapter);
|
ixgbe_clear_interrupt_scheme(adapter);
|
||||||
|
|
||||||
if (tc)
|
if (tc) {
|
||||||
netdev_set_num_tc(dev, tc);
|
netdev_set_num_tc(dev, tc);
|
||||||
else
|
adapter->last_lfc_mode = adapter->hw.fc.current_mode;
|
||||||
|
|
||||||
|
adapter->flags |= IXGBE_FLAG_DCB_ENABLED;
|
||||||
|
adapter->flags &= ~IXGBE_FLAG_FDIR_HASH_CAPABLE;
|
||||||
|
|
||||||
|
if (adapter->hw.mac.type == ixgbe_mac_82598EB)
|
||||||
|
adapter->hw.fc.requested_mode = ixgbe_fc_none;
|
||||||
|
} else {
|
||||||
netdev_reset_tc(dev);
|
netdev_reset_tc(dev);
|
||||||
|
|
||||||
|
adapter->hw.fc.requested_mode = adapter->last_lfc_mode;
|
||||||
|
|
||||||
|
adapter->flags &= ~IXGBE_FLAG_DCB_ENABLED;
|
||||||
|
adapter->flags |= IXGBE_FLAG_FDIR_HASH_CAPABLE;
|
||||||
|
|
||||||
|
adapter->temp_dcb_cfg.pfc_mode_enable = false;
|
||||||
|
adapter->dcb_cfg.pfc_mode_enable = false;
|
||||||
|
}
|
||||||
|
|
||||||
ixgbe_init_interrupt_scheme(adapter);
|
ixgbe_init_interrupt_scheme(adapter);
|
||||||
ixgbe_validate_rtr(adapter, tc);
|
ixgbe_validate_rtr(adapter, tc);
|
||||||
if (netif_running(dev))
|
if (netif_running(dev))
|
||||||
|
|
Loading…
Add table
Reference in a new issue