ath79: ag71xx: add support for timer functions in linux 4.15+
authorChuanhong Guo <gch981213@gmail.com>
Wed, 12 Dec 2018 11:09:35 +0000 (19:09 +0800)
committerPetr Štetiar <ynezz@true.cz>
Sun, 24 Mar 2019 00:44:24 +0000 (01:44 +0100)
Kernel newer than 4.15 dropped "data" field and used from_timer
to cast out the parent struct pointer for current timer.

Signed-off-by: Chuanhong Guo <gch981213@gmail.com>
target/linux/ath79/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c

index b7b32f85db353f0ec151297a28b3ed2d3720b916..f03c6b40a64e24bae8fe0d7c164b7a94532b2cb1 100644 (file)
@@ -985,10 +985,16 @@ static int ag71xx_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
        return -EOPNOTSUPP;
 }
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0))
 static void ag71xx_oom_timer_handler(unsigned long data)
 {
        struct net_device *dev = (struct net_device *) data;
        struct ag71xx *ag = netdev_priv(dev);
+#else
+static void ag71xx_oom_timer_handler(struct timer_list *t)
+{
+       struct ag71xx *ag = from_timer(ag, t, oom_timer);
+#endif
 
        napi_schedule(&ag->napi);
 }
@@ -1401,9 +1407,13 @@ static int ag71xx_probe(struct platform_device *pdev)
 
        INIT_DELAYED_WORK(&ag->restart_work, ag71xx_restart_work_func);
 
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,15,0))
        init_timer(&ag->oom_timer);
        ag->oom_timer.data = (unsigned long) dev;
        ag->oom_timer.function = ag71xx_oom_timer_handler;
+#else
+       timer_setup(&ag->oom_timer, ag71xx_oom_timer_handler, 0);
+#endif
 
        tx_size = AG71XX_TX_RING_SIZE_DEFAULT;
        ag->rx_ring.order = ag71xx_ring_size_order(AG71XX_RX_RING_SIZE_DEFAULT);