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

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.