aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ixgbe/ixgbe_sriov.c
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2010-06-15 05:25:48 -0400
committerDavid S. Miller <davem@davemloft.net>2010-06-15 17:23:35 -0400
commit2850062af1e00b3aab9f2ae486eda3e61d4aaeb9 (patch)
treef6cad36ae3980db7e03e9c9645e8c6eda7e21e3e /drivers/net/ixgbe/ixgbe_sriov.c
parent16fb62b6b4d57339a0ec931b3fb8c8d0ca6414e8 (diff)
ixgbe: update set_rx_mode to fix issues w/ macvlan
This change corrects issues where macvlan was not correctly triggering promiscuous mode on ixgbe due to the filters not being correctly set. It also corrects the fact that VF rar filters were being overwritten when the PF was reset. CC: Shirley Ma <xma@us.ibm.com> Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Tested-by: Emil Tantilov <emil.s.tantilov@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ixgbe/ixgbe_sriov.c')
-rw-r--r--drivers/net/ixgbe/ixgbe_sriov.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/drivers/net/ixgbe/ixgbe_sriov.c b/drivers/net/ixgbe/ixgbe_sriov.c
index 66f6e62b8cb0..6e6dee04ff61 100644
--- a/drivers/net/ixgbe/ixgbe_sriov.c
+++ b/drivers/net/ixgbe/ixgbe_sriov.c
@@ -137,6 +137,7 @@ static void ixgbe_set_vmvir(struct ixgbe_adapter *adapter, u32 vid, u32 vf)
137inline void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf) 137inline void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf)
138{ 138{
139 struct ixgbe_hw *hw = &adapter->hw; 139 struct ixgbe_hw *hw = &adapter->hw;
140 int rar_entry = hw->mac.num_rar_entries - (vf + 1);
140 141
141 /* reset offloads to defaults */ 142 /* reset offloads to defaults */
142 if (adapter->vfinfo[vf].pf_vlan) { 143 if (adapter->vfinfo[vf].pf_vlan) {
@@ -158,26 +159,17 @@ inline void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf)
158 /* Flush and reset the mta with the new values */ 159 /* Flush and reset the mta with the new values */
159 ixgbe_set_rx_mode(adapter->netdev); 160 ixgbe_set_rx_mode(adapter->netdev);
160 161
161 if (adapter->vfinfo[vf].rar > 0) { 162 hw->mac.ops.clear_rar(hw, rar_entry);
162 adapter->hw.mac.ops.clear_rar(&adapter->hw,
163 adapter->vfinfo[vf].rar);
164 adapter->vfinfo[vf].rar = -1;
165 }
166} 163}
167 164
168int ixgbe_set_vf_mac(struct ixgbe_adapter *adapter, 165int ixgbe_set_vf_mac(struct ixgbe_adapter *adapter,
169 int vf, unsigned char *mac_addr) 166 int vf, unsigned char *mac_addr)
170{ 167{
171 struct ixgbe_hw *hw = &adapter->hw; 168 struct ixgbe_hw *hw = &adapter->hw;
172 169 int rar_entry = hw->mac.num_rar_entries - (vf + 1);
173 adapter->vfinfo[vf].rar = hw->mac.ops.set_rar(hw, vf + 1, mac_addr,
174 vf, IXGBE_RAH_AV);
175 if (adapter->vfinfo[vf].rar < 0) {
176 e_err("Could not set MAC Filter for VF %d\n", vf);
177 return -1;
178 }
179 170
180 memcpy(adapter->vfinfo[vf].vf_mac_addresses, mac_addr, 6); 171 memcpy(adapter->vfinfo[vf].vf_mac_addresses, mac_addr, 6);
172 hw->mac.ops.set_rar(hw, rar_entry, mac_addr, vf, IXGBE_RAH_AV);
181 173
182 return 0; 174 return 0;
183} 175}