[PATCH v4 00/12] can: m_can: Optimizations for m_can/tcan part 2

From: Markus Schneider-Pargmann
Date: Wed Jun 21 2023 - 05:24:23 EST


Hi Marc, Simon and everyone,

thanks again for taking the time for review.

This version has the fixes for the issues you pointed out in v3.
It is tested on tcan455x but I don't have hardware with mcan on the SoC
myself so any testing is appreciated.

The series implements many small and bigger throughput improvements and
adds rx/tx coalescing at the end.

Based on v6.4-rc1. Also available at
https://gitlab.baylibre.com/msp8/linux/-/tree/topic/mcan-optimization/v6.4?ref_type=heads

Best,
Markus

Changes in v4:
- Create and use struct m_can_fifo_element in m_can_tx_handler
- Fix memcpy_and_pad to copy the full buffer
- Fixed a few checkpatch warnings
- Change putidx to be unsigned
- Print hard_xmit error only once when TX FIFO is full

Changes in v3:
- Remove parenthesis in error messages
- Use memcpy_and_pad for buffer copy in 'can: m_can: Write transmit
header and data in one transaction'.
- Replace spin_lock with spin_lock_irqsave. I got a report of a
interrupt that was calling start_xmit just after the netqueue was
woken up before the locked region was exited. spin_lock_irqsave should
fix this. I attached the full stack at the end of the mail if someone
wants to know.
- Rebased to v6.3-rc1.
- Removed tcan4x5x patches from this series.

Changes in v2:
- Rebased on v6.2-rc5
- Fixed missing/broken accounting for non peripheral m_can devices.

previous versions:
v1 - https://lore.kernel.org/lkml/20221221152537.751564-1-msp@xxxxxxxxxxxx
v2 - https://lore.kernel.org/lkml/20230125195059.630377-1-msp@xxxxxxxxxxxx
v3 - https://lore.kernel.org/lkml/20230315110546.2518305-1-msp@xxxxxxxxxxxx/

Markus Schneider-Pargmann (12):
can: m_can: Write transmit header and data in one transaction
can: m_can: Implement receive coalescing
can: m_can: Implement transmit coalescing
can: m_can: Add rx coalescing ethtool support
can: m_can: Add tx coalescing ethtool support
can: m_can: Use u32 for putidx
can: m_can: Cache tx putidx
can: m_can: Use the workqueue as queue
can: m_can: Introduce a tx_fifo_in_flight counter
can: m_can: Use tx_fifo_in_flight for netif_queue control
can: m_can: Implement BQL
can: m_can: Implement transmit submission coalescing

drivers/net/can/m_can/m_can.c | 516 +++++++++++++++++++++++++---------
drivers/net/can/m_can/m_can.h | 35 ++-
2 files changed, 418 insertions(+), 133 deletions(-)


base-commit: ac9a78681b921877518763ba0e89202254349d1b
--
2.40.1