RE: [PATCH v14 net-next 05/13] dpll: emit per-dpll delete notifications in dpll_pin_on_pin_unregister()

From: Kubalewski, Arkadiusz

Date: Mon Jun 08 2026 - 12:58:34 EST


>From: Nitka, Grzegorz <grzegorz.nitka@xxxxxxxxx>
>Sent: Sunday, June 7, 2026 8:31 PM
>
>dpll_pin_on_pin_register() emits a creation notification for every
>parent->dpll_refs entry, but dpll_pin_on_pin_unregister() emitted only
>one deletion notification outside the loop. When a pin is registered
>against multiple parent dplls, userspace sees N creates but a single
>delete and leaks per-dpll state.
>
>Move dpll_pin_delete_ntf() into the loop and call it before
>__dpll_pin_unregister() so the DPLL_REGISTERED mark is still set when
>dpll_pin_available() is consulted.
>
>Fixes: 9d71b54b65b1 ("dpll: netlink: Add DPLL framework base functions")

Reviewed-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@xxxxxxxxx>

>Signed-off-by: Grzegorz Nitka <grzegorz.nitka@xxxxxxxxx>
>---
> drivers/dpll/dpll_core.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/dpll/dpll_core.c b/drivers/dpll/dpll_core.c
>index 80195f3a84f3..58034be07080 100644
>--- a/drivers/dpll/dpll_core.c
>+++ b/drivers/dpll/dpll_core.c
>@@ -1036,14 +1036,14 @@ void dpll_pin_on_pin_unregister(struct dpll_pin
>*parent, struct dpll_pin *pin,
> unsigned long i;
>
> mutex_lock(&dpll_lock);
>- dpll_pin_delete_ntf(pin);
>- dpll_xa_ref_pin_del(&pin->parent_refs, parent, ops, priv, pin);
> xa_for_each(&pin->dpll_refs, i, ref) {
> reg = dpll_pin_registration_find(ref, ops, priv, parent);
> if (!reg)
> continue;
>+ dpll_pin_delete_ntf(pin);
> __dpll_pin_unregister(ref->dpll, pin, ops, priv, parent);
> }
>+ dpll_xa_ref_pin_del(&pin->parent_refs, parent, ops, priv, pin);
> mutex_unlock(&dpll_lock);
> }
> EXPORT_SYMBOL_GPL(dpll_pin_on_pin_unregister);
>--
>2.39.3