linux_dsm_epyc7002/drivers/net/can
Andri Yngvason 746201235b can: cc770: Fix queue stall & dropped RTR reply
While waiting for the TX object to send an RTR, an external message with a
matching id can overwrite the TX data. In this case we must call the rx
routine and then try transmitting the message that was overwritten again.

The queue was being stalled because the RX event did not generate an
interrupt to wake up the queue again and the TX event did not happen
because the TXRQST flag is reset by the chip when new data is received.

According to the CC770 datasheet the id of a message object should not be
changed while the MSGVAL bit is set. This has been fixed by resetting the
MSGVAL bit before modifying the object in the transmit function and setting
it after. It is not enough to set & reset CPUUPD.

It is important to keep the MSGVAL bit reset while the message object is
being modified. Otherwise, during RTR transmission, a frame with matching
id could trigger an rx-interrupt, which would cause a race condition
between the interrupt routine and the transmit function.

Signed-off-by: Andri Yngvason <andri.yngvason@marel.com>
Tested-by: Richard Weinberger <richard@nod.at>
Cc: linux-stable <stable@vger.kernel.org>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
2018-03-14 13:01:22 +01:00
..
c_can can: c_can_pci: make c_can_pci_data const 2017-12-01 09:14:22 +01:00
cc770 can: cc770: Fix queue stall & dropped RTR reply 2018-03-14 13:01:22 +01:00
ifi_canfd can: ifi: Repair the error handling 2018-03-12 09:55:12 +01:00
m_can can: m_can: select pinctrl state in each suspend/resume function 2018-03-12 10:38:20 +01:00
mscan treewide: replace dev->trans_start update with helper 2016-05-04 14:16:49 -04:00
peak_canfd can: peak/pcie_fd: remove useless code when interface starts 2018-03-12 09:55:12 +01:00
rcar scripts/spelling.txt: add regsiter -> register spelling mistake 2017-05-08 17:15:13 -07:00
sja1000 can: peak/pci: fix potential bug when probe() fails 2017-12-01 11:20:52 +01:00
softing License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
spi can: mcp251x: mcp251x_setup(): remove unused parameter "struct mcp251x_priv *priv" 2018-01-05 11:12:08 +01:00
usb Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-01-19 22:59:33 -05:00
at91_can.c net: can: at91_can: constify attribute_group structures. 2017-07-18 12:04:56 -07:00
bfin_can.c can: remove obsolete assignment for CAN protocol error type 2015-11-23 09:37:38 +01:00
dev.c can: migrate documentation to restructured text 2018-01-26 10:46:44 +01:00
flexcan.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-01-09 10:37:00 -05:00
grcan.c drivers/net: can: Convert timers to use timer_setup() 2017-10-27 12:09:15 +09:00
janz-ican3.c net: can: janz-ican3: constify attribute_group structures. 2017-07-18 12:04:56 -07:00
Kconfig can: add Virtual CAN Tunnel driver (vxcan) 2017-04-25 09:04:30 +02:00
led.c can: add combined rx/tx LED trigger support 2015-03-22 23:50:11 +01:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pch_can.c can: fix assignment of error location in CAN error messages 2015-11-23 09:37:34 +01:00
rx-offload.c can: rx-offload: can_rx_offload_add_timestamp: remove duplicate semicolon at return statement 2018-01-05 11:12:08 +01:00
slcan.c can: slcan: slc_alloc(): remove unused parameter "dev_t line" 2018-01-05 11:12:08 +01:00
sun4i_can.c can: sun4i: handle overrun in RX FIFO 2017-11-10 09:15:28 +01:00
ti_hecc.c can: ti_hecc: Fix napi poll return value for repoll 2017-12-01 11:20:52 +01:00
vcan.c can: migrate documentation to restructured text 2018-01-26 10:46:44 +01:00
vxcan.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2018-01-09 10:37:00 -05:00
xilinx_can.c drivers: net: generalize napi_complete_done() 2017-01-30 15:10:42 -05:00