| Hey All,   When I did a test of GPL Windows PV Driver on Windows XP SP2 by iperf, I found a DMA Crash. And the Crash occurs every times. The test is as following: I install GPL Windows PV Driver (0.10.0.130) for XP as DomU , and Suse 11 as Dom0 on Xen 3.3.1. When I set DomU as iperf's Client and Dom0 as Server.   iperf client on DomU (XP): iperf -c $SERVER_IP -i 1 -l 1 -w 64k  iperf server on Dom0 (Suse 11 & xen 3.3.1) iperf -s -l 1 l -w 64k   Scatter/gather enabled   IF I SET -l (buff size ) as 1 byte ( in fact from 1 byte to 9 bytes), the DomU (XP) crashed everything (Scatter/gather enabled).   I use windbg to analyze the Windows Mem Dump, I found the crash callstack  as following:   XenNet_RxBufferCheck() -> ... ->  XenPci_DOP_BuildScatterGatherList() -> XenPci_DOP_BuildScatterGatherListButDontExecute()  for (i = 0; remaining > 0; i++) {
 pfn = MmGetMdlPfnArray(curr_mdl)[pfn_offset + i];
 ASSERT(pfn);
 gref = (grant_ref_t)GntTbl_GrantAccess(xpdd, 0, (ULONG)pfn, FALSE, INVALID_GRANT_REF);
 ASSERT(gref != INVALID_GRANT_REF); // gref gets a value of INVALID_GRANT_REF, Crash occurs!!!
 sglist->Elements[sg_element].Address.QuadPart = (LONGLONG)(gref << PAGE_SHIFT) | offset;
 sglist->Elements[sg_element].Length = min(min(PAGE_SIZE - offset, remaining), total_remaining);
 total_remaining -= sglist->Elements[sg_element].Length;
 remaining -= sglist->Elements[sg_element].Length;
 offset = 0;
 sg_element++;
 }
 I donot know how to fix it. I think the Satter/Gather is related to transfer NOT receive, why crash when receving data. because of  -l set as 1 byte, then using more gref to store outgoing data, and gref is NOT enough?   pls have a look at this problem.   Thanks
 --
 Huibin.QIAN
 Hangzhou,China
 
 _______________________________________________
Xen-users mailing list
Xen-users@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-users |