aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/igb/igb_main.c
diff options
context:
space:
mode:
authorCarolyn Wyborny <carolyn.wyborny@intel.com>2011-10-13 20:13:49 -0400
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2011-10-21 06:19:39 -0400
commit1128c756bef8285db3bbde5b26d4a6b4c7e2e613 (patch)
tree265057e706f6d147c72099deb2b21f2fd74b6b33 /drivers/net/ethernet/intel/igb/igb_main.c
parentb6e0c419f040cee87813660bb4efd1fe43a8ebee (diff)
igb: VFTA Table Fix for i350 devices
Due to a hardware problem, writes to the VFTA register can theoretically fail. Although the likelihood of this is very low. This patch adds a shadow vfta in the adapter struct for reading and adds new write functions for these devices to work around the problem. Signed-off-by: Carolyn Wyborny <carolyn.wyborny@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/igb_main.c')
-rw-r--r--drivers/net/ethernet/intel/igb/igb_main.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index b1863531e03f..ced544499f1b 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -2206,6 +2206,7 @@ static void __devexit igb_remove(struct pci_dev *pdev)
2206 pci_release_selected_regions(pdev, 2206 pci_release_selected_regions(pdev,
2207 pci_select_bars(pdev, IORESOURCE_MEM)); 2207 pci_select_bars(pdev, IORESOURCE_MEM));
2208 2208
2209 kfree(adapter->shadow_vfta);
2209 free_netdev(netdev); 2210 free_netdev(netdev);
2210 2211
2211 pci_disable_pcie_error_reporting(pdev); 2212 pci_disable_pcie_error_reporting(pdev);
@@ -2438,6 +2439,11 @@ static int __devinit igb_sw_init(struct igb_adapter *adapter)
2438 ((adapter->rss_queues > 1) && (adapter->vfs_allocated_count > 6))) 2439 ((adapter->rss_queues > 1) && (adapter->vfs_allocated_count > 6)))
2439 adapter->flags |= IGB_FLAG_QUEUE_PAIRS; 2440 adapter->flags |= IGB_FLAG_QUEUE_PAIRS;
2440 2441
2442 /* Setup and initialize a copy of the hw vlan table array */
2443 adapter->shadow_vfta = kzalloc(sizeof(u32) *
2444 E1000_VLAN_FILTER_TBL_SIZE,
2445 GFP_ATOMIC);
2446
2441 /* This call may decrease the number of queues */ 2447 /* This call may decrease the number of queues */
2442 if (igb_init_interrupt_scheme(adapter)) { 2448 if (igb_init_interrupt_scheme(adapter)) {
2443 dev_err(&pdev->dev, "Unable to allocate memory for queues\n"); 2449 dev_err(&pdev->dev, "Unable to allocate memory for queues\n");