diff -r 50b861e981f7 -r f62b64fdbc23 devices/e1000e/netdev-3.2-ethercat.c --- a/devices/e1000e/netdev-3.2-ethercat.c Wed Dec 05 12:02:44 2012 +0100 +++ b/devices/e1000e/netdev-3.2-ethercat.c Wed Dec 05 12:15:49 2012 +0100 @@ -24,6 +24,8 @@ e1000-devel Mailing List Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 + vim: noexpandtab + *******************************************************************************/ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt @@ -984,7 +986,7 @@ } else { e1000_receive_skb(adapter, netdev, skb, staterr, rx_desc->wb.upper.vlan); - } + } next_desc: rx_desc->wb.upper.status_error &= cpu_to_le32(~0xFF); @@ -1065,7 +1067,9 @@ } /* Real hang detected */ adapter->tx_hang_recheck = false; - netif_stop_queue(netdev); + if (!adapter->ecdev) { + netif_stop_queue(netdev); + } e1e_rphy(hw, PHY_STATUS, &phy_status); e1e_rphy(hw, PHY_1000T_STATUS, &phy_1000t_status); @@ -1664,10 +1668,10 @@ struct e1000_hw *hw = &adapter->hw; u32 icr = er32(ICR); - if (adapter->ecdev) { - int ec_work_done = 0; - adapter->clean_rx(adapter, &ec_work_done, 100); - e1000_clean_tx_irq(adapter); + if (adapter->ecdev) { + int ec_work_done = 0; + adapter->clean_rx(adapter, &ec_work_done, 100); + e1000_clean_tx_irq(adapter); return IRQ_HANDLED; } /* @@ -1768,10 +1772,10 @@ mod_timer(&adapter->watchdog_timer, jiffies + 1); } - if (adapter->ecdev) { - int ec_work_done = 0; - adapter->clean_rx(adapter, &ec_work_done, 100); - e1000_clean_tx_irq(adapter); + if (adapter->ecdev) { + int ec_work_done = 0; + adapter->clean_rx(adapter, &ec_work_done, 100); + e1000_clean_tx_irq(adapter); return IRQ_HANDLED; } @@ -1851,9 +1855,9 @@ adapter->rx_ring->set_itr = 0; } - if (adapter->ecdev) { - int ec_work_done = 0; - adapter->clean_rx(adapter, &ec_work_done, 100); + if (adapter->ecdev) { + int ec_work_done = 0; + adapter->clean_rx(adapter, &ec_work_done, 100); } else { if (napi_schedule_prep(&adapter->napi)) { adapter->total_rx_bytes = 0; @@ -3871,19 +3875,22 @@ napi_enable(&adapter->napi); e1000_irq_enable(adapter); + } adapter->tx_hang_recheck = false; + + if (!adapter->ecdev) { netif_start_queue(netdev); - - adapter->idle_check = true; - pm_runtime_put(&pdev->dev); - - /* fire a link status change interrupt to start the watchdog */ - if (adapter->msix_entries) - ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER); - else - ew32(ICS, E1000_ICS_LSC); - } + } + + adapter->idle_check = true; + pm_runtime_put(&pdev->dev); + + /* fire a link status change interrupt to start the watchdog */ + if (adapter->msix_entries) + ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER); + else + ew32(ICS, E1000_ICS_LSC); return 0;