Fixed e1000_open() in e1000e drivers.
This commit is contained in:
parent
4d94396f1a
commit
23d4e442af
|
|
@ -1190,10 +1190,10 @@ static irqreturn_t e1000_intr_msi(int irq, void *data)
|
|||
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;
|
||||
}
|
||||
/*
|
||||
|
|
@ -1294,10 +1294,10 @@ static irqreturn_t e1000_intr(int irq, void *data)
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
@ -1377,9 +1377,9 @@ static irqreturn_t e1000_intr_msix_rx(int irq, void *data)
|
|||
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;
|
||||
|
|
@ -3249,11 +3249,13 @@ static int e1000_open(struct net_device *netdev)
|
|||
/* From here on the code is the same as e1000e_up() */
|
||||
clear_bit(__E1000_DOWN, &adapter->state);
|
||||
|
||||
napi_enable(&adapter->napi);
|
||||
if (!adapter->ecdev) {
|
||||
napi_enable(&adapter->napi);
|
||||
|
||||
e1000_irq_enable(adapter);
|
||||
e1000_irq_enable(adapter);
|
||||
|
||||
netif_start_queue(netdev);
|
||||
netif_start_queue(netdev);
|
||||
}
|
||||
|
||||
/* fire a link status change interrupt to start the watchdog */
|
||||
ew32(ICS, E1000_ICS_LSC);
|
||||
|
|
|
|||
|
|
@ -3237,11 +3237,13 @@ static int e1000_open(struct net_device *netdev)
|
|||
/* From here on the code is the same as e1000e_up() */
|
||||
clear_bit(__E1000_DOWN, &adapter->state);
|
||||
|
||||
napi_enable(&adapter->napi);
|
||||
if (!adapter->ecdev) {
|
||||
napi_enable(&adapter->napi);
|
||||
|
||||
e1000_irq_enable(adapter);
|
||||
e1000_irq_enable(adapter);
|
||||
|
||||
netif_start_queue(netdev);
|
||||
netif_start_queue(netdev);
|
||||
}
|
||||
|
||||
/* fire a link status change interrupt to start the watchdog */
|
||||
ew32(ICS, E1000_ICS_LSC);
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@
|
|||
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
|
||||
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
|
||||
|
||||
vim: noexpandtab
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#include <linux/module.h>
|
||||
|
|
@ -1187,10 +1189,10 @@ static irqreturn_t e1000_intr_msi(int irq, void *data)
|
|||
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;
|
||||
}
|
||||
/*
|
||||
|
|
@ -1291,10 +1293,10 @@ static irqreturn_t e1000_intr(int irq, void *data)
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
@ -1374,9 +1376,9 @@ static irqreturn_t e1000_intr_msix_rx(int irq, void *data)
|
|||
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;
|
||||
|
|
@ -3217,11 +3219,13 @@ static int e1000_open(struct net_device *netdev)
|
|||
/* From here on the code is the same as e1000e_up() */
|
||||
clear_bit(__E1000_DOWN, &adapter->state);
|
||||
|
||||
napi_enable(&adapter->napi);
|
||||
if (!adapter->ecdev) {
|
||||
napi_enable(&adapter->napi);
|
||||
|
||||
e1000_irq_enable(adapter);
|
||||
e1000_irq_enable(adapter);
|
||||
|
||||
netif_start_queue(netdev);
|
||||
netif_start_queue(netdev);
|
||||
}
|
||||
|
||||
/* fire a link status change interrupt to start the watchdog */
|
||||
ew32(ICS, E1000_ICS_LSC);
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@
|
|||
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
|
||||
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
|
||||
|
||||
vim: noexpandtab
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
|
@ -1532,10 +1534,10 @@ static irqreturn_t e1000_intr_msi(int irq, void *data)
|
|||
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;
|
||||
}
|
||||
/*
|
||||
|
|
@ -1636,10 +1638,10 @@ static irqreturn_t e1000_intr(int irq, void *data)
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
@ -1719,9 +1721,9 @@ static irqreturn_t e1000_intr_msix_rx(int irq, void *data)
|
|||
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;
|
||||
|
|
@ -3270,20 +3272,20 @@ int e1000e_up(struct e1000_adapter *adapter)
|
|||
|
||||
if (!adapter->ecdev) {
|
||||
napi_enable(&adapter->napi);
|
||||
}
|
||||
}
|
||||
|
||||
if (adapter->msix_entries)
|
||||
e1000_configure_msix(adapter);
|
||||
if (!adapter->ecdev) {
|
||||
e1000_irq_enable(adapter);
|
||||
e1000_irq_enable(adapter);
|
||||
|
||||
netif_wake_queue(adapter->netdev);
|
||||
netif_wake_queue(adapter->netdev);
|
||||
|
||||
/* fire a link change interrupt to start the watchdog */
|
||||
if (adapter->msix_entries)
|
||||
ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER);
|
||||
else
|
||||
ew32(ICS, E1000_ICS_LSC);
|
||||
/* fire a link 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;
|
||||
|
|
@ -3609,11 +3611,13 @@ static int e1000_open(struct net_device *netdev)
|
|||
/* From here on the code is the same as e1000e_up() */
|
||||
clear_bit(__E1000_DOWN, &adapter->state);
|
||||
|
||||
napi_enable(&adapter->napi);
|
||||
if (!adapter->ecdev) {
|
||||
napi_enable(&adapter->napi);
|
||||
|
||||
e1000_irq_enable(adapter);
|
||||
e1000_irq_enable(adapter);
|
||||
|
||||
netif_start_queue(netdev);
|
||||
netif_start_queue(netdev);
|
||||
}
|
||||
|
||||
adapter->idle_check = true;
|
||||
pm_runtime_put(&pdev->dev);
|
||||
|
|
@ -4031,7 +4035,7 @@ static void e1000_watchdog_task(struct work_struct *work)
|
|||
|
||||
link = e1000e_has_link(adapter);
|
||||
if ((adapter->ecdev && (ecdev_get_link(adapter->ecdev)) && link)
|
||||
|| (!adapter->ecdev && (netif_carrier_ok(netdev)) && link)) {
|
||||
|| (!adapter->ecdev && (netif_carrier_ok(netdev)) && link)) {
|
||||
/* Cancel scheduled suspend requests. */
|
||||
pm_runtime_resume(netdev->dev.parent);
|
||||
|
||||
|
|
@ -5281,9 +5285,9 @@ static int e1000_suspend(struct device *dev)
|
|||
struct net_device *netdev = pci_get_drvdata(pdev);
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
if (adapter->ecdev) {
|
||||
return -EBUSY;
|
||||
}
|
||||
if (adapter->ecdev) {
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
retval = __e1000_shutdown(pdev, &wake, false);
|
||||
if (!retval)
|
||||
|
|
@ -5298,9 +5302,9 @@ static int e1000_resume(struct device *dev)
|
|||
struct net_device *netdev = pci_get_drvdata(pdev);
|
||||
struct e1000_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
if (adapter->ecdev) {
|
||||
return -EBUSY;
|
||||
}
|
||||
if (adapter->ecdev) {
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (e1000e_pm_ready(adapter))
|
||||
adapter->idle_check = true;
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@
|
|||
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
|
||||
Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
|
||||
|
||||
vim: noexpandtab
|
||||
|
||||
*******************************************************************************/
|
||||
|
||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||
|
|
@ -1537,10 +1539,10 @@ static irqreturn_t e1000_intr_msi(int irq, void *data)
|
|||
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;
|
||||
}
|
||||
/*
|
||||
|
|
@ -1641,10 +1643,10 @@ static irqreturn_t e1000_intr(int irq, void *data)
|
|||
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;
|
||||
}
|
||||
|
||||
|
|
@ -1724,9 +1726,9 @@ static irqreturn_t e1000_intr_msix_rx(int irq, void *data)
|
|||
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;
|
||||
|
|
@ -3703,17 +3705,17 @@ static int e1000_open(struct net_device *netdev)
|
|||
e1000_irq_enable(adapter);
|
||||
|
||||
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;
|
||||
|
||||
err_req_irq:
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@
|
|||
e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
|
||||
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 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter,
|
|||
} 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 @@ static void e1000_print_hw_hang(struct work_struct *work)
|
|||
}
|
||||
/* 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 @@ static irqreturn_t e1000_intr_msi(int irq, void *data)
|
|||
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 @@ static irqreturn_t e1000_intr(int irq, void *data)
|
|||
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 @@ static irqreturn_t e1000_intr_msix_rx(int irq, void *data)
|
|||
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,20 +3875,23 @@ static int e1000_open(struct net_device *netdev)
|
|||
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;
|
||||
|
||||
err_req_irq:
|
||||
|
|
|
|||
Loading…
Reference in New Issue