staging: ozwpan: Fix hrtimer wreckage
authorThomas Gleixner <tglx@linutronix.de>
Mon, 13 Apr 2015 21:02:25 +0000 (21:02 +0000)
committerThomas Gleixner <tglx@linutronix.de>
Mon, 20 Jul 2015 09:37:46 +0000 (11:37 +0200)
oz_timer_add() modifies the expiry value of an active timer, which
results in data corruption.

Use hrtimer_start() and remove the silly conditional.

While at it use the proper helper function to convert milliseconds to
ktime.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Shigekatsu Tateno <shigekatsu.tateno@atmel.com>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: devel@driverdev.osuosl.org
Link: http://lkml.kernel.org/r/20150413210035.357448657@linutronix.de
drivers/staging/ozwpan/ozproto.c

index 1ba24a2aef835bca872f892b9d2a70c2c7a1d674..23aa8179c6fc4f365932f06fc895dc4c61035d70 100644 (file)
@@ -566,23 +566,14 @@ void oz_timer_add(struct oz_pd *pd, int type, unsigned long due_time)
        switch (type) {
        case OZ_TIMER_TOUT:
        case OZ_TIMER_STOP:
-               if (hrtimer_active(&pd->timeout)) {
-                       hrtimer_set_expires(&pd->timeout, ktime_set(due_time /
-                       MSEC_PER_SEC, (due_time % MSEC_PER_SEC) *
-                                                       NSEC_PER_MSEC));
-                       hrtimer_start_expires(&pd->timeout, HRTIMER_MODE_REL);
-               } else {
-                       hrtimer_start(&pd->timeout, ktime_set(due_time /
-                       MSEC_PER_SEC, (due_time % MSEC_PER_SEC) *
-                                       NSEC_PER_MSEC), HRTIMER_MODE_REL);
-               }
+               hrtimer_start(&pd->timeout, ms_to_ktime(due_time),
+                             HRTIMER_MODE_REL);
                pd->timeout_type = type;
                break;
        case OZ_TIMER_HEARTBEAT:
                if (!hrtimer_active(&pd->heartbeat))
-                       hrtimer_start(&pd->heartbeat, ktime_set(due_time /
-                       MSEC_PER_SEC, (due_time % MSEC_PER_SEC) *
-                                       NSEC_PER_MSEC), HRTIMER_MODE_REL);
+                       hrtimer_start(&pd->heartbeat, ms_to_ktime(due_time),
+                                     HRTIMER_MODE_REL);
                break;
        }
        spin_unlock_bh(&g_polling_lock);