can: xilinx_can: avoid non-requested bus error frames
authorAnssi Hannula <anssi.hannula@bitwise.fi>
Fri, 4 Oct 2019 09:02:56 +0000 (12:02 +0300)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Mon, 11 Nov 2019 20:58:09 +0000 (21:58 +0100)
commit91e9f2c0e7a49ec6a6673b4d97d535b838396fc9
tree8e4946a42f62965160ed9fde7b9ba8ed05bee328
parentb687a7792b9c28778f1d4359fafcec3c17147c58
can: xilinx_can: avoid non-requested bus error frames

Userspace can signal with CAN_CTRLMODE_BERR_REPORTING whether they need
reporting of bus errors (CAN_ERR_BUSERROR) or not.

However, xilinx_can driver currently always sends CAN_ERR_BUSERROR
frames to userspace on bus errors.

To improve performance on error conditions when bus error reporting is
not needed, avoid sending CAN_ERR_BUSERROR frames unless requested via
CAN_CTRLMODE_BERR_REPORTING.

The error interrupt is still kept enabled as there is no dedicated state
transition interrupt, but just disabling error frame submission still
yields a significant performance improvement. In a simple test with
continuous bus errors and no userspace programs reading/writing CAN I
saw system CPU load reduced by 1/3.

Tested on a ZynqMP board with CAN-FD v1.0.

Signed-off-by: Anssi Hannula <anssi.hannula@bitwise.fi>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/xilinx_can.c