From mboxrd@z Thu Jan 1 00:00:00 1970 From: Frank van der Linden Subject: Re: Re: BSOD "A clock interrupt was not recevied onasecondary processor within the allocated time interval" Date: Wed, 07 Jan 2009 10:42:08 -0700 Message-ID: <4964E970.3090803@Sun.COM> References: <49627C6B.7000900@virtualiron.com> <20090106103909.GA23206@weybridge.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; format=flowed; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Return-path: In-reply-to: <20090106103909.GA23206@weybridge.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Steven Smith Cc: "Xen-Devel (E-mail)" , Steve Prochniak , Andrew Lyon , Keir Fraser , xen-users@lists.xensource.com, Ben Guthro List-Id: xen-devel@lists.xenproject.org Steven Smith wrote: >> Alternative Viridian interface support was checked in. When enabled, i= t >> ought to be sufficient to disable these bugchecks. =8Cviridian=3D1=B9 = needs to be >> specified in the domain config file. > Hmm... In order for the Viridian stuff to actually solve this > problem, you need to set the relaxed-timers bit. It doesn't look like > the xen-unstable implementation does so. Something like this might > help: >=20 > diff -r f6b92526e916 xen/arch/x86/hvm/viridian.c > --- a/xen/arch/x86/hvm/viridian.c Tue Jan 06 09:14:39 2009 +0000 > +++ b/xen/arch/x86/hvm/viridian.c Tue Jan 06 10:32:26 2009 +0000 > @@ -37,6 +37,7 @@ > =20 > /* Viridian CPUID 4000004, Implementation Recommendations. */ > #define CPUID4A_MSR_BASED_APIC (1 << 3) > +#define CPUID4A_RELAX_TIMER_INT_HANDLING (1 << 5) > =20 > int cpuid_viridian_leaves(unsigned int leaf, unsigned int *eax, > unsigned int *ebx, unsigned int *ecx, > @@ -84,7 +85,7 @@ > if ( (d->arch.hvm_domain.viridian.guest_os_id.raw =3D=3D 0) || > (d->arch.hvm_domain.viridian.guest_os_id.fields.os < 4) ) > break; > - *eax =3D CPUID4A_MSR_BASED_APIC; > + *eax =3D CPUID4A_MSR_BASED_APIC | CPUID4A_RELAX_TIMER_INT_HAND= LING; > *ebx =3D 2047; /* long spin count */ > break; > } >=20 > But note that I haven't tested this *at all*. That appears to work. I have a test setup where I can introduce an=20 arbitrary delay in qemu-dm. It's easy to trigger bug check 0x101 in=20 Windows 2008 that way. Using viridian=3D1, with the relaxed timer bit set= ,=20 I have been unable to crash Windows 2008. Looks like a good thing to commit. - Frank