Skip to contentSkip to conversation

perf/arm_cspmu: fix device leaks on module unload

PATCH In review Johan Hovold 2 participants 3 messages Nov 21, 2025 – Nov 24, 2025

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 perf/arm_cspmu: fix device leaks on module unload

Make sure to drop the references taken when looking up the backend devices during vendor module unload.

Fixes bfc653aa89cb ("perf: arm_cspmu: Separate Arm and vendor module")
Cc Besar Wicaksono <[email protected]>
---
 drivers/perf/arm_cspmu/arm_cspmu.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/perf/arm_cspmu/arm_cspmu.c +3 -1
index efa9b229e701..e0d4293f06f9 100644
@@ -1365,8 +1365,10 @@ void arm_cspmu_impl_unregister(const struct arm_cspmu_impl_match *impl_match)
 
 	/* Unbind the driver from all matching backend devices. */
 	while ((dev = driver_find_device(&arm_cspmu_driver.driver, NULL,
-			match, arm_cspmu_match_device)))
+			match, arm_cspmu_match_device))) {
 		device_release_driver(dev);
+		put_device(dev);
+	}
 
 	mutex_lock(&arm_cspmu_lock);
 
Signature · 1 line
2.51.2
maintainer
#1 lore raw
Quoted 16 lines · Johan Hovold

Make sure to drop the references taken when looking up the backend devices during vendor module unload.

Fixes bfc653aa89cb ("perf: arm_cspmu: Separate Arm and vendor module")
Cc Besar Wicaksono <[email protected]>
---
 drivers/perf/arm_cspmu/arm_cspmu.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/perf/arm_cspmu/arm_cspmu.c +0 -0
index efa9b229e701..e0d4293f06f9 100644

drivers/perf/arm_cspmu/arm_cspmu.c void arm_cspmu_impl_unregister(const struct arm_cspmu_impl_match *impl_match) · line 1371

Quoted 8 lines
drivers/perf/arm_cspmu/arm_cspmu.c +3 -1
@@ -1365,8 +1365,10 @@ void arm_cspmu_impl_unregister(const struct arm_cspmu_impl_match *impl_match)
 
 	/* Unbind the driver from all matching backend devices. */
 	while ((dev = driver_find_device(&arm_cspmu_driver.driver, NULL,
-			match, arm_cspmu_match_device)))
+			match, arm_cspmu_match_device))) {
 		device_release_driver(dev);
+		put_device(dev);
+	}

There's already a fix queued for this; please take a look:

https://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git/commit/?h=for-next/perf&id=970e1e41805f0bd49dc234330a9390f4708d097d

Wil

#2 lore raw
Quoted 28 lines · Will Deacon
Quoted 16 lines · Johan Hovold

Make sure to drop the references taken when looking up the backend devices during vendor module unload.

Fixes bfc653aa89cb ("perf: arm_cspmu: Separate Arm and vendor module")
Cc Besar Wicaksono <[email protected]>
---
 drivers/perf/arm_cspmu/arm_cspmu.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/perf/arm_cspmu/arm_cspmu.c +0 -0
index efa9b229e701..e0d4293f06f9 100644

drivers/perf/arm_cspmu/arm_cspmu.c void arm_cspmu_impl_unregister(const struct arm_cspmu_impl_match *impl_match) · line 1371

Quoted 8 lines
drivers/perf/arm_cspmu/arm_cspmu.c +3 -1
@@ -1365,8 +1365,10 @@ void arm_cspmu_impl_unregister(const struct arm_cspmu_impl_match *impl_match)
 
 	/* Unbind the driver from all matching backend devices. */
 	while ((dev = driver_find_device(&arm_cspmu_driver.driver, NULL,
-			match, arm_cspmu_match_device)))
+			match, arm_cspmu_match_device))) {
 		device_release_driver(dev);
+		put_device(dev);
+	}

There's already a fix queued for this; please take a look:

Quoted 1 line

https://git.kernel.org/pub/scm/linux/kernel/git/will/linux.git/commit/?h=for-next/perf&id=970e1e41805f0bd49dc234330a9390f4708d097d

Ah, forgot to check linux-next here, sorry.

The diff of that commit is identical even if the commit summary is a bit misleading as this is not an error path.

Johan