[PATCH net v2 0/2] can: mcp251xfd: bound RX offload batches during long IRQs

From: Chris Strong via B4 Relay

Date: Tue Sep 29 2026 - 11:35:25 EST


Hi all,

Under sustained receive traffic, the MCP251XFD threaded interrupt handler
can remain active indefinitely, leaving received SKBs in the IRQ-local
RX-offload queue while NAPI remains unscheduled.

Add an RX-offload helper for identifying a full IRQ-local batch, then use
it in MCP251XFD to publish batches while the handler continues draining
the controller.

An equivalent backport was tested on a Qualcomm QRB5165
(msm-qrb5165-4.19 vendor tree, with mcp251xfd and rx-offload backported
from v5.15+) driving an MCP251863 over GENI SPI at 125 kbit/s. The system
remained operational overnight under 100% CAN bus load while receiving
more than 51 million frames.

This mainline version passes checkpatch and an x86_64 build with
MCP251XFD enabled. I do not have a setup that can run mainline with an
MCP251863, so it is build-tested only; a hardware test would be welcome.

Signed-off-by: Chris Strong <chris.strong@xxxxxxxxxxxxxxx>
---
Changes in v2:
- Split the RX-offload helper into a separate patch.
- Shorten the patch descriptions and use imperative mood.
- Keep the code unchanged from v1.

Link to v1: https://lore.kernel.org/r/20260922-upstream-can-rx-offload-batching-v1-1-099e7ca12c91@xxxxxxxxxxxxxxx

---
Chris Strong (2):
can: rx-offload: add IRQ queue flush predicate
can: mcp251xfd: flush RX offload queue during long IRQs

drivers/net/can/spi/mcp251xfd/mcp251xfd-core.c | 14 +++++++++++++-
include/linux/can/rx-offload.h | 7 +++++++
2 files changed, 20 insertions(+), 1 deletion(-)
---
base-commit: 54518e0e827f4ca9229ae657022c60bf60f5c1bf
change-id: 20260921-upstream-can-rx-offload-batching-6c8faed6c156

Best regards,
--
Chris Strong <chris.strong@xxxxxxxxxxxxxxx>