[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |