netdev->netdev_ops->ndo_stop(netdev);
                ixgbe_clear_interrupt_scheme(adapter);
 
-               adapter->flags &= ~IXGBE_FLAG_RSS_ENABLED;
                switch (adapter->hw.mac.type) {
                case ixgbe_mac_82598EB:
                        adapter->last_lfc_mode = adapter->hw.fc.current_mode;
                        adapter->temp_dcb_cfg.pfc_mode_enable = false;
                        adapter->dcb_cfg.pfc_mode_enable = false;
                        adapter->flags &= ~IXGBE_FLAG_DCB_ENABLED;
-                       adapter->flags |= IXGBE_FLAG_RSS_ENABLED;
                        switch (adapter->hw.mac.type) {
                        case ixgbe_mac_82599EB:
                        case ixgbe_mac_X540:
 
                                        );
 
        switch (mask) {
+#ifdef CONFIG_IXGBE_DCB
+       case (IXGBE_FLAG_DCB_ENABLED | IXGBE_FLAG_RSS_ENABLED):
+               mrqc = IXGBE_MRQC_RTRSS8TCEN;
+               break;
+       case (IXGBE_FLAG_DCB_ENABLED):
+               mrqc = IXGBE_MRQC_RT8TCEN;
+               break;
+#endif /* CONFIG_IXGBE_DCB */
        case (IXGBE_FLAG_RSS_ENABLED):
                mrqc = IXGBE_MRQC_RSSEN;
                break;
        case (IXGBE_FLAG_SRIOV_ENABLED):
                mrqc = IXGBE_MRQC_VMDQEN;
                break;
-#ifdef CONFIG_IXGBE_DCB
-       case (IXGBE_FLAG_DCB_ENABLED):
-               mrqc = IXGBE_MRQC_RT8TCEN;
-               break;
-#endif /* CONFIG_IXGBE_DCB */
        default:
                break;
        }
 
        /* reconfigure the hardware */
        ixgbe_dcb_hw_config(hw, &adapter->dcb_cfg);
+
+       /* Enable RSS Hash per TC */
+       if (hw->mac.type != ixgbe_mac_82598EB) {
+               int i;
+               u32 reg = 0;
+
+               for (i = 0; i < MAX_TRAFFIC_CLASS; i++) {
+                       u8 msb = 0;
+                       u8 cnt = adapter->netdev->tc_to_txq[i].count;
+
+                       while (cnt >>= 1)
+                               msb++;
+
+                       reg |= msb << IXGBE_RQTC_SHIFT_TC(i);
+               }
+               IXGBE_WRITE_REG(hw, IXGBE_RQTC, reg);
+       }
 }
 
 #endif
        if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)
                adapter->flags &= ~(IXGBE_FLAG_RSS_ENABLED |
                                    IXGBE_FLAG_DCB_ENABLED);
-       if (adapter->flags & IXGBE_FLAG_DCB_ENABLED)
-               adapter->flags &= ~IXGBE_FLAG_RSS_ENABLED;
 
 #ifdef CONFIG_IXGBE_DCB
        netdev->dcbnl_ops = &dcbnl_ops;