Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ixgbe: DCB: enable RSS to be used with DCB

RSS had previously been disabled when DCB was enabled because
DCB was single queued per traffic class. Now that DCB implements
multiple Tx/Rx rings per traffic class enable RSS.

Here RSS hashes across the queues in the traffic class.

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>

authored by

John Fastabend and committed by
Jeff Kirsher
8187cd48 24095aa3

+25 -9
-2
drivers/net/ixgbe/ixgbe_dcb_nl.c
··· 129 129 netdev->netdev_ops->ndo_stop(netdev); 130 130 ixgbe_clear_interrupt_scheme(adapter); 131 131 132 - adapter->flags &= ~IXGBE_FLAG_RSS_ENABLED; 133 132 switch (adapter->hw.mac.type) { 134 133 case ixgbe_mac_82598EB: 135 134 adapter->last_lfc_mode = adapter->hw.fc.current_mode; ··· 161 162 adapter->temp_dcb_cfg.pfc_mode_enable = false; 162 163 adapter->dcb_cfg.pfc_mode_enable = false; 163 164 adapter->flags &= ~IXGBE_FLAG_DCB_ENABLED; 164 - adapter->flags |= IXGBE_FLAG_RSS_ENABLED; 165 165 switch (adapter->hw.mac.type) { 166 166 case ixgbe_mac_82599EB: 167 167 case ixgbe_mac_X540:
+25 -7
drivers/net/ixgbe/ixgbe_main.c
··· 2892 2892 ); 2893 2893 2894 2894 switch (mask) { 2895 + #ifdef CONFIG_IXGBE_DCB 2896 + case (IXGBE_FLAG_DCB_ENABLED | IXGBE_FLAG_RSS_ENABLED): 2897 + mrqc = IXGBE_MRQC_RTRSS8TCEN; 2898 + break; 2899 + case (IXGBE_FLAG_DCB_ENABLED): 2900 + mrqc = IXGBE_MRQC_RT8TCEN; 2901 + break; 2902 + #endif /* CONFIG_IXGBE_DCB */ 2895 2903 case (IXGBE_FLAG_RSS_ENABLED): 2896 2904 mrqc = IXGBE_MRQC_RSSEN; 2897 2905 break; 2898 2906 case (IXGBE_FLAG_SRIOV_ENABLED): 2899 2907 mrqc = IXGBE_MRQC_VMDQEN; 2900 2908 break; 2901 - #ifdef CONFIG_IXGBE_DCB 2902 - case (IXGBE_FLAG_DCB_ENABLED): 2903 - mrqc = IXGBE_MRQC_RT8TCEN; 2904 - break; 2905 - #endif /* CONFIG_IXGBE_DCB */ 2906 2909 default: 2907 2910 break; 2908 2911 } ··· 3675 3672 3676 3673 /* reconfigure the hardware */ 3677 3674 ixgbe_dcb_hw_config(hw, &adapter->dcb_cfg); 3675 + 3676 + /* Enable RSS Hash per TC */ 3677 + if (hw->mac.type != ixgbe_mac_82598EB) { 3678 + int i; 3679 + u32 reg = 0; 3680 + 3681 + for (i = 0; i < MAX_TRAFFIC_CLASS; i++) { 3682 + u8 msb = 0; 3683 + u8 cnt = adapter->netdev->tc_to_txq[i].count; 3684 + 3685 + while (cnt >>= 1) 3686 + msb++; 3687 + 3688 + reg |= msb << IXGBE_RQTC_SHIFT_TC(i); 3689 + } 3690 + IXGBE_WRITE_REG(hw, IXGBE_RQTC, reg); 3691 + } 3678 3692 } 3679 3693 3680 3694 #endif ··· 7363 7343 if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED) 7364 7344 adapter->flags &= ~(IXGBE_FLAG_RSS_ENABLED | 7365 7345 IXGBE_FLAG_DCB_ENABLED); 7366 - if (adapter->flags & IXGBE_FLAG_DCB_ENABLED) 7367 - adapter->flags &= ~IXGBE_FLAG_RSS_ENABLED; 7368 7346 7369 7347 #ifdef CONFIG_IXGBE_DCB 7370 7348 netdev->dcbnl_ops = &dcbnl_ops;