[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH 5/5] 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.kumar@xxxxxxxxxx>
---
 arch/x86/xen/time.c | 63 +++++++++++++++++++----------------------------------
 1 file changed, 23 insertions(+), 40 deletions(-)

diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c
index 55da33b1d51c..4b5ed547daa3 100644
--- a/arch/x86/xen/time.c
+++ b/arch/x86/xen/time.c
@@ -274,30 +274,17 @@ 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;
-       }
+       HYPERVISOR_set_timer_op(0);  /* cancel timeout */
+
+       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();
@@ -320,36 +307,31 @@ static const struct clock_event_device 
xen_timerop_clockevent = {
        .shift = 0,
        .rating = 500,
 
-       .set_mode = xen_timerop_set_mode,
+       .set_state_shutdown = xen_timerop_shutdown,
        .set_next_event = xen_timerop_set_next_event,
 };
 
 
 
-static void xen_vcpuop_set_mode(enum clock_event_mode mode,
-                               struct clock_event_device *evt)
+static int xen_vcpuop_shutdown(struct clock_event_device *evt)
 {
        int cpu = smp_processor_id();
 
-       switch (mode) {
-       case CLOCK_EVT_MODE_PERIODIC:
-               WARN_ON(1);     /* unsupported */
-               break;
+       if (HYPERVISOR_vcpu_op(VCPUOP_stop_singleshot_timer, cpu, NULL) ||
+           HYPERVISOR_vcpu_op(VCPUOP_stop_periodic_timer, cpu, NULL))
+               BUG();
 
-       case CLOCK_EVT_MODE_ONESHOT:
-               if (HYPERVISOR_vcpu_op(VCPUOP_stop_periodic_timer, cpu, NULL))
-                       BUG();
-               break;
+       return 0;
+}
 
-       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;
-       }
+static int xen_vcpuop_set_oneshot(struct clock_event_device *evt)
+{
+       int cpu = smp_processor_id();
+
+       if (HYPERVISOR_vcpu_op(VCPUOP_stop_periodic_timer, cpu, NULL))
+               BUG();
+
+       return 0;
 }
 
 static int xen_vcpuop_set_next_event(unsigned long delta,
@@ -359,7 +341,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 +364,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,
 };
 
-- 
2.4.0


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.