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
|