diff options
author | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2008-07-18 07:33:03 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-07-18 07:33:03 -0400 |
commit | d55b53fff0c2ddb639dca04c3f5a0854f292d982 (patch) | |
tree | 39164a0c3a820f0767f2ad98c828a36c35c9b1da /drivers | |
parent | b6fcbdb4f283f7ba67cec3cda6be23da8e959031 (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.c | 10 | ||||
-rw-r--r-- | drivers/net/igb/igb_main.c | 2 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_main.c | 2 |
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 | ||
2770 | err_up: | 2772 | err_up: |