kernel: broadcast-hrtimer: Migrate to new 'set-state' interface
authorViresh Kumar <viresh.kumar@linaro.org>
Thu, 16 Jul 2015 11:26:35 +0000 (16:56 +0530)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Mon, 10 Aug 2015 09:41:08 +0000 (11:41 +0200)
Migrate broadcast-hrtimer driver to the new 'set-state' interface
provided by clockevents core, the earlier 'set-mode' interface is marked
obsolete now.

Cc: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
kernel/time/tick-broadcast-hrtimer.c

index 3e7db49a2381d14506a37c69b45268feeec56bef..53d7184da0bedb5d7df959d09c2b787f77f0682b 100644 (file)
 
 static struct hrtimer bctimer;
 
-static void bc_set_mode(enum clock_event_mode mode,
-                       struct clock_event_device *bc)
+static int bc_shutdown(struct clock_event_device *evt)
 {
-       switch (mode) {
-       case CLOCK_EVT_MODE_UNUSED:
-       case CLOCK_EVT_MODE_SHUTDOWN:
-               /*
-                * Note, we cannot cancel the timer here as we might
-                * run into the following live lock scenario:
-                *
-                * cpu 0                cpu1
-                * lock(broadcast_lock);
-                *                      hrtimer_interrupt()
-                *                      bc_handler()
-                *                         tick_handle_oneshot_broadcast();
-                *                          lock(broadcast_lock);
-                * hrtimer_cancel()
-                *  wait_for_callback()
-                */
-               hrtimer_try_to_cancel(&bctimer);
-               break;
-       default:
-               break;
-       }
+       /*
+        * Note, we cannot cancel the timer here as we might
+        * run into the following live lock scenario:
+        *
+        * cpu 0                cpu1
+        * lock(broadcast_lock);
+        *                      hrtimer_interrupt()
+        *                      bc_handler()
+        *                         tick_handle_oneshot_broadcast();
+        *                          lock(broadcast_lock);
+        * hrtimer_cancel()
+        *  wait_for_callback()
+        */
+       hrtimer_try_to_cancel(&bctimer);
+       return 0;
 }
 
 /*
@@ -82,7 +75,7 @@ static int bc_set_next(ktime_t expires, struct clock_event_device *bc)
 }
 
 static struct clock_event_device ce_broadcast_hrtimer = {
-       .set_mode               = bc_set_mode,
+       .set_state_shutdown     = bc_shutdown,
        .set_next_ktime         = bc_set_next,
        .features               = CLOCK_EVT_FEAT_ONESHOT |
                                  CLOCK_EVT_FEAT_KTIME |
@@ -102,13 +95,11 @@ static enum hrtimer_restart bc_handler(struct hrtimer *t)
 {
        ce_broadcast_hrtimer.event_handler(&ce_broadcast_hrtimer);
 
-       switch (ce_broadcast_hrtimer.mode) {
-       case CLOCK_EVT_MODE_ONESHOT:
+       if (clockevent_state_oneshot(&ce_broadcast_hrtimer))
                if (ce_broadcast_hrtimer.next_event.tv64 != KTIME_MAX)
                        return HRTIMER_RESTART;
-       default:
-               return HRTIMER_NORESTART;
-       }
+
+       return HRTIMER_NORESTART;
 }
 
 void tick_setup_hrtimer_broadcast(void)