aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/igb
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2011-08-26 03:46:08 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2011-10-08 01:50:57 -0400
commit5faf030c9b6cc48c33301b4f3341f2b5c374f6b5 (patch)
tree59bce12b42e76a90758c46f3c80a11e0590b128a /drivers/net/ethernet/intel/igb
parent3ceb90fd4898853cdac43084f0c6ee7270cb15f3 (diff)
igb: fix recent VLAN changes that would leave VLANs disabled after reset
This patch cleans up several issues with VLANs on igb after the recent changes that were meant to leave the VLANs enabled/disable via the netdev->features flags. Specifically the Rx VLAN settings were being dropped after reset due to the fact that they were not being restored correctly. In addition I removed the IRQ disable/enable since those were in place to protect the setting of vlgrp. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/igb')
-rw-r--r--drivers/net/ethernet/intel/igb/igb_main.c18
1 files changed, 4 insertions, 14 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index 1419ae89e29..971aea9843d 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -2112,8 +2112,6 @@ static int __devinit igb_probe(struct pci_dev *pdev,
2112 if (err) 2112 if (err)
2113 goto err_register; 2113 goto err_register;
2114 2114
2115 igb_vlan_mode(netdev, netdev->features);
2116
2117 /* carrier off reporting is important to ethtool even BEFORE open */ 2115 /* carrier off reporting is important to ethtool even BEFORE open */
2118 netif_carrier_off(netdev); 2116 netif_carrier_off(netdev);
2119 2117
@@ -5120,7 +5118,6 @@ static s32 igb_vlvf_set(struct igb_adapter *adapter, u32 vid, bool add, u32 vf)
5120 } 5118 }
5121 5119
5122 adapter->vf_data[vf].vlans_enabled++; 5120 adapter->vf_data[vf].vlans_enabled++;
5123 return 0;
5124 } 5121 }
5125 } else { 5122 } else {
5126 if (i < E1000_VLVF_ARRAY_SIZE) { 5123 if (i < E1000_VLVF_ARRAY_SIZE) {
@@ -6385,10 +6382,9 @@ static void igb_vlan_mode(struct net_device *netdev, u32 features)
6385 struct igb_adapter *adapter = netdev_priv(netdev); 6382 struct igb_adapter *adapter = netdev_priv(netdev);
6386 struct e1000_hw *hw = &adapter->hw; 6383 struct e1000_hw *hw = &adapter->hw;
6387 u32 ctrl, rctl; 6384 u32 ctrl, rctl;
6385 bool enable = !!(features & NETIF_F_HW_VLAN_RX);
6388 6386
6389 igb_irq_disable(adapter); 6387 if (enable) {
6390
6391 if (features & NETIF_F_HW_VLAN_RX) {
6392 /* enable VLAN tag insert/strip */ 6388 /* enable VLAN tag insert/strip */
6393 ctrl = rd32(E1000_CTRL); 6389 ctrl = rd32(E1000_CTRL);
6394 ctrl |= E1000_CTRL_VME; 6390 ctrl |= E1000_CTRL_VME;
@@ -6406,9 +6402,6 @@ static void igb_vlan_mode(struct net_device *netdev, u32 features)
6406 } 6402 }
6407 6403
6408 igb_rlpml_set(adapter); 6404 igb_rlpml_set(adapter);
6409
6410 if (!test_bit(__IGB_DOWN, &adapter->state))
6411 igb_irq_enable(adapter);
6412} 6405}
6413 6406
6414static void igb_vlan_rx_add_vid(struct net_device *netdev, u16 vid) 6407static void igb_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
@@ -6433,11 +6426,6 @@ static void igb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
6433 int pf_id = adapter->vfs_allocated_count; 6426 int pf_id = adapter->vfs_allocated_count;
6434 s32 err; 6427 s32 err;
6435 6428
6436 igb_irq_disable(adapter);
6437
6438 if (!test_bit(__IGB_DOWN, &adapter->state))
6439 igb_irq_enable(adapter);
6440
6441 /* remove vlan from VLVF table array */ 6429 /* remove vlan from VLVF table array */
6442 err = igb_vlvf_set(adapter, vid, false, pf_id); 6430 err = igb_vlvf_set(adapter, vid, false, pf_id);
6443 6431
@@ -6452,6 +6440,8 @@ static void igb_restore_vlan(struct igb_adapter *adapter)
6452{ 6440{
6453 u16 vid; 6441 u16 vid;
6454 6442
6443 igb_vlan_mode(adapter->netdev, adapter->netdev->features);
6444
6455 for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID) 6445 for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID)
6456 igb_vlan_rx_add_vid(adapter->netdev, vid); 6446 igb_vlan_rx_add_vid(adapter->netdev, vid);
6457} 6447}