]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
reset: handle removing supplier before consumers
authorBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Fri, 6 Mar 2026 17:22:52 +0000 (18:22 +0100)
committerPhilipp Zabel <p.zabel@pengutronix.de>
Mon, 9 Mar 2026 09:20:04 +0000 (10:20 +0100)
commit78ebbff6d1a05ffc2062d90231b4720618a57147
tree847e3cffea24528bfb126a005dad43b3a5a65a6c
parent1f10008aff7190e300e93ed33a0eb2d236c0b87d
reset: handle removing supplier before consumers

Except for the reset-gpio, all reset drivers use device tree - and as
such - benefit from the device links set up by driver core. This means,
that no reset supplier will be unbound before all its consumers have
been. For this reason, nobody bothered making the reset core resiliant
to the object life-time issues that are plagueing the kernel. In this
case: reset control handles referencing the reset provider device with
no serialization or NULL-pointer checking.

We now want to make the reset core fwnode-agnostic but before we do, we
must make sure it can survive unbinding of suppliers with consumers
still holding reset control handles.

To that end: use SRCU to protect the rcdev pointer inside struct
reset_control. We protect all sections using the pointer with SRCU
read-only critical sections and synchronize SRCU after every
modification of the pointer.

This is in line with what the GPIO subsystem does and what the proposed
revocable API tries to generalize. When and if the latter makes its way
into the kernel, reset core could potentially also be generalized to use
it.

Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
drivers/reset/core.c