mirror of
https://github.com/adulau/aha.git
synced 2024-12-29 04:06:22 +00:00
[PATCH] e100: Execute tx_timeout task outside interrupt context
Execute tx_timeout task outside the interrupt context Signed-off-by: Mallikarjuna R Chilakala <mallikarjuna.chilakala@intel.com> Signed-off-by: Ganesh Venkatesan <ganesh.venkatesan@intel.com> Signed-off-by: John Ronciak <john.ronciak@intel.com>
This commit is contained in:
parent
88d7bd8cb9
commit
2acdb1e05c
1 changed files with 13 additions and 0 deletions
|
@ -539,6 +539,7 @@ struct nic {
|
||||||
struct timer_list watchdog;
|
struct timer_list watchdog;
|
||||||
struct timer_list blink_timer;
|
struct timer_list blink_timer;
|
||||||
struct mii_if_info mii;
|
struct mii_if_info mii;
|
||||||
|
struct work_struct tx_timeout_task;
|
||||||
enum loopback loopback;
|
enum loopback loopback;
|
||||||
|
|
||||||
struct mem *mem;
|
struct mem *mem;
|
||||||
|
@ -1716,6 +1717,15 @@ static void e100_tx_timeout(struct net_device *netdev)
|
||||||
{
|
{
|
||||||
struct nic *nic = netdev_priv(netdev);
|
struct nic *nic = netdev_priv(netdev);
|
||||||
|
|
||||||
|
/* Reset outside of interrupt context, to avoid request_irq
|
||||||
|
* in interrupt context */
|
||||||
|
schedule_work(&nic->tx_timeout_task);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void e100_tx_timeout_task(struct net_device *netdev)
|
||||||
|
{
|
||||||
|
struct nic *nic = netdev_priv(netdev);
|
||||||
|
|
||||||
DPRINTK(TX_ERR, DEBUG, "scb.status=0x%02X\n",
|
DPRINTK(TX_ERR, DEBUG, "scb.status=0x%02X\n",
|
||||||
readb(&nic->csr->scb.status));
|
readb(&nic->csr->scb.status));
|
||||||
e100_down(netdev_priv(netdev));
|
e100_down(netdev_priv(netdev));
|
||||||
|
@ -2240,6 +2250,9 @@ static int __devinit e100_probe(struct pci_dev *pdev,
|
||||||
nic->blink_timer.function = e100_blink_led;
|
nic->blink_timer.function = e100_blink_led;
|
||||||
nic->blink_timer.data = (unsigned long)nic;
|
nic->blink_timer.data = (unsigned long)nic;
|
||||||
|
|
||||||
|
INIT_WORK(&nic->tx_timeout_task,
|
||||||
|
(void (*)(void *))e100_tx_timeout_task, netdev);
|
||||||
|
|
||||||
if((err = e100_alloc(nic))) {
|
if((err = e100_alloc(nic))) {
|
||||||
DPRINTK(PROBE, ERR, "Cannot alloc driver memory, aborting.\n");
|
DPRINTK(PROBE, ERR, "Cannot alloc driver memory, aborting.\n");
|
||||||
goto err_out_iounmap;
|
goto err_out_iounmap;
|
||||||
|
|
Loading…
Reference in a new issue