]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
s390/cio: Convert timers to use timer_setup()
authorKees Cook <keescook@chromium.org>
Mon, 16 Oct 2017 23:43:25 +0000 (16:43 -0700)
committerHeiko Carstens <heiko.carstens@de.ibm.com>
Tue, 14 Nov 2017 10:01:36 +0000 (11:01 +0100)
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: Sebastian Ott <sebott@linux.vnet.ibm.com>
Cc: Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
drivers/s390/cio/device.c
drivers/s390/cio/device.h
drivers/s390/cio/device_fsm.c
drivers/s390/cio/eadm_sch.c

index e5c32f4b5287ebc4da569d403475d5624bac43ef..318d8269f5dee10c56114224b4a08b8b617a96da 100644 (file)
@@ -142,7 +142,7 @@ static void io_subchannel_shutdown(struct subchannel *);
 static int io_subchannel_sch_event(struct subchannel *, int);
 static int io_subchannel_chp_event(struct subchannel *, struct chp_link *,
                                   int);
-static void recovery_func(unsigned long data);
+static void recovery_func(struct timer_list *unused);
 
 static struct css_device_id io_subchannel_ids[] = {
        { .match_flags = 0x1, .type = SUBCHANNEL_TYPE_IO, },
@@ -194,7 +194,7 @@ int __init io_subchannel_init(void)
 {
        int ret;
 
-       setup_timer(&recovery_timer, recovery_func, 0);
+       timer_setup(&recovery_timer, recovery_func, 0);
        ret = bus_register(&ccw_bus_type);
        if (ret)
                return ret;
@@ -726,7 +726,7 @@ static int io_subchannel_initialize_dev(struct subchannel *sch,
        INIT_WORK(&priv->todo_work, ccw_device_todo);
        INIT_LIST_HEAD(&priv->cmb_list);
        init_waitqueue_head(&priv->wait_q);
-       init_timer(&priv->timer);
+       timer_setup(&priv->timer, ccw_device_timeout, 0);
 
        atomic_set(&priv->onoff, 0);
        cdev->ccwlock = sch->lock;
@@ -1271,7 +1271,7 @@ static void recovery_work_func(struct work_struct *unused)
 
 static DECLARE_WORK(recovery_work, recovery_work_func);
 
-static void recovery_func(unsigned long data)
+static void recovery_func(struct timer_list *unused)
 {
        /*
         * We can't do our recovery in softirq context and it's not
index b37c22adcc7af1796fb507930f857c837690563b..f5c427ec24b12998e59ea5fd84111cfcf280730e 100644 (file)
@@ -4,6 +4,7 @@
 
 #include <asm/ccwdev.h>
 #include <linux/atomic.h>
+#include <linux/timer.h>
 #include <linux/wait.h>
 #include <linux/notifier.h>
 #include <linux/kernel_stat.h>
@@ -134,6 +135,7 @@ int ccw_device_notify(struct ccw_device *, int);
 void ccw_device_set_disconnected(struct ccw_device *cdev);
 void ccw_device_set_notoper(struct ccw_device *cdev);
 
+void ccw_device_timeout(struct timer_list *t);
 void ccw_device_set_timeout(struct ccw_device *, int);
 void ccw_device_schedule_recovery(void);
 
index f98ea674c3d8054390a5486802fedd482f0dbe16..dd7d79d30edc440662a02432a3ad3ce822503225 100644 (file)
@@ -91,12 +91,12 @@ static void ccw_timeout_log(struct ccw_device *cdev)
 /*
  * Timeout function. It just triggers a DEV_EVENT_TIMEOUT.
  */
-static void
-ccw_device_timeout(unsigned long data)
+void
+ccw_device_timeout(struct timer_list *t)
 {
-       struct ccw_device *cdev;
+       struct ccw_device_private *priv = from_timer(priv, t, timer);
+       struct ccw_device *cdev = priv->cdev;
 
-       cdev = (struct ccw_device *) data;
        spin_lock_irq(cdev->ccwlock);
        if (timeout_log_enabled)
                ccw_timeout_log(cdev);
@@ -118,8 +118,6 @@ ccw_device_set_timeout(struct ccw_device *cdev, int expires)
                if (mod_timer(&cdev->private->timer, jiffies + expires))
                        return;
        }
-       cdev->private->timer.function = ccw_device_timeout;
-       cdev->private->timer.data = (unsigned long) cdev;
        cdev->private->timer.expires = jiffies + expires;
        add_timer(&cdev->private->timer);
 }
index d14795f7110b4021a2fa58b08b332af34573a735..ce16e4f45d440fd25538d9223db5e07566ad22f5 100644 (file)
@@ -94,9 +94,10 @@ static int eadm_subchannel_clear(struct subchannel *sch)
        return 0;
 }
 
-static void eadm_subchannel_timeout(unsigned long data)
+static void eadm_subchannel_timeout(struct timer_list *t)
 {
-       struct subchannel *sch = (struct subchannel *) data;
+       struct eadm_private *private = from_timer(private, t, timer);
+       struct subchannel *sch = private->sch;
 
        spin_lock_irq(sch->lock);
        EADM_LOG(1, "timeout");
@@ -118,8 +119,6 @@ static void eadm_subchannel_set_timeout(struct subchannel *sch, int expires)
                if (mod_timer(&private->timer, jiffies + expires))
                        return;
        }
-       private->timer.function = eadm_subchannel_timeout;
-       private->timer.data = (unsigned long) sch;
        private->timer.expires = jiffies + expires;
        add_timer(&private->timer);
 }
@@ -224,7 +223,7 @@ static int eadm_subchannel_probe(struct subchannel *sch)
                return -ENOMEM;
 
        INIT_LIST_HEAD(&private->head);
-       init_timer(&private->timer);
+       timer_setup(&private->timer, eadm_subchannel_timeout, 0);
 
        spin_lock_irq(sch->lock);
        set_eadm_private(sch, private);