can: kvaser_pciefd: Fix echo_skb race
authorAxel Forsman <axfo@kvaser.com>
Tue, 20 May 2025 11:43:31 +0000 (13:43 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Tue, 20 May 2025 19:35:39 +0000 (21:35 +0200)
commit8256e0ca601051933e9395746817f3801fa9a6bf
tree2687ed76eb8d4c3ccbd7b4e5eb454177d833fef5
parent9176bd205ee0b2cd35073a9973c2a0936bcb579e
can: kvaser_pciefd: Fix echo_skb race

The functions kvaser_pciefd_start_xmit() and
kvaser_pciefd_handle_ack_packet() raced to stop/wake TX queues and
get/put echo skbs, as kvaser_pciefd_can->echo_lock was only ever taken
when transmitting and KCAN_TX_NR_PACKETS_CURRENT gets decremented
prior to handling of ACKs. E.g., this caused the following error:

    can_put_echo_skb: BUG! echo_skb 5 is occupied!

Instead, use the synchronization helpers in netdev_queues.h. As those
piggyback on BQL barriers, start updating in-flight packets and bytes
counts as well.

Cc: stable@vger.kernel.org
Signed-off-by: Axel Forsman <axfo@kvaser.com>
Tested-by: Jimmy Assarsson <extja@kvaser.com>
Reviewed-by: Jimmy Assarsson <extja@kvaser.com>
Link: https://patch.msgid.link/20250520114332.8961-3-axfo@kvaser.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/kvaser_pciefd.c