Spoon,
Any updates on the IO re-rigging to stop triggering the failed firewire transactions when C2 is enabled?
-brendan
Spoon,
Any updates on the IO re-rigging to stop triggering the failed firewire transactions when C2 is enabled?
-brendan
I suspect if you just make sure that, when you split a large read request into two, the first half of the split read is an even number of sectors, the current code base will start working with just that simple modification.
e.g. instead of request for 26 sectors being split into a read 13 + a read 13, you make the first read an even number, e.g. "a read 14 + a read 12". The second half can be an odd number if necessary. It's a one or two line change (every place in the code you have to split) to force quad-byte alignment, which is probably good enough for most interfaces.
Even if your long term plan is to "4k page align" all buffers and no longer send mid-buffer pointers down the call stack, the idea above is a good stop-gap if you're concerned about substantial infrastructure breakage.
Again, this alignment issue only comes up when C2 is used, since the number of bytes returned per request is no longer "naturally" quad aligned. And it's only a problem for firewire (and perhaps some SATA controllers) because those controllers have stricter alignment requirements and/or use the pointer as passed after translation (i.e. the virtual address for the user process is translated directly into a physical address passed to the hardware because the call stack does not double buffer).
-brendan
Last edited by bhoar; 08-08-2008 at 04:06 PM.
I will be working on the 4KB align next week.
Spoon
www.dbpoweramp.com
Copyright © illustrate 2024, All rights reserved