aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/e1000e
diff options
context:
space:
mode:
authorJeff Kirsher <jeffrey.t.kirsher@intel.com>2008-07-18 07:33:03 -0400
committerDavid S. Miller <davem@davemloft.net>2008-07-18 07:33:03 -0400
commitd55b53fff0c2ddb639dca04c3f5a0854f292d982 (patch)
tree39164a0c3a820f0767f2ad98c828a36c35c9b1da /drivers/net/e1000e
parentb6fcbdb4f283f7ba67cec3cda6be23da8e959031 (diff)
igb/ixgbe/e1000e: resolve tx multiqueue bug
With the recent changes to tx mutiqueue, igb/ixgbe/e1000e was not calling netif_tx_start_all_queues() before calling netif_tx_wake_all_queues(). This causes an issue during loading of the driver. In addition, updated e1000e to use the updated tx mutliqueue api. Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/e1000e')
-rw-r--r--drivers/net/e1000e/netdev.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
index be5953385bf6..869544b8c05c 100644
--- a/drivers/net/e1000e/netdev.c
+++ b/drivers/net/e1000e/netdev.c
@@ -2513,7 +2513,7 @@ void e1000e_down(struct e1000_adapter *adapter)
2513 ew32(RCTL, rctl & ~E1000_RCTL_EN); 2513 ew32(RCTL, rctl & ~E1000_RCTL_EN);
2514 /* flush and sleep below */ 2514 /* flush and sleep below */
2515 2515
2516 netif_stop_queue(netdev); 2516 netif_tx_stop_all_queues(netdev);
2517 2517
2518 /* disable transmits in the hardware */ 2518 /* disable transmits in the hardware */
2519 tctl = er32(TCTL); 2519 tctl = er32(TCTL);
@@ -2663,6 +2663,8 @@ static int e1000_open(struct net_device *netdev)
2663 2663
2664 e1000_irq_enable(adapter); 2664 e1000_irq_enable(adapter);
2665 2665
2666 netif_tx_start_all_queues(netdev);
2667
2666 /* fire a link status change interrupt to start the watchdog */ 2668 /* fire a link status change interrupt to start the watchdog */
2667 ew32(ICS, E1000_ICS_LSC); 2669 ew32(ICS, E1000_ICS_LSC);
2668 2670
@@ -3118,7 +3120,7 @@ static void e1000_watchdog_task(struct work_struct *work)
3118 ew32(TCTL, tctl); 3120 ew32(TCTL, tctl);
3119 3121
3120 netif_carrier_on(netdev); 3122 netif_carrier_on(netdev);
3121 netif_wake_queue(netdev); 3123 netif_tx_wake_all_queues(netdev);
3122 3124
3123 if (!test_bit(__E1000_DOWN, &adapter->state)) 3125 if (!test_bit(__E1000_DOWN, &adapter->state))
3124 mod_timer(&adapter->phy_info_timer, 3126 mod_timer(&adapter->phy_info_timer,
@@ -3130,7 +3132,7 @@ static void e1000_watchdog_task(struct work_struct *work)
3130 adapter->link_duplex = 0; 3132 adapter->link_duplex = 0;
3131 ndev_info(netdev, "Link is Down\n"); 3133 ndev_info(netdev, "Link is Down\n");
3132 netif_carrier_off(netdev); 3134 netif_carrier_off(netdev);
3133 netif_stop_queue(netdev); 3135 netif_tx_stop_all_queues(netdev);
3134 if (!test_bit(__E1000_DOWN, &adapter->state)) 3136 if (!test_bit(__E1000_DOWN, &adapter->state))
3135 mod_timer(&adapter->phy_info_timer, 3137 mod_timer(&adapter->phy_info_timer,
3136 round_jiffies(jiffies + 2 * HZ)); 3138 round_jiffies(jiffies + 2 * HZ));
@@ -4504,7 +4506,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
4504 4506
4505 /* tell the stack to leave us alone until e1000_open() is called */ 4507 /* tell the stack to leave us alone until e1000_open() is called */
4506 netif_carrier_off(netdev); 4508 netif_carrier_off(netdev);
4507 netif_stop_queue(netdev); 4509 netif_tx_stop_all_queues(netdev);
4508 4510
4509 strcpy(netdev->name, "eth%d"); 4511 strcpy(netdev->name, "eth%d");
4510 err = register_netdev(netdev); 4512 err = register_netdev(netdev);