question for USB isochronous I/O (input)- massive corruption issu e

Hello. I’m having a strange issue with my device on WinXP SP2, on an Intel
Springdale mobo. My device is a USB audio device, for which I have written
an ASIO audio driver, whose lower layer is a kernel USB driver, which
performs the necessary input and output isochronous I/O. On the
aforementioned mobo onto which the device is plugged into an EHCI port, I
see from time to time that isochronous I/O (input) is giving me enormous
host memory corruption issues when my USB driver has not fed the host
controller with enough input URBs (deliberate for stress testing). When I
make sure to keep the host controller well supplied with input URBs, all is
(seemingly) well.

However, when the host controller is starved of input URBs (perhaps for
hundreds or milliseconds), thereafter I see enormous host memory corruption.
The BSODs are so many in variety that it would be (I think at least)
pointless to post them. I’ve been using the checked HAL/kernel/USB stack,
with verifier enabled for my driver, but that did not help pinpoint the
issue. For USB input URB management, I do use the USBD_SHORT_TRANSFER_OK
flag, and I calculate my USB frames rather than use the
USBD_START_ISO_TRANSFER_ASAP flag. So far, I have not duplicated this issue
on any machine except one- a Springdale (ASUS), 3Ghz, 512 MB DDR RAM.

The latest finding is interesting. My latest BSOD pointed towards a region
of nuked memory, which had a data pattern identical to a input USB packet
data pattern recorded on my CATC USB bus analyzer. So it looks to me that
starving the host controller of input URBs (seemingly on that one machine so
far) results in improper DMA to host memory…Any takers as to why this may
be, or any suggestions at all would be welcome.


Philip Lukidis