[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3] x86/vtsc: update vcpu_time in hvm_set_guest_time
When using a vtsc, hvm_set_guest_time changes hvm_vcpu.stime_offset, which is used in the vcpu time structure to calculate the tsc_timestamp, so after updating stime_offset we need to propagate the change to vcpu_time in order for the guest to get the right time if using the PV clock. Signed-off-by: Roger Pau Monnà <roger.pau@xxxxxxxxxx> Cc: Keir Fraser <keir@xxxxxxx> Cc: Jan Beulich <jbeulich@xxxxxxxx> Cc: George Dunlap <george.dunlap@xxxxxxxxxxxxx> --- Changes since v2: * Check for v == current instead of v->is_running to know if the vcpu is running. Changes since v1: * Perform the call to update_vcpu_system_time in hvm_set_guest_time if the offset has changed and the vCPU is running. --- xen/arch/x86/hvm/vpt.c | 13 ++++++++++++- 1 files changed, 12 insertions(+), 1 deletions(-) diff --git a/xen/arch/x86/hvm/vpt.c b/xen/arch/x86/hvm/vpt.c index 8dee662..4b1e1a3 100644 --- a/xen/arch/x86/hvm/vpt.c +++ b/xen/arch/x86/hvm/vpt.c @@ -57,7 +57,18 @@ u64 hvm_get_guest_time(struct vcpu *v) void hvm_set_guest_time(struct vcpu *v, u64 guest_time) { - v->arch.hvm_vcpu.stime_offset += guest_time - hvm_get_guest_time(v); + u64 offset = guest_time - hvm_get_guest_time(v); + + if ( offset ) { + v->arch.hvm_vcpu.stime_offset += offset; + /* + * If hvm_vcpu.stime_offset is updated make sure to + * also update vcpu time, since this value is used to + * calculate the TSC. + */ + if ( v == current ) + update_vcpu_system_time(v); + } } static int pt_irq_vector(struct periodic_time *pt, enum hvm_intsrc src) -- 1.7.7.5 (Apple Git-26) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |