[PATCH] drivers/net: amd: Convert timers to use timer_setup()

2017-10-26 Thread Kees Cook
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: Tom Lendacky 
Cc: "David S. Miller" 
Cc: Allen Pais 
Cc: netdev@vger.kernel.org
Signed-off-by: Kees Cook 
---
 drivers/net/ethernet/amd/a2065.c | 13 ++---
 drivers/net/ethernet/amd/am79c961a.c |  9 +
 drivers/net/ethernet/amd/am79c961a.h |  1 +
 drivers/net/ethernet/amd/declance.c  | 10 ++
 drivers/net/ethernet/amd/pcnet32.c   | 10 +-
 drivers/net/ethernet/amd/sunlance.c  |  8 
 drivers/net/ethernet/amd/xgbe/xgbe-drv.c | 14 ++
 7 files changed, 37 insertions(+), 28 deletions(-)

diff --git a/drivers/net/ethernet/amd/a2065.c b/drivers/net/ethernet/amd/a2065.c
index 998d30e050a6..212fe72a190b 100644
--- a/drivers/net/ethernet/amd/a2065.c
+++ b/drivers/net/ethernet/amd/a2065.c
@@ -123,6 +123,7 @@ struct lance_private {
int burst_sizes;  /* ledma SBus burst sizes */
 #endif
struct timer_list multicast_timer;
+   struct net_device *dev;
 };
 
 #define LANCE_ADDR(x) ((int)(x) & ~0xff00)
@@ -638,6 +639,13 @@ static void lance_set_multicast(struct net_device *dev)
netif_wake_queue(dev);
 }
 
+static void lance_set_multicast_retry(struct timer_list *t)
+{
+   struct lance_private *lp = from_timer(lp, t, multicast_timer);
+
+   lance_set_multicast(lp->dev);
+}
+
 static int a2065_init_one(struct zorro_dev *z,
  const struct zorro_device_id *ent);
 static void a2065_remove_one(struct zorro_dev *z);
@@ -728,14 +736,13 @@ static int a2065_init_one(struct zorro_dev *z,
priv->lance_log_tx_bufs = LANCE_LOG_TX_BUFFERS;
priv->rx_ring_mod_mask = RX_RING_MOD_MASK;
priv->tx_ring_mod_mask = TX_RING_MOD_MASK;
+   priv->dev = dev;
 
dev->netdev_ops = &lance_netdev_ops;
dev->watchdog_timeo = 5*HZ;
dev->dma = 0;
 
-   setup_timer(&priv->multicast_timer,
-   (void(*)(unsigned long))lance_set_multicast,
-   (unsigned long)dev);
+   timer_setup(&priv->multicast_timer, lance_set_multicast_retry, 0);
 
err = register_netdev(dev);
if (err) {
diff --git a/drivers/net/ethernet/amd/am79c961a.c 
b/drivers/net/ethernet/amd/am79c961a.c
index 0612dbee00d2..01d132c02ff9 100644
--- a/drivers/net/ethernet/amd/am79c961a.c
+++ b/drivers/net/ethernet/amd/am79c961a.c
@@ -302,10 +302,10 @@ am79c961_init_for_open(struct net_device *dev)
write_rreg (dev->base_addr, CSR0, CSR0_IENA|CSR0_STRT);
 }
 
-static void am79c961_timer(unsigned long data)
+static void am79c961_timer(struct timer_list *t)
 {
-   struct net_device *dev = (struct net_device *)data;
-   struct dev_priv *priv = netdev_priv(dev);
+   struct dev_priv *priv = from_timer(priv, t, timer);
+   struct net_device *dev = priv->dev;
unsigned int lnkstat, carrier;
unsigned long flags;
 
@@ -728,7 +728,8 @@ static int am79c961_probe(struct platform_device *pdev)
am79c961_banner();
 
spin_lock_init(&priv->chip_lock);
-   setup_timer(&priv->timer, am79c961_timer, (unsigned long)dev);
+   priv->dev = dev;
+   timer_setup(&priv->timer, am79c961_timer, 0);
 
if (am79c961_hw_init(dev))
goto release;
diff --git a/drivers/net/ethernet/amd/am79c961a.h 
b/drivers/net/ethernet/amd/am79c961a.h
index 9f384b79507b..fc5088c70731 100644
--- a/drivers/net/ethernet/amd/am79c961a.h
+++ b/drivers/net/ethernet/amd/am79c961a.h
@@ -140,6 +140,7 @@ struct dev_priv {
 unsigned long  txhdr;
 spinlock_t chip_lock;
 struct timer_list  timer;
+struct net_device   *dev;
 };
 
 #endif
diff --git a/drivers/net/ethernet/amd/declance.c 
b/drivers/net/ethernet/amd/declance.c
index 9bdf81c2cd00..116997a8b593 100644
--- a/drivers/net/ethernet/amd/declance.c
+++ b/drivers/net/ethernet/amd/declance.c
@@ -260,6 +260,7 @@ struct lance_private {
unsigned short busmaster_regval;
 
struct timer_list   multicast_timer;
+   struct net_device   *dev;
 
/* Pointers to the ring buffers as seen from the CPU */
char *rx_buf_ptr_cpu[RX_RING_SIZE];
@@ -1000,9 +1001,10 @@ static void lance_set_multicast(struct net_device *dev)
netif_wake_queue(dev);
 }
 
-static void lance_set_multicast_retry(unsigned long _opaque)
+static void lance_set_multicast_retry(struct timer_list *t)
 {
-   struct net_device *dev = (struct net_device *) _opaque;
+   struct lance_private *lp = from_timer(lp, t, multicast_timer);
+   struct net_device *dev = lp->dev;
 
lance_set_multicast(dev);
 }
@@ -1246,8 +1248,8 @@ static int dec_lance_probe(struct device *bdev, const int 
type)
 * can occur from interrupts (ex. IPv6).  So we
 * use a timer to try again later when necessary. -DaveM
 */
-   set

Re: [PATCH] drivers/net: amd: Convert timers to use timer_setup()

2017-10-28 Thread David Miller
From: Kees Cook 
Date: Thu, 26 Oct 2017 22:54:38 -0700

> 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: Tom Lendacky 
> Cc: "David S. Miller" 
> Cc: Allen Pais 
> Cc: netdev@vger.kernel.org
> Signed-off-by: Kees Cook 

Applied.