# HG changeset patch # User Tim Deegan # Date 1278682007 -3600 # Node ID dc3138d60b40baf38016a9b58f438598580a407f # Parent a672af698bc387ea92070fc3ef337e8c2fbb716e Add a new HVMOP which allows an HVM guest to get the current 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 diff -r a672af698bc3 -r dc3138d60b40 xen/arch/x86/hvm/hvm.c --- a/xen/arch/x86/hvm/hvm.c Fri Jul 09 12:35:58 2010 +0100 +++ b/xen/arch/x86/hvm/hvm.c Fri Jul 09 14:26:47 2010 +0100 @@ -3188,6 +3188,15 @@ 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); diff -r a672af698bc3 -r dc3138d60b40 xen/include/public/hvm/hvm_op.h --- a/xen/include/public/hvm/hvm_op.h Fri Jul 09 12:35:58 2010 +0100 +++ b/xen/include/public/hvm/hvm_op.h Fri Jul 09 14:26:47 2010 +0100 @@ -138,6 +138,14 @@ 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__ */