Raw reads from TI XIO2200(A) fail between 1800 and 2048 with RCODE 17
Brought to you by:
aeb,
bencollins
From: Mike A. <mik...@gm...> - 2011-08-01 20:16:35
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi there, I've been using libforensic1394 to carry our raw reads of windows memory using firewire from a linux system. The setup is a linux box with a built-in firewire adaptor: 03:00.4 FireWire (IEEE 1394) [0c00]: Ricoh Co Ltd Device [1180:e832] (rev 03) And the windows box has had an expresscard inserted to ensure firewire support. The card used shows up as follows under linux: 05:00.0 PCI bridge [0604]: Texas Instruments XIO2000(A)/XIO2200(A) PCI Express-to-PCI Bridge [104c:8231] (rev 03) 06:00.0 FireWire (IEEE 1394) [0c00]: Texas Instruments XIO2200(A) IEEE-1394a-2000 Controller (PHY/Link) [104c:8235] (rev 01) When running the code, the request_size is returned as 2048 (as expected), but when carrying out reads of various sizes, the results are consistent and valid up until 1800 bytes (exactly) and then 1801 - 1805 sometimes work and sometimes don't, and beyond that they almost always fail. Above 2048, the error returned is a request_size too big error, but between 1800 and 2048, the RCODE that I've tracked it back to is 17 (which appears to be RCODE_CANCELLED). I've tested this on 2.6.35, 2.6.36, 2.6.39 and 3.0, and they all fail in the same way. The author of libforensic1394 therefore suggested that this might be a kernel issue and that I should post my findings here. I also tried large bursts of reads below 1800 bytes to see whether too many asynchronous reads were causing the problem, but they all appeared to work fine. I've included the relevant lines from an strace of a small python test program (also included), and I'd be happy to run any additional tests, or answer any questions that I can in order to get this issue resolved... Thanks, Mike 5:) -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.17 (GNU/Linux) iEYEARECAAYFAk43BXoACgkQu7rWomwgFXoGmQCggeeB9KQkOubD25pL/4ihrsn1 MEsAoLPUK1q4Qj8OCms+TdYBCfy94iP2 =Ca/u -----END PGP SIGNATURE----- |