From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Vrabel Subject: [PATCH] x86: fix delta calculation in TSC deadline timer emulation Date: Tue, 10 Apr 2012 18:08:24 +0100 Message-ID: <1334077704-5449-1-git-send-email-david.vrabel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xensource.com Cc: Keir Fraser , David Vrabel , Jan Beulich List-Id: xen-devel@lists.xenproject.org From: David Vrabel 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 Cc: Keir Fraser Cc: Jan Beulich --- A 4.1.x candidate? --- xen/arch/x86/hvm/vlapic.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/hvm/vlapic.c b/xen/arch/x86/hvm/vlapic.c index 8401756..1aa2810 100644 --- a/xen/arch/x86/hvm/vlapic.c +++ b/xen/arch/x86/hvm/vlapic.c @@ -913,9 +913,8 @@ void vlapic_tdt_msr_set(struct vlapic *vlapic, uint64_t value) 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); -- 1.7.2.5