In preparation for unconditionally passing the struct timer_list pointer to
all timer callbacks, switch to using the new timer_setup() and from_timer()
to pass the timer pointer explicitly.

Cc: "David S. Miller" <da...@davemloft.net>
Cc: Zhu Yanjun <yanjun....@oracle.com>
Cc: Philippe Reynes <trem...@gmail.com>
Cc: netdev@vger.kernel.org
Cc: Thomas Gleixner <t...@linutronix.de>
Signed-off-by: Kees Cook <keesc...@chromium.org>
---
This requires commit 686fef928bba ("timer: Prepare to change timer
callback argument type") in v4.14-rc3, but should be otherwise
stand-alone.
---
 drivers/net/ethernet/nvidia/forcedeth.c | 28 ++++++++++++++--------------
 1 file changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/net/ethernet/nvidia/forcedeth.c 
b/drivers/net/ethernet/nvidia/forcedeth.c
index 994a83a1f0a5..277b233c781f 100644
--- a/drivers/net/ethernet/nvidia/forcedeth.c
+++ b/drivers/net/ethernet/nvidia/forcedeth.c
@@ -1884,10 +1884,9 @@ static int nv_alloc_rx_optimized(struct net_device *dev)
 }
 
 /* If rx bufs are exhausted called after 50ms to attempt to refresh */
-static void nv_do_rx_refill(unsigned long data)
+static void nv_do_rx_refill(struct timer_list *t)
 {
-       struct net_device *dev = (struct net_device *) data;
-       struct fe_priv *np = netdev_priv(dev);
+       struct fe_priv *np = from_timer(np, t, oom_kick);
 
        /* Just reschedule NAPI rx processing */
        napi_schedule(&np->napi);
@@ -4061,10 +4060,10 @@ static void nv_free_irq(struct net_device *dev)
        }
 }
 
-static void nv_do_nic_poll(unsigned long data)
+static void nv_do_nic_poll(struct timer_list *t)
 {
-       struct net_device *dev = (struct net_device *) data;
-       struct fe_priv *np = netdev_priv(dev);
+       struct fe_priv *np = from_timer(np, t, nic_poll);
+       struct net_device *dev = np->dev;
        u8 __iomem *base = get_hwbase(dev);
        u32 mask = 0;
        unsigned long flags;
@@ -4172,16 +4171,18 @@ static void nv_do_nic_poll(unsigned long data)
 #ifdef CONFIG_NET_POLL_CONTROLLER
 static void nv_poll_controller(struct net_device *dev)
 {
-       nv_do_nic_poll((unsigned long) dev);
+       struct fe_priv *np = netdev_priv(dev);
+
+       nv_do_nic_poll(&np->nic_poll);
 }
 #endif
 
-static void nv_do_stats_poll(unsigned long data)
+static void nv_do_stats_poll(struct timer_list *t)
        __acquires(&netdev_priv(dev)->hwstats_lock)
        __releases(&netdev_priv(dev)->hwstats_lock)
 {
-       struct net_device *dev = (struct net_device *) data;
-       struct fe_priv *np = netdev_priv(dev);
+       struct fe_priv *np = from_timer(np, t, stats_poll);
+       struct net_device *dev = np->dev;
 
        /* If lock is currently taken, the stats are being refreshed
         * and hence fresh enough */
@@ -5627,10 +5628,9 @@ static int nv_probe(struct pci_dev *pci_dev, const 
struct pci_device_id *id)
        u64_stats_init(&np->swstats_rx_syncp);
        u64_stats_init(&np->swstats_tx_syncp);
 
-       setup_timer(&np->oom_kick, nv_do_rx_refill, (unsigned long)dev);
-       setup_timer(&np->nic_poll, nv_do_nic_poll, (unsigned long)dev);
-       setup_deferrable_timer(&np->stats_poll, nv_do_stats_poll,
-                              (unsigned long)dev);
+       timer_setup(&np->oom_kick, nv_do_rx_refill, 0);
+       timer_setup(&np->nic_poll, nv_do_nic_poll, 0);
+       timer_setup(&np->stats_poll, nv_do_stats_poll, TIMER_DEFERRABLE);
 
        err = pci_enable_device(pci_dev);
        if (err)
-- 
2.7.4


-- 
Kees Cook
Pixel Security

Reply via email to