diff options
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_main.c | 58 |
1 files changed, 1 insertions, 57 deletions
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index 5caf42a3a7f7..295ab6d89232 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c | |||
| @@ -665,62 +665,6 @@ void ixgbe_unmap_and_free_tx_resource(struct ixgbe_ring *tx_ring, | |||
| 665 | /* tx_buffer_info must be completely set up in the transmit path */ | 665 | /* tx_buffer_info must be completely set up in the transmit path */ |
| 666 | } | 666 | } |
| 667 | 667 | ||
| 668 | /** | ||
| 669 | * ixgbe_dcb_txq_to_tc - convert a reg index to a traffic class | ||
| 670 | * @adapter: driver private struct | ||
| 671 | * @index: reg idx of queue to query (0-127) | ||
| 672 | * | ||
| 673 | * Helper function to determine the traffic index for a particular | ||
| 674 | * register index. | ||
| 675 | * | ||
| 676 | * Returns : a tc index for use in range 0-7, or 0-3 | ||
| 677 | */ | ||
| 678 | static u8 ixgbe_dcb_txq_to_tc(struct ixgbe_adapter *adapter, u8 reg_idx) | ||
| 679 | { | ||
| 680 | int tc = -1; | ||
| 681 | int dcb_i = netdev_get_num_tc(adapter->netdev); | ||
| 682 | |||
| 683 | /* if DCB is not enabled the queues have no TC */ | ||
| 684 | if (!(adapter->flags & IXGBE_FLAG_DCB_ENABLED)) | ||
| 685 | return tc; | ||
| 686 | |||
| 687 | /* check valid range */ | ||
| 688 | if (reg_idx >= adapter->hw.mac.max_tx_queues) | ||
| 689 | return tc; | ||
| 690 | |||
| 691 | switch (adapter->hw.mac.type) { | ||
| 692 | case ixgbe_mac_82598EB: | ||
| 693 | tc = reg_idx >> 2; | ||
| 694 | break; | ||
| 695 | default: | ||
| 696 | if (dcb_i != 4 && dcb_i != 8) | ||
| 697 | break; | ||
| 698 | |||
| 699 | /* if VMDq is enabled the lowest order bits determine TC */ | ||
| 700 | if (adapter->flags & (IXGBE_FLAG_SRIOV_ENABLED | | ||
| 701 | IXGBE_FLAG_VMDQ_ENABLED)) { | ||
| 702 | tc = reg_idx & (dcb_i - 1); | ||
| 703 | break; | ||
| 704 | } | ||
| 705 | |||
| 706 | /* | ||
| 707 | * Convert the reg_idx into the correct TC. This bitmask | ||
| 708 | * targets the last full 32 ring traffic class and assigns | ||
| 709 | * it a value of 1. From there the rest of the rings are | ||
| 710 | * based on shifting the mask further up to include the | ||
| 711 | * reg_idx / 16 and then reg_idx / 8. It assumes dcB_i | ||
| 712 | * will only ever be 8 or 4 and that reg_idx will never | ||
| 713 | * be greater then 128. The code without the power of 2 | ||
| 714 | * optimizations would be: | ||
| 715 | * (((reg_idx % 32) + 32) * dcb_i) >> (9 - reg_idx / 32) | ||
| 716 | */ | ||
| 717 | tc = ((reg_idx & 0X1F) + 0x20) * dcb_i; | ||
| 718 | tc >>= 9 - (reg_idx >> 5); | ||
| 719 | } | ||
| 720 | |||
| 721 | return tc; | ||
| 722 | } | ||
| 723 | |||
| 724 | static void ixgbe_update_xoff_received(struct ixgbe_adapter *adapter) | 668 | static void ixgbe_update_xoff_received(struct ixgbe_adapter *adapter) |
| 725 | { | 669 | { |
| 726 | struct ixgbe_hw *hw = &adapter->hw; | 670 | struct ixgbe_hw *hw = &adapter->hw; |
| @@ -766,7 +710,7 @@ static void ixgbe_update_xoff_received(struct ixgbe_adapter *adapter) | |||
| 766 | /* disarm tx queues that have received xoff frames */ | 710 | /* disarm tx queues that have received xoff frames */ |
| 767 | for (i = 0; i < adapter->num_tx_queues; i++) { | 711 | for (i = 0; i < adapter->num_tx_queues; i++) { |
| 768 | struct ixgbe_ring *tx_ring = adapter->tx_ring[i]; | 712 | struct ixgbe_ring *tx_ring = adapter->tx_ring[i]; |
| 769 | u32 tc = ixgbe_dcb_txq_to_tc(adapter, tx_ring->reg_idx); | 713 | u8 tc = tx_ring->dcb_tc; |
| 770 | 714 | ||
| 771 | if (xoff[tc]) | 715 | if (xoff[tc]) |
| 772 | clear_bit(__IXGBE_HANG_CHECK_ARMED, &tx_ring->state); | 716 | clear_bit(__IXGBE_HANG_CHECK_ARMED, &tx_ring->state); |
