OpenCloudOS-Kernel/drivers/net/can
Ahmed S. Darwish 2fec5104f9 can: kvaser_usb: Read all messages in a bulk-in URB buffer
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>
Cc: linux-stable <stable@vger.kernel.org>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
2015-03-09 10:22:24 +01:00
..
c_can Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-01-27 16:59:56 -08:00
cc770 can: move can_stats.bus_off++ from can_bus_off into can_change_state 2015-01-20 13:56:53 +01:00
m_can Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2015-01-27 16:59:56 -08:00
mscan Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
sja1000 Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
softing can: move can_stats.bus_off++ from can_bus_off into can_change_state 2015-01-20 13:56:53 +01:00
spi can: move can_stats.bus_off++ from can_bus_off into can_change_state 2015-01-20 13:56:53 +01:00
usb can: kvaser_usb: Read all messages in a bulk-in URB buffer 2015-03-09 10:22:24 +01:00
Kconfig drivers/net/can/Kconfig: Let CAN_AT91 depend on HAS_IOMEM 2014-10-03 15:52:03 -07:00
Makefile can: Enable -D__CHECK_ENDIAN__ for sparse by default 2014-12-07 21:22:06 +01:00
at91_can.c can: at91_can: remove unused variable 2015-01-21 22:47:44 +01:00
bfin_can.c can: move can_stats.bus_off++ from can_bus_off into can_change_state 2015-01-20 13:56:53 +01:00
dev.c can: add missing initialisations in CAN related skbuffs 2015-03-09 10:22:24 +01:00
flexcan.c can: flexcan: remove unused variable 2015-01-21 22:47:44 +01:00
grcan.c net: can: drop owner assignment from platform_drivers 2014-10-20 16:20:59 +02:00
janz-ican3.c can: janz-ican3: fix type mismatch in assignment 2015-02-04 14:06:43 +01:00
led.c can: only rename enabled led triggers when changing the netdev name 2014-05-27 15:05:41 +02:00
pch_can.c can: move can_stats.bus_off++ from can_bus_off into can_change_state 2015-01-20 13:56:53 +01:00
rcar_can.c can: move can_stats.bus_off++ from can_bus_off into can_change_state 2015-01-20 13:56:53 +01:00
slcan.c can: slcan/vcan: eliminate banner[] variable, switch to pr_info() 2014-12-07 21:22:05 +01:00
ti_hecc.c can: move can_stats.bus_off++ from can_bus_off into can_change_state 2015-01-20 13:56:53 +01:00
vcan.c can: slcan/vcan: eliminate banner[] variable, switch to pr_info() 2014-12-07 21:22:05 +01:00
xilinx_can.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00