linux/drivers/reset
Bartosz Golaszewski 78ebbff6d1 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>
2026-03-09 10:20:04 +01:00
..
amlogic Reset controller updates for v6.14 (v2) 2025-01-15 18:05:41 +01:00
hisilicon reset: hisilicon: hi6220: add missing MODULE_DESCRIPTION() macro 2024-06-21 13:49:25 +02:00
spacemit reset: spacemit: Add SpacemiT K3 reset driver 2026-01-24 16:53:02 +01:00
starfive reset: starfive: jh71x0: Fix accessing the empty member on JH7110 SoC 2024-09-30 14:24:37 +02:00
sti reset: sti: allow building under COMPILE_TEST 2024-06-24 09:50:31 +02:00
tegra reset: tegra-bpmp: allow building under COMPILE_TEST 2024-07-01 09:57:48 +02:00
core.c reset: handle removing supplier before consumers 2026-03-09 10:20:04 +01:00
Kconfig reset: Create subdirectory for SpacemiT drivers 2026-01-24 16:53:02 +01:00
Makefile reset: Create subdirectory for SpacemiT drivers 2026-01-24 16:53:02 +01:00
reset-a10sr.c reset: a10sr: add missing of_match_table reference 2021-05-10 09:48:17 +02:00
reset-aspeed.c reset: aspeed: register AST2700 reset auxiliary bus device 2025-08-14 12:17:45 +02:00
reset-ath79.c reset: ath79: Use devm_register_restart_handler() 2026-03-06 11:03:28 +01:00
reset-axs10x.c reset: axs10x: Use devm_platform_ioremap_resource() 2023-05-08 09:28:31 +02:00
reset-bcm6345.c reset: bcm6345: add support for bcm63xx ephy control register 2025-08-14 12:13:55 +02:00
reset-berlin.c reset: berlin: fix OF node leak in probe() error path 2024-09-02 11:51:19 +02:00
reset-brcmstb-rescal.c reset: brcmstb-rescal: Use devm_platform_ioremap_resource() 2023-05-08 09:28:31 +02:00
reset-brcmstb.c reset: brcmstb: Use devm_platform_get_and_ioremap_resource() 2023-11-28 17:19:38 +01:00
reset-eic7700.c reset: eswin: Add eic7700 reset driver 2025-11-18 17:52:54 +01:00
reset-eyeq.c reset: eyeq: fix OF node leak 2025-08-27 16:40:13 +02:00
reset-gpio.c reset: gpio: remove unneeded auxiliary_set_drvdata() 2026-03-09 10:17:50 +01:00
reset-hsdk.c reset: reset-hsdk: Use devm_platform_ioremap_resource() 2023-05-08 09:28:31 +02:00
reset-imx-scu.c reset: imx: fix incorrect module device table 2025-03-14 16:46:15 +01:00
reset-imx7.c reset: Explicitly include correct DT includes 2023-07-28 17:36:20 +02:00
reset-imx8mp-audiomix.c reset: imx8mp-audiomix: Support i.MX8ULP SIM LPAV 2026-01-24 16:22:49 +01:00
reset-intel-gw.c reset: intel: Use devm_register_restart_handler() 2026-03-06 11:03:28 +01:00
reset-k210.c reset: k210: fix OF node leak in probe() error path 2024-09-02 11:51:19 +02:00
reset-k230.c reset: canaan: add reset driver for Kendryte K230 2025-06-27 17:45:51 +02:00
reset-lantiq.c reset: lantiq: remove unneeded call to platform_set_drvdata() 2023-08-08 15:31:00 +02:00
reset-lpc18xx.c reset: lpc18xx: Use devm_register_sys_off_handler() 2026-03-06 11:03:28 +01:00
reset-ma35d1.c reset: ma35d1: Use devm_register_sys_off_handler() 2026-03-06 11:03:28 +01:00
reset-microchip-sparx5.c reset: mchp: sparx5: Fix for lan966x 2025-03-13 09:40:26 +01:00
reset-mpfs.c reset: mpfs: add non-auxiliary bus probing 2025-11-11 16:47:24 +00:00
reset-npcm.c reset: npcm: Use devm_register_sys_off_handler() 2026-03-06 11:03:28 +01:00
reset-pistachio.c
reset-qcom-aoss.c reset: qcom-aoss: Convert to devm_platform_ioremap_resource() 2023-11-28 17:19:39 +01:00
reset-qcom-pdc.c reset: remove unneeded 'fast_io' parameter in regmap_config 2025-08-14 12:21:39 +02:00
reset-raspberrypi.c
reset-rzg2l-usbphy-ctrl.c reset: rzg2l-usbphy-ctrl: Add suspend/resume support 2026-01-24 16:40:25 +01:00
reset-rzv2h-usb2phy.c reset: Add USB2PHY port reset driver for Renesas RZ/V2H(P) 2025-05-05 15:18:35 +02:00
reset-scmi.c
reset-simple.c reset: simple: add support for Sophgo CV1800B 2025-06-27 18:20:15 +02:00
reset-socfpga.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
reset-sunplus.c reset: sunplus: Use devm_register_sys_off_handler() 2026-03-06 11:03:28 +01:00
reset-sunxi.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
reset-th1520.c reset: th1520: Support reset controllers in more subsystems 2025-11-18 17:52:54 +01:00
reset-ti-sci.c Get rid of 'remove_new' relic from platform driver struct 2024-12-01 15:12:43 -08:00
reset-ti-syscon.c reset: ti: syscon: remove unneeded call to platform_set_drvdata() 2023-08-08 15:31:00 +02:00
reset-tn48m.c reset: Add Delta TN48M CPLD reset controller 2022-02-25 09:59:35 +01:00
reset-tps380x.c reset: tps380x: Fix spelling mistake "Voltags" -> "Voltage" 2022-07-28 14:08:50 +02:00
reset-uniphier-glue.c reset: uniphier-glue: Use devm_reset_control_bulk_get_shared_deasserted() 2024-10-01 17:39:53 +02:00
reset-uniphier.c reset: Explicitly include correct DT includes 2023-07-28 17:36:20 +02:00
reset-zynq.c reset: zynq: remove unneeded call to platfrom_set_drvdata() 2023-08-08 15:31:00 +02:00
reset-zynqmp.c reset: zynqmp: removed unneeded call to platform_set_drvdata() 2023-08-08 15:31:00 +02:00