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

Re: [Xen-devel] [PATCH v3 for 4.5] x86/viridian: Freeze time reference counter when domain is paused

On 16/10/14 10:21, Paul Durrant wrote:
> In XenServer system test it has become apparent that versions of Windows
> that make use of the time reference counter enlightenment cannot cope with
> large jumps forward in the value read from the MSR. Specifically,
> suspending a very large domain took approx. 45 minutes to complete and
> when the domain was resumed it was discovered that the WMI (Windows
> Management Instrumentation) service had hung.
> The reason a large jump forward is seen by the guest is that, when a guest
> is suspended, the guest stops running when the SCHEDOP_suspend hypercall is
> made, however the MSR value essentially keeps incrementing until the
> tool-stack issues DOMCTL_gethvmcontext.
> This patch adds code to freeze the value of the time reference counter
> on domain pause and 'thaw' it on domain unpause, but only thaw it if the
> domain is not shutting down. The absolute value of the counter is then
> saved in the viridian domain context record. This prevents the guest OS
> from experiencing large jumps in the value of the MSR and has been shown
> to reliably fix the problem with WMI.
> Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
> Cc: Keir Fraser <keir@xxxxxxx>
> Cc: Jan Beulich <jbeulich@xxxxxxxx>
> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>

Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>

One nit, which could be fixed on commit given --whitespace=fix


> diff --git a/xen/arch/x86/hvm/viridian.c b/xen/arch/x86/hvm/viridian.c
> index 6726168..7d55363 100644
> --- a/xen/arch/x86/hvm/viridian.c
> +++ b/xen/arch/x86/hvm/viridian.c
> @@ -450,9 +484,10 @@ static int viridian_save_domain_ctxt(struct domain *d, 
> hvm_domain_context_t *h)
>      if ( !is_viridian_domain(d) )
>          return 0;
> -    ctxt.hypercall_gpa = d->arch.hvm_domain.viridian.hypercall_gpa.raw;
> -    ctxt.guest_os_id   = d->arch.hvm_domain.viridian.guest_os_id.raw;
> -
> +    ctxt.time_ref_count = d->arch.hvm_domain.viridian.time_ref_count.val;
> +    ctxt.hypercall_gpa  = d->arch.hvm_domain.viridian.hypercall_gpa.raw;
> +    ctxt.guest_os_id    = d->arch.hvm_domain.viridian.guest_os_id.raw;
> +  

Introduction of trailing whitespace into the blank line.


Xen-devel mailing list



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