From e7589eab92919483d624eb3356cf3ac80efc0790 Mon Sep 17 00:00:00 2001 From: John Fastabend Date: Mon, 18 Jul 2011 22:38:36 +0000 Subject: [PATCH] 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 Tested-by: Ross Brattain Signed-off-by: Jeff Kirsher --- .../net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c | 46 ++----------------- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 30 +++++++++--- 2 files changed, 27 insertions(+), 49 deletions(-) diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c index da6d53e7af9..0422e356b6f 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c @@ -118,49 +118,11 @@ static u8 ixgbe_dcbnl_set_state(struct net_device *netdev, u8 state) if (!!state != !(adapter->flags & IXGBE_FLAG_DCB_ENABLED)) return err; - if (state > 0) { - /* Turn on DCB */ - if (!(adapter->flags & IXGBE_FLAG_MSIX_ENABLED)) { - e_err(drv, "Enable failed, needs MSI-X\n"); - 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); - } + if (state > 0) + err = ixgbe_setup_tc(netdev, MAX_TRAFFIC_CLASS); + else + err = ixgbe_setup_tc(netdev, 0); -out: return err; } diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 2b1bb606c63..3932cd06103 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -7065,11 +7065,11 @@ int ixgbe_setup_tc(struct net_device *dev, u8 tc) struct ixgbe_adapter *adapter = netdev_priv(dev); struct ixgbe_hw *hw = &adapter->hw; - /* If DCB is anabled do not remove traffic classes, multiple - * traffic classes are required to implement DCB - */ - if (!tc && (adapter->flags & IXGBE_FLAG_DCB_ENABLED)) - return 0; + /* Multiple traffic classes requires multiple queues */ + if (!(adapter->flags & IXGBE_FLAG_MSIX_ENABLED)) { + e_err(drv, "Enable failed, needs MSI-X\n"); + return -EINVAL; + } /* Hardware supports up to 8 traffic classes */ if (tc > MAX_TRAFFIC_CLASS || @@ -7084,11 +7084,27 @@ int ixgbe_setup_tc(struct net_device *dev, u8 tc) ixgbe_close(dev); ixgbe_clear_interrupt_scheme(adapter); - if (tc) + if (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); + 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_validate_rtr(adapter, tc); if (netif_running(dev)) -- 2.46.0