On Thu, Oct 10, 2013 at 10:55:58AM +0100, Ian Abbott wrote: > Commit 677a31565692d596ef42ea589b53ba289abf4713 upstream. > > The `insn_bits` handler `ni_65xx_dio_insn_bits()` has a `for` loop that > currently writes (optionally) and reads back up to 5 "ports" consisting > of 8 channels each. It reads up to 32 1-bit channels but can only read > and write a whole port at once - it needs to handle up to 5 ports as the > first channel it reads might not be aligned on a port boundary. It > breaks out of the loop early if the next port it handles is beyond the > final port on the card. It also breaks out early on the 5th port in the > loop if the first channel was aligned. Unfortunately, it doesn't check > that the current port it is dealing with belongs to the comedi subdevice > the `insn_bits` handler is acting on. That's a bug. > > Redo the `for` loop to terminate after the final port belonging to the > subdevice, changing the loop variable in the process to simplify things > a bit. The `for` loop could now try and handle more than 5 ports if the > subdevice has more than 40 channels, but the test `if (bitshift >= 32)` > ensures it will break out early after 4 or 5 ports (depending on whether > the first channel is aligned on a port boundary). (`bitshift` will be > between -7 and 7 inclusive on the first iteration, increasing by 8 for > each subsequent operation.) > > Signed-off-by: Ian Abbott <abbotti@xxxxxxxxx> Patch queued for .62, thank you Ian. Willy -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html