summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorAhmed S. Darwish <ahmed.darwish@valeo.com>2015-02-26 10:22:02 -0500
committerLuis Henriques <luis.henriques@canonical.com>2015-03-23 15:16:52 +0000
commitd5da657612af795f5e88876b42e5e5fef999383a (patch)
tree556350480757edf5221bdce726285032042e783d /kernel
parent8c27234f21d39456633cf12570cda29f895bef02 (diff)
can: kvaser_usb: Read all messages in a bulk-in URB buffer
commit 2fec5104f9c61de4cf2205aa355101e19a81f490 upstream. The Kvaser firmware can only read and write messages that are not crossing the USB endpoint's wMaxPacketSize boundary. While receiving commands from the CAN device, if the next command in the same URB buffer crossed that max packet size boundary, the firmware puts a zero-length placeholder command in its place then moves the real command to the next boundary mark. The driver did not recognize such behavior, leading to missing a good number of rx events during a heavy rx load session. Moreover, a tx URB context only gets freed upon receiving its respective tx ACK event. Over time, the free tx URB contexts pool gets depleted due to the missing ACK events. Consequently, the netif transmission queue gets __permanently__ stopped; no frames could be sent again except after restarting the CAN newtwork interface. Signed-off-by: Ahmed S. Darwish <ahmed.darwish@valeo.com> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
Diffstat (limited to 'kernel')
0 files changed, 0 insertions, 0 deletions