Commit-ID:  955381dd65654bd6f066408823691db8fa7d05bb
Gitweb:     http://git.kernel.org/tip/955381dd65654bd6f066408823691db8fa7d05bb
Author:     Viresh Kumar <viresh.ku...@linaro.org>
AuthorDate: Thu, 16 Jul 2015 16:28:48 +0530
Committer:  Thomas Gleixner <t...@linutronix.de>
CommitDate: Thu, 30 Jul 2015 21:25:38 +0200

x86/xen/time: Migrate to new set-state interface

Migrate xen driver to the new 'set-state' interface provided by
clockevents core, the earlier 'set-mode' interface is marked obsolete
now.

This also enables us to implement callbacks for new states of clockevent
devices, for example: ONESHOT_STOPPED.

Callbacks aren't implemented for modes where we weren't doing anything.

Signed-off-by: Viresh Kumar <viresh.ku...@linaro.org>
Cc: linaro-ker...@lists.linaro.org
Cc: Konrad Rzeszutek Wilk <konrad.w...@oracle.com>
Cc: Boris Ostrovsky <boris.ostrov...@oracle.com>
Cc: David Vrabel <david.vra...@citrix.com>
Cc: xen-de...@lists.xenproject.org (moderated list:XEN HYPERVISOR INTERFACE)
Link: 
http://lkml.kernel.org/r/881eea6e1a3d483cd33e044cd34827cce26a57fd.1437042675.git.viresh.ku...@linaro.org
Signed-off-by: Thomas Gleixner <t...@linutronix.de>
---
 arch/x86/xen/time.c | 80 +++++++++++++++++++++--------------------------------
 1 file changed, 31 insertions(+), 49 deletions(-)

diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c
index 55da33b..f1ba6a0 100644
--- a/arch/x86/xen/time.c
+++ b/arch/x86/xen/time.c
@@ -274,30 +274,18 @@ static s64 get_abs_timeout(unsigned long delta)
        return xen_clocksource_read() + delta;
 }
 
-static void xen_timerop_set_mode(enum clock_event_mode mode,
-                                struct clock_event_device *evt)
+static int xen_timerop_shutdown(struct clock_event_device *evt)
 {
-       switch (mode) {
-       case CLOCK_EVT_MODE_PERIODIC:
-               /* unsupported */
-               WARN_ON(1);
-               break;
-
-       case CLOCK_EVT_MODE_ONESHOT:
-       case CLOCK_EVT_MODE_RESUME:
-               break;
-
-       case CLOCK_EVT_MODE_UNUSED:
-       case CLOCK_EVT_MODE_SHUTDOWN:
-               HYPERVISOR_set_timer_op(0);  /* cancel timeout */
-               break;
-       }
+       /* cancel timeout */
+       HYPERVISOR_set_timer_op(0);
+
+       return 0;
 }
 
 static int xen_timerop_set_next_event(unsigned long delta,
                                      struct clock_event_device *evt)
 {
-       WARN_ON(evt->mode != CLOCK_EVT_MODE_ONESHOT);
+       WARN_ON(!clockevent_state_oneshot(evt));
 
        if (HYPERVISOR_set_timer_op(get_abs_timeout(delta)) < 0)
                BUG();
@@ -310,46 +298,39 @@ static int xen_timerop_set_next_event(unsigned long delta,
 }
 
 static const struct clock_event_device xen_timerop_clockevent = {
-       .name = "xen",
-       .features = CLOCK_EVT_FEAT_ONESHOT,
+       .name                   = "xen",
+       .features               = CLOCK_EVT_FEAT_ONESHOT,
 
-       .max_delta_ns = 0xffffffff,
-       .min_delta_ns = TIMER_SLOP,
+       .max_delta_ns           = 0xffffffff,
+       .min_delta_ns           = TIMER_SLOP,
 
-       .mult = 1,
-       .shift = 0,
-       .rating = 500,
+       .mult                   = 1,
+       .shift                  = 0,
+       .rating                 = 500,
 
-       .set_mode = xen_timerop_set_mode,
-       .set_next_event = xen_timerop_set_next_event,
+       .set_state_shutdown     = xen_timerop_shutdown,
+       .set_next_event         = xen_timerop_set_next_event,
 };
 
+static int xen_vcpuop_shutdown(struct clock_event_device *evt)
+{
+       int cpu = smp_processor_id();
 
+       if (HYPERVISOR_vcpu_op(VCPUOP_stop_singleshot_timer, cpu, NULL) ||
+           HYPERVISOR_vcpu_op(VCPUOP_stop_periodic_timer, cpu, NULL))
+               BUG();
+
+       return 0;
+}
 
-static void xen_vcpuop_set_mode(enum clock_event_mode mode,
-                               struct clock_event_device *evt)
+static int xen_vcpuop_set_oneshot(struct clock_event_device *evt)
 {
        int cpu = smp_processor_id();
 
-       switch (mode) {
-       case CLOCK_EVT_MODE_PERIODIC:
-               WARN_ON(1);     /* unsupported */
-               break;
-
-       case CLOCK_EVT_MODE_ONESHOT:
-               if (HYPERVISOR_vcpu_op(VCPUOP_stop_periodic_timer, cpu, NULL))
-                       BUG();
-               break;
+       if (HYPERVISOR_vcpu_op(VCPUOP_stop_periodic_timer, cpu, NULL))
+               BUG();
 
-       case CLOCK_EVT_MODE_UNUSED:
-       case CLOCK_EVT_MODE_SHUTDOWN:
-               if (HYPERVISOR_vcpu_op(VCPUOP_stop_singleshot_timer, cpu, NULL) 
||
-                   HYPERVISOR_vcpu_op(VCPUOP_stop_periodic_timer, cpu, NULL))
-                       BUG();
-               break;
-       case CLOCK_EVT_MODE_RESUME:
-               break;
-       }
+       return 0;
 }
 
 static int xen_vcpuop_set_next_event(unsigned long delta,
@@ -359,7 +340,7 @@ static int xen_vcpuop_set_next_event(unsigned long delta,
        struct vcpu_set_singleshot_timer single;
        int ret;
 
-       WARN_ON(evt->mode != CLOCK_EVT_MODE_ONESHOT);
+       WARN_ON(!clockevent_state_oneshot(evt));
 
        single.timeout_abs_ns = get_abs_timeout(delta);
        single.flags = VCPU_SSHOTTMR_future;
@@ -382,7 +363,8 @@ static const struct clock_event_device 
xen_vcpuop_clockevent = {
        .shift = 0,
        .rating = 500,
 
-       .set_mode = xen_vcpuop_set_mode,
+       .set_state_shutdown = xen_vcpuop_shutdown,
+       .set_state_oneshot = xen_vcpuop_set_oneshot,
        .set_next_event = xen_vcpuop_set_next_event,
 };
 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
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