WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

RE: [Xen-devel] Infinte loop in RtlPrefetchMemoryNonTemporal underWindow

To: "James Harper" <james.harper@xxxxxxxxxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: RE: [Xen-devel] Infinte loop in RtlPrefetchMemoryNonTemporal underWindows
From: "James Harper" <james.harper@xxxxxxxxxxxxxxxx>
Date: Sat, 22 Nov 2008 22:59:57 +1100
Cc:
Delivery-date: Sat, 22 Nov 2008 04:00:29 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <AEC6C66638C05B468B556EA548C1A77D0154FC9C@trantor>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <AEC6C66638C05B468B556EA548C1A77D0154FC9C@trantor>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
Thread-index: AclMlLvoHhLvgAcuR0mEAReL/OsfCgABMfnA
Thread-topic: [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