x86 hvm: Add a new HVMOP to get the current Xen system time
authorKeir Fraser <keir.fraser@citrix.com>
Fri, 9 Jul 2010 16:16:03 +0000 (17:16 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Fri, 9 Jul 2010 16:16:03 +0000 (17:16 +0100)
Xen absolute system time, so that it can use SCHEDOP_poll in a
sensible fashion.  HVM PV drivers can't use the normal PV clock
because they might have TSC offsets that hey don't know about.

Signed-off-by: Tim Deegan <Tim.Deegan@citrix.com>
xen/arch/x86/hvm/hvm.c
xen/include/public/hvm/hvm_op.h

index b07493b9b9ea5a8dc1b8de5966b67d00bb1617f7..2ff8cefedebb588dd4ab3cb59ae58b8e28c3dfa5 100644 (file)
@@ -3188,6 +3188,15 @@ long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE(void) arg)
         break;
     }
 
+    case HVMOP_get_time: {
+        xen_hvm_get_time_t gxt;
+
+        gxt.now = NOW();
+        if ( copy_to_guest(arg, &gxt, 1) )
+            rc = -EFAULT;
+        break;
+    }
+
     default:
     {
         gdprintk(XENLOG_WARNING, "Bad HVM op %ld.\n", op);
index 734d224cb0ef50735433bc7035210f25db098818..1f697e46e1e67ffea3257426b97a152a2eaffc35 100644 (file)
@@ -138,6 +138,14 @@ struct xen_hvm_pagetable_dying {
 typedef struct xen_hvm_pagetable_dying xen_hvm_pagetable_dying_t;
 DEFINE_XEN_GUEST_HANDLE(xen_hvm_pagetable_dying_t);
 
+/* Get the current Xen time, in nanoseconds since system boot. */
+#define HVMOP_get_time              10
+struct xen_hvm_get_time {
+    uint64_t now;      /* OUT */
+};
+typedef struct xen_hvm_get_time xen_hvm_get_time_t;
+DEFINE_XEN_GUEST_HANDLE(xen_hvm_get_time_t);
+
 #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */
 
 #endif /* __XEN_PUBLIC_HVM_HVM_OP_H__ */