aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
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
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')
-rw-r--r--drivers/net/e1000e/netdev.c10
-rw-r--r--drivers/net/igb/igb_main.c2
-rw-r--r--drivers/net/ixgbe/ixgbe_main.c2
3 files changed, 10 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);
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
index 81bba6983dde..1b7cb29fe68e 100644
--- a/drivers/net/igb/igb_main.c
+++ b/drivers/net/igb/igb_main.c
@@ -1493,6 +1493,8 @@ static int igb_open(struct net_device *netdev)
1493 1493
1494 igb_irq_enable(adapter); 1494 igb_irq_enable(adapter);
1495 1495
1496 netif_tx_start_all_queues(netdev);
1497
1496 /* Fire a link status change interrupt to start the watchdog. */ 1498 /* Fire a link status change interrupt to start the watchdog. */
1497 wr32(E1000_ICS, E1000_ICS_LSC); 1499 wr32(E1000_ICS, E1000_ICS_LSC);
1498 1500
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index 6af8fb5c4b5f..be7b723c924f 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -2765,6 +2765,8 @@ static int ixgbe_open(struct net_device *netdev)
2765 if (err) 2765 if (err)
2766 goto err_up; 2766 goto err_up;
2767 2767
2768 netif_tx_start_all_queues(netdev);
2769
2768 return 0; 2770 return 0;
2769 2771
2770err_up: 2772err_up: