[PATCH v2 0/2] accel/rocket: fix shared-device lifecycle on probe failure and unbind
Igor Paunovic
royalnet026 at gmail.com
Thu Jul 30 23:49:31 PDT 2026
The rocket driver keeps a single shared DRM device on a driverless
"rknn" platform device: the first core to probe initializes it, the
last one to go away tears it down. This series fixes two independent
bugs in that lifecycle. Both were flagged by the Sashiko AI review on
my clks patch; I verified each by hand against the code and then on
hardware before writing the fixes.
Patch 1 releases the devres of the shared device on teardown. Today
every fini/re-init cycle leaks the previous rocket_device and pins its
accel minor - observable as /dev/accel/accel0 coming back as accel1,
then accel2, on unbind/rebind cycles of all cores.
Patch 2 makes the per-core slot bookkeeping stable across unbind and
rebind in any order. Today unbinding a lower-numbered core makes
higher-numbered ones unfindable (their runtime PM callbacks start
returning -ENODEV), a later unbind of such a core is silently skipped,
and a subsequent bind overwrites a slot whose IRQ handler and DRM
scheduler are still live.
Verified on RK3588 (Orange Pi 5 Plus, all three cores): the
unbind/rebind matrix keeps /dev/accel/accel0 stable and every core
findable; single-core operation works from the highest slot alone
(confirmed via the per-core IRQ counters moving to that core); the
forced-init-failure path releases its slot cleanly; and MobileNetV1
inference via the Teflon TFLite delegate stays bit-identical to the
stock driver throughout.
The series applies on top of Guangshuo Li's pending fix, on which
patch 1 depends textually (reviewed on-list):
https://lore.kernel.org/dri-devel/20260708062845.716487-1-lgs201920130244@gmail.com/
v2:
- patch 2: clear the slot's .dev when rocket_core_init() fails -
with .dev as the liveness marker a failed init left a
half-initialised core visible to lookups and made
rocket_job_open()'s live-slot walk overflow its allocation by one
entry (Jiaxing Hu); make the never-initialised slot skip in
sched_to_core() explicit; document the synchronous-probe assumption
- patch 1: unchanged
v1: https://lore.kernel.org/dri-devel/20260730080355.177422-1-royalnet026@gmail.com/
Igor Paunovic (2):
accel/rocket: release the shared device's devres on teardown
accel/rocket: keep core slots stable across unbind and rebind
drivers/accel/rocket/rocket_device.c | 2 ++
drivers/accel/rocket/rocket_device.h | 3 +++
drivers/accel/rocket/rocket_drv.c | 41 ++++++++++++++++++++++++++++++++----
drivers/accel/rocket/rocket_job.c | 13 +++++++------
4 files changed, 53 insertions(+), 10 deletions(-)
--
2.53.0
More information about the Linux-rockchip
mailing list