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

ixgbe: UTA table incorrectly programmed

The UTA table was being set to the functional equivalent of promiscuous
mode. This was resulting in traffic from the virtual function being
flooded onto the wire and the PF device. This resulted in additional
overhead for VF traffic sent to the network and in the case of traffic
sent to the PF or another VF resulted in unwanted packets on the wire.

This was actually not the intended behavior. Now that we can program
the embedded switch correctly we can remove this snippit of code. Users
who want to support this should configure the FDB correctly using the
FDB ops.

Signed-off-by: Greg Rose <gregory.v.rose@intel.com>
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Greg Rose and committed by
David S. Miller
2b202712 9dcb373c

-29
-29
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
··· 2904 2904 IXGBE_WRITE_REG(hw, IXGBE_RSCCTL(reg_idx), rscctrl); 2905 2905 } 2906 2906 2907 - /** 2908 - * ixgbe_set_uta - Set unicast filter table address 2909 - * @adapter: board private structure 2910 - * 2911 - * The unicast table address is a register array of 32-bit registers. 2912 - * The table is meant to be used in a way similar to how the MTA is used 2913 - * however due to certain limitations in the hardware it is necessary to 2914 - * set all the hash bits to 1 and use the VMOLR ROPE bit as a promiscuous 2915 - * enable bit to allow vlan tag stripping when promiscuous mode is enabled 2916 - **/ 2917 - static void ixgbe_set_uta(struct ixgbe_adapter *adapter) 2918 - { 2919 - struct ixgbe_hw *hw = &adapter->hw; 2920 - int i; 2921 - 2922 - /* The UTA table only exists on 82599 hardware and newer */ 2923 - if (hw->mac.type < ixgbe_mac_82599EB) 2924 - return; 2925 - 2926 - /* we only need to do this if VMDq is enabled */ 2927 - if (!(adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)) 2928 - return; 2929 - 2930 - for (i = 0; i < 128; i++) 2931 - IXGBE_WRITE_REG(hw, IXGBE_UTA(i), ~0); 2932 - } 2933 - 2934 2907 #define IXGBE_MAX_RX_DESC_POLL 10 2935 2908 static void ixgbe_rx_desc_queue_enable(struct ixgbe_adapter *adapter, 2936 2909 struct ixgbe_ring *ring) ··· 3196 3223 3197 3224 /* Program registers for the distribution of queues */ 3198 3225 ixgbe_setup_mrqc(adapter); 3199 - 3200 - ixgbe_set_uta(adapter); 3201 3226 3202 3227 /* set_rx_buffer_len must be called before ring initialization */ 3203 3228 ixgbe_set_rx_buffer_len(adapter);