[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] SOLVED - Infinte loop in RtlPrefetchMemoryNonTemporal underWindows
James, That should be fixed be the changeset 18512. Does your libxc is up to date ? 2008/11/22 James Harper <james.harper@xxxxxxxxxxxxxxxx>: > I fixed this with the following entry in my config: > > cpuid = > ['0x80000005:ecx=xxxxxxxxxxxxxxxxxxxxxxxxkkkkkkkk,edx=xxxxxxxxxxxxxxxxxx > xxxxxxkkkkkkkk'] > > This passes through the physical host value of the relevant cache > information cpuid function to the DomU. > > Is there any reason why we wouldn't want to do this? I think I'm working > around what is actually a bug. Intel CPU's seem to keep cache > information in another cpuid function so maybe it is only (some?) AMD > cpu's affected? > > As per the email below, under some circumstances (eg when I give Windows > a pre-checksum-verified packet) it makes a call to a function called > RtlPrefetchMemoryNonTemporal which uses the cache line size as a > decrement in a loop. Xen is setting the cache line size to zero (at > least for AMD processors) causing that loop to never terminate. > > James > >> -----Original Message----- >> From: James Harper >> Sent: Saturday, 22 November 2008 23:00 >> To: James Harper; xen-devel@xxxxxxxxxxxxxxxxxxx >> Subject: RE: [Xen-devel] Infinte loop in RtlPrefetchMemoryNonTemporal >> underWindows >> >> > I have been trying to track down a problem that occurs when my GPLPV >> > drivers give Windows a packet with the > NdisPacketTcpChecksumSucceeded >> > flag set. The problem is that the machine locks hard. >> > >> > After some tedious work with the debugger, I have found that Windows >> > makes a call to a routine called RtlPrefetchMemoryNonTemporal, which >> > looks like this: >> > >> > 8088e579 mov eax,dword ptr [nt!KePrefetchNTAGranularity 8088e57e >> > 0f184100 prefetchnta [ecx] >> > 8088e582 add ecx,eax >> > 8088e584 sub edx,eax >> > 8088e586 ja nt!RtlPrefetchMemoryNonTemporal+0x6 (8088e57e) >> > 8088e588 ret >> > >> > Unfortunately it appears that the value at > nt!KePrefetchNTAGranularity >> > is 0, hence the infinite loop. >> > >> >> A bit more debugging shows that RtlPrefectMemoryNonTemporal starts out >> life like this: >> >> nt!RtlPrefetchMemoryNonTemporal: >> 8088e578 ret >> 8088e579 mov eax,dword ptr [nt!KePrefetchNTAGranularity 8088e57e >> 0f184100 prefetchnta [ecx] >> 8088e582 add ecx,eax >> 8088e584 sub edx,eax >> 8088e586 ja nt!RtlPrefetchMemoryNonTemporal+0x6 (8088e57e) >> 8088e588 ret >> >> But then for some reason becomes: >> >> nt!RtlPrefetchMemoryNonTemporal: >> 8088e578 nop >> 8088e579 mov eax,dword ptr [nt!KePrefetchNTAGranularity 8088e57e >> 0f184100 prefetchnta [ecx] >> 8088e582 add ecx,eax >> 8088e584 sub edx,eax >> 8088e586 ja nt!RtlPrefetchMemoryNonTemporal+0x6 (8088e57e) >> 8088e588 ret >> >> The difference being that the initial ret becomes a nop... >> >> This is getting stranger and stranger. >> >> James > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-devel > -- Jean Guyader _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |