]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
igb: Do not factor VLANs into RLPML calculation
authorAlexander Duyck <aduyck@mirantis.com>
Thu, 7 Jan 2016 07:10:47 +0000 (23:10 -0800)
committerKirtikar Kashyap <kirtikar.kashyap@oracle.com>
Thu, 22 Jun 2017 21:28:29 +0000 (14:28 -0700)
The RLPML registers already take the size of VLAN headers into account when
determining the maximum packet length.  This is called out in EAS documents
for several parts including the 82576 and the i350.  As such we can drop
the addition of size to the value programmed into the RLPML registers.

Signed-off-by: Alexander Duyck <aduyck@mirantis.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
(cherry picked from commit d3836f8e2517fb04328c673989fd780030926694)

Orabug: 26325580

Signed-off-by: Kirtikar Kashyap <kirtikar.kashyap@oracle.com>
Reviewed-by: Jack Vogel <jack.vogel@oracle.com>
drivers/net/ethernet/intel/igb/igb.h
drivers/net/ethernet/intel/igb/igb_main.c

index e3cb93bdb21aed5341a758694735283058f8b71f..d135261f860207b33c9ad8b1b77f822852c99f42 100644 (file)
@@ -95,7 +95,6 @@ struct vf_data_storage {
        unsigned char vf_mac_addresses[ETH_ALEN];
        u16 vf_mc_hashes[IGB_MAX_VF_MC_ENTRIES];
        u16 num_vf_mc_hashes;
-       u16 vlans_enabled;
        u32 flags;
        unsigned long last_nack;
        u16 pf_vlan; /* When set, guest VLAN config not allowed. */
index e83e49ff47b972ef7ca190bba04102200f1b8954..981f634fd18f5f1a35639df9b3f5e23858e5a6db 100644 (file)
@@ -3531,12 +3531,8 @@ static inline int igb_set_vf_rlpml(struct igb_adapter *adapter, int size,
        struct e1000_hw *hw = &adapter->hw;
        u32 vmolr;
 
-       /* if it isn't the PF check to see if VFs are enabled and
-        * increase the size to support vlan tags
-        */
-       if (vfn < adapter->vfs_allocated_count &&
-           adapter->vf_data[vfn].vlans_enabled)
-               size += VLAN_TAG_SIZE;
+       if (size > MAX_JUMBO_FRAME_SIZE)
+               size = MAX_JUMBO_FRAME_SIZE;
 
        vmolr = rd32(E1000_VMOLR(vfn));
        vmolr &= ~E1000_VMOLR_RLPML_MASK;
@@ -5787,8 +5783,6 @@ static void igb_clear_vf_vfta(struct igb_adapter *adapter, u32 vf)
 
                wr32(E1000_VLVF(i), reg);
        }
-
-       adapter->vf_data[vf].vlans_enabled = 0;
 }
 
 static s32 igb_vlvf_set(struct igb_adapter *adapter, u32 vid, bool add, u32 vf)
@@ -5837,23 +5831,6 @@ static s32 igb_vlvf_set(struct igb_adapter *adapter, u32 vid, bool add, u32 vf)
                        reg &= ~E1000_VLVF_VLANID_MASK;
                        reg |= vid;
                        wr32(E1000_VLVF(i), reg);
-
-                       /* do not modify RLPML for PF devices */
-                       if (vf >= adapter->vfs_allocated_count)
-                               return 0;
-
-                       if (!adapter->vf_data[vf].vlans_enabled) {
-                               u32 size;
-
-                               reg = rd32(E1000_VMOLR(vf));
-                               size = reg & E1000_VMOLR_RLPML_MASK;
-                               size += 4;
-                               reg &= ~E1000_VMOLR_RLPML_MASK;
-                               reg |= size;
-                               wr32(E1000_VMOLR(vf), reg);
-                       }
-
-                       adapter->vf_data[vf].vlans_enabled++;
                }
        } else {
                if (i < E1000_VLVF_ARRAY_SIZE) {
@@ -5865,22 +5842,6 @@ static s32 igb_vlvf_set(struct igb_adapter *adapter, u32 vid, bool add, u32 vf)
                                igb_vfta_set(hw, vid, false);
                        }
                        wr32(E1000_VLVF(i), reg);
-
-                       /* do not modify RLPML for PF devices */
-                       if (vf >= adapter->vfs_allocated_count)
-                               return 0;
-
-                       adapter->vf_data[vf].vlans_enabled--;
-                       if (!adapter->vf_data[vf].vlans_enabled) {
-                               u32 size;
-
-                               reg = rd32(E1000_VMOLR(vf));
-                               size = reg & E1000_VMOLR_RLPML_MASK;
-                               size -= 4;
-                               reg &= ~E1000_VMOLR_RLPML_MASK;
-                               reg |= size;
-                               wr32(E1000_VMOLR(vf), reg);
-                       }
                }
        }
        return 0;