]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ixgbe: consolidate, setup for multiple traffic classes
authorJohn Fastabend <john.r.fastabend@intel.com>
Mon, 18 Jul 2011 22:38:36 +0000 (22:38 +0000)
committerJoe Jin <joe.jin@oracle.com>
Thu, 17 May 2012 14:00:55 +0000 (22:00 +0800)
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.

(cherry picked from commit e7589eab92919483d624eb3356cf3ac80efc0790)
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>
Signed-off-by: Joe Jin <joe.jin@oracle.com>
drivers/net/ixgbe/ixgbe_dcb_nl.c
drivers/net/ixgbe/ixgbe_main.c

index 9986edbacc866f4622598e58d1135e9965f28b0a..3e4ee172e15e667c3d31417dcc6585c6d7bc48aa 100644 (file)
@@ -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;
 }
 
index cb2fa6b81646fa082831c0b789b19e3419322afb..442b2f7bcdda48da083d54b79a231b0ae94c525e 100644 (file)
@@ -7063,11 +7063,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 ||
@@ -7082,11 +7082,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))