From d84b7e29d8ea049c352af89db69cff7e791a9418 Mon Sep 17 00:00:00 2001 From: Mark Einon Date: Sat, 1 Oct 2011 11:14:14 +0100 Subject: [PATCH] staging: et131x: Fix add_timer() from et131x_open The error_timer was only getting initialised and an initial jiffies value set following a probe. This could result in the timer needlessly expiring immediately after et131x_open is called. Now this is all done from the open call instead. Signed-off-by: Mark Einon Signed-off-by: Greg Kroah-Hartman --- drivers/staging/et131x/README | 1 - drivers/staging/et131x/et131x.h | 1 + drivers/staging/et131x/et131x_initpci.c | 7 ------- drivers/staging/et131x/et131x_netdev.c | 4 ++++ 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/drivers/staging/et131x/README b/drivers/staging/et131x/README index 42c388d..a0ebaa0 100644 --- a/drivers/staging/et131x/README +++ b/drivers/staging/et131x/README @@ -9,7 +9,6 @@ Note, the powermanagement options were removed from the vendor provided driver as they did not build properly at the time. TODO: - - add_timer call in et131x_netdev.c is correct? - Implement a few more kernel Parameter (set mac ) Please send patches to: diff --git a/drivers/staging/et131x/et131x.h b/drivers/staging/et131x/et131x.h index 15486d1..c8f5ab1 100644 --- a/drivers/staging/et131x/et131x.h +++ b/drivers/staging/et131x/et131x.h @@ -52,6 +52,7 @@ int et131x_init_eeprom(struct et131x_adapter *adapter); /* et131x_initpci.c */ +void et131x_error_timer_handler(unsigned long data); void et131x_configure_global_regs(struct et131x_adapter *adapter); void et131x_enable_interrupts(struct et131x_adapter *adapter); void et131x_disable_interrupts(struct et131x_adapter *adapter); diff --git a/drivers/staging/et131x/et131x_initpci.c b/drivers/staging/et131x/et131x_initpci.c index e166fde..8bff4a0 100644 --- a/drivers/staging/et131x/et131x_initpci.c +++ b/drivers/staging/et131x/et131x_initpci.c @@ -750,10 +750,6 @@ static int __devinit et131x_pci_setup(struct pci_dev *pdev, /* Copy address into the net_device struct */ memcpy(netdev->dev_addr, adapter->addr, ETH_ALEN); - adapter->error_timer.expires = jiffies + TX_ERROR_PERIOD * HZ / 1000; - adapter->error_timer.function = et131x_error_timer_handler; - adapter->error_timer.data = (unsigned long)adapter; - /* Init variable for counting how long we do not have link status */ adapter->boot_coma = 0; et1310_disable_phy_coma(adapter); @@ -795,9 +791,6 @@ static int __devinit et131x_pci_setup(struct pci_dev *pdev, /* Setup et1310 as per the documentation */ et131x_adapter_setup(adapter); - /* Create a timer to count errors received by the NIC */ - init_timer(&adapter->error_timer); - /* We can enable interrupts now * * NOTE - Because registration of interrupt handler is done in the diff --git a/drivers/staging/et131x/et131x_netdev.c b/drivers/staging/et131x/et131x_netdev.c index 6ec4a0f..2184682 100644 --- a/drivers/staging/et131x/et131x_netdev.c +++ b/drivers/staging/et131x/et131x_netdev.c @@ -187,6 +187,10 @@ int et131x_open(struct net_device *netdev) struct et131x_adapter *adapter = netdev_priv(netdev); /* Start the timer to track NIC errors */ + init_timer(&adapter->error_timer); + adapter->error_timer.expires = jiffies + TX_ERROR_PERIOD * HZ / 1000; + adapter->error_timer.function = et131x_error_timer_handler; + adapter->error_timer.data = (unsigned long)adapter; add_timer(&adapter->error_timer); /* Register our IRQ */ -- 2.7.4