From: Viresh Kumar <[email protected]>

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 <[email protected]>
Signed-off-by: Viresh Kumar <[email protected]>
Signed-off-by: Daniel Lezcano <[email protected]>
---
 kernel/time/tick-broadcast-hrtimer.c | 49 +++++++++++++++---------------------
 1 file changed, 20 insertions(+), 29 deletions(-)

diff --git a/kernel/time/tick-broadcast-hrtimer.c 
b/kernel/time/tick-broadcast-hrtimer.c
index 3e7db49..53d7184 100644
--- a/kernel/time/tick-broadcast-hrtimer.c
+++ b/kernel/time/tick-broadcast-hrtimer.c
@@ -18,30 +18,23 @@
 
 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)
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to