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

Re: [Xen-devel] [PATCHv2] x86: fix delta calculation in TSC deadline timer emulation



>>> On 11.04.12 at 12:31, David Vrabel <david.vrabel@xxxxxxxxxx> wrote:
> From: David Vrabel <david.vrabel@xxxxxxxxxx>
> 
> In the virtual LAPIC, correct the delta calculation when emulating the
> TSC deadline timer.
> 
> Without this fix, XenServer (which is based on Xen 4.1) does not work
> when running as an HVM guest.  dom0 fails to boot because its timer
> interrupts are very delayed (by several minutes in some cases).
> 
> Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>

Acked-by: Jan Beulich <jbeulich@xxxxxxxx>

> ---
> A 4.1.x candidate?

Presumably.

> Changes since v1:
> - remove unused guest_time variable
> ---
>  xen/arch/x86/hvm/vlapic.c |   12 ++++--------
>  1 files changed, 4 insertions(+), 8 deletions(-)
> 
> diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c
> index 8401756..abdb556 100644
> --- a/xen/arch/x86/hvm/vlapic.c
> +++ b/xen/arch/x86/hvm/vlapic.c
> @@ -898,7 +898,6 @@ uint64_t  vlapic_tdt_msr_get(struct vlapic *vlapic)
>  void vlapic_tdt_msr_set(struct vlapic *vlapic, uint64_t value)
>  {
>      uint64_t guest_tsc;
> -    uint64_t guest_time;
>      struct vcpu *v = vlapic_vcpu(vlapic);
>  
>      /* may need to exclude some other conditions like vlapic->hw.disabled */
> @@ -910,12 +909,10 @@ void vlapic_tdt_msr_set(struct vlapic *vlapic, uint64_t 
> value)
>      
>      /* new_value = 0, >0 && <= now, > now */
>      guest_tsc = hvm_get_guest_tsc(v);
> -    guest_time = hvm_get_guest_time(v);
>      if ( value > guest_tsc )
>      {
> -        uint64_t delta = value - v->arch.hvm_vcpu.cache_tsc_offset;
> -        delta = gtsc_to_gtime(v->domain, delta);
> -        delta = max_t(s64, delta - guest_time, 0);
> +        uint64_t delta = gtsc_to_gtime(v->domain, value - guest_tsc);
> +        delta = max_t(s64, delta, 0);
>  
>          HVM_DBG_LOG(DBG_LEVEL_VLAPIC_TIMER, "delta[0x%016"PRIx64"]", 
> delta);
>  
> @@ -949,9 +946,8 @@ void vlapic_tdt_msr_set(struct vlapic *vlapic, uint64_t 
> value)
>  
>      HVM_DBG_LOG(DBG_LEVEL_VLAPIC_TIMER,
>                  "tdt_msr[0x%016"PRIx64"],"
> -                " gtsc[0x%016"PRIx64"],"
> -                " gtime[0x%016"PRIx64"]",
> -                vlapic->hw.tdt_msr, guest_tsc, guest_time);
> +                " gtsc[0x%016"PRIx64"]",
> +                vlapic->hw.tdt_msr, guest_tsc);
>  }
>  
>  static int __vlapic_accept_pic_intr(struct vcpu *v)
> -- 
> 1.7.2.5




_______________________________________________
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®.