dpll: Prevent duplicate registrations
Subsystems (3)
Ivan Vecera
reviewerPATCH 1/1 dpll: Prevent duplicate registrations
Modify the internal registration helpers dpll_xa_ref_{dpll,pin}_add() to reject duplicate registration attempts.
Previously, if a caller attempted to register the same pin multiple times (with the same ops, priv, and cookie) on the same device, the core silently increments the reference count and return success. This behavior is incorrect because if the caller makes these duplicate registrations then for the first one dpll_pin_registration is allocated and for others the associated dpll_pin_ref.refcount is incremented. During the first unregistration the associated dpll_pin_registration is freed and for others WARN is fired.
Fix this by updating the logic to return -EEXIST if a matching registration is found to enforce a strict "register once" policy.
--- drivers/dpll/dpll_core.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)
drivers/dpll/dpll_core.c +4 -8
@@ -83,10 +83,8 @@ dpll_xa_ref_pin_add(struct xarray *xa_pins, struct dpll_pin *pin,if (ref->pin != pin)continue ; reg =dpll_pin_registration_find (ref, ops, priv, cookie); -if (reg) { -refcount_inc (&ref->refcount); -return 0 ; - } +if (reg) +return -EEXIST ; ref_exists = true;break ; }
@@ -164,10 +162,8 @@ dpll_xa_ref_dpll_add(struct xarray *xa_dplls, struct dpll_device *dpll,if (ref->dpll != dpll)continue ; reg =dpll_pin_registration_find (ref, ops, priv, cookie); -if (reg) { -refcount_inc (&ref->refcount); -return 0 ; - } +if (reg) +return -EEXIST ; ref_exists = true;break ; }
Signature · 1 line
2.52.0
Quoted 56 lines
From: Ivan Vecera <[email protected]>
Sent: Wednesday, January 21, 2026 2:00 PMModify the internal registration helpers dpll_xa_ref_{dpll,pin}_add() to reject duplicate registration attempts.
Previously, if a caller attempted to register the same pin multiple times (with the same ops, priv, and cookie) on the same device, the core silently increments the reference count and return success. This behavior is incorrect because if the caller makes these duplicate registrations then for the first one
dpll_pin_registrationis allocated and for others the associated dpll_pin_ref.refcount is incremented. During the first unregistration the associateddpll_pin_registrationis freed and for others WARN is fired.Fix this by updating the logic to return
-EEXISTif a matching registration is found to enforce a strict "register once" policy.Fixes 9431063ad323 ("dpll: core: Add DPLL framework base functions")Signed-off-by Ivan Vecera <[email protected]>---
drivers/dpll/dpll_core.c| 12 ++++--------1 file changed, 4 insertions(+), 8 deletions(-)drivers/dpll/dpll_core.c +2
-4@@ -83,10 +83,8 @@ dpll_xa_ref_pin_add(struct xarray *xa_pins, struct dpll_pin *pin, if (ref->pin != pin) continue; reg =dpll_pin_registration_find (ref, ops, priv, cookie); -if (reg) { -refcount_inc (&ref->refcount); -return 0 ; - } +if (reg) +return -EEXIST ; ref_exists = true;break ;}drivers/dpll/dpll_core.c +2
-4@@ -164,10 +162,8 @@ dpll_xa_ref_dpll_add(struct xarray *xa_dplls, struct dpll_device *dpll, if (ref->dpll != dpll) continue; reg =dpll_pin_registration_find (ref, ops, priv, cookie); -if (reg) { -refcount_inc (&ref->refcount); -return 0 ; - } +if (reg) +return -EEXIST ; ref_exists = true;break ;}
Quoted 2 lines
--
2.52.0
Quoted 12 lines · Ivan Vecera
Modify the internal registration helpers dpll_xa_ref_{dpll,pin}_add() to reject duplicate registration attempts.
Previously, if a caller attempted to register the same pin multiple times (with the same ops, priv, and cookie) on the same device, the core silently increments the reference count and return success. This behavior is incorrect because if the caller makes these duplicate registrations then for the first one
dpll_pin_registrationis allocated and for others the associated dpll_pin_ref.refcount is incremented. During the first unregistration the associateddpll_pin_registrationis freed and for others WARN is fired.
Quoted 8 lines
Fix this by updating the logic to return
-EEXISTif a matching registration is found to enforce a strict "register once" policy.Fixes 9431063ad323 ("dpll: core: Add DPLL framework base functions")Signed-off-by Ivan Vecera <[email protected]>--- drivers/dpll/dpll_core.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-)
This patch was applied to netdev/net.git (main) by Jakub Kicinski <[email protected]>:
Hello:
This patch was applied to netdev/net.git (main)
by Jakub Kicinski <[email protected]>:
Quoted 12 lines · On Wed, 21 Jan 2026 14:00:11 +0100 you wrote:
Modify the internal registration helpers dpll_xa_ref_{dpll,pin}_add() to reject duplicate registration attempts.
Previously, if a caller attempted to register the same pin multiple times (with the same ops, priv, and cookie) on the same device, the core silently increments the reference count and return success. This behavior is incorrect because if the caller makes these duplicate registrations then for the first one
dpll_pin_registrationis allocated and for others the associated dpll_pin_ref.refcount is incremented. During the first unregistration the associateddpll_pin_registrationis freed and for others WARN is fired.
Quoted 1 line
[...]
Here is the summary with links:
- [net] dpll: Prevent duplicate registrations
https://git.kernel.org/netdev/net/c/f3ddbaaaaf4d
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html