>From: Nitka, Grzegorz <[email protected]>
>Sent: Sunday, June 7, 2026 8:31 PM
>
>__dpll_pin_register() emits dpll_pin_create_ntf() internally, but
>__dpll_pin_unregister() left the matching delete to its callers. The
>counts then diverge on dpll_pin_on_pin_register() rollback and on
>dpll_pin_on_pin_unregister(), leaking stale notifications.
>
>Emit dpll_pin_delete_ntf() inside __dpll_pin_unregister() and drop the
>now-redundant call in dpll_pin_unregister().
>
>Fixes: 9431063ad323 ("dpll: core: Add DPLL framework base functions")

Reviewed-by: Arkadiusz Kubalewski <[email protected]>

>Signed-off-by: Grzegorz Nitka <[email protected]>
>---
> drivers/dpll/dpll_core.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>diff --git a/drivers/dpll/dpll_core.c b/drivers/dpll/dpll_core.c
>index ea45bb41376c..1aaf62775408 100644
>--- a/drivers/dpll/dpll_core.c
>+++ b/drivers/dpll/dpll_core.c
>@@ -926,6 +926,7 @@ __dpll_pin_unregister(struct dpll_device *dpll, struct
>dpll_pin *pin,
>                     const struct dpll_pin_ops *ops, void *priv, void
>*cookie)
> {
>       ASSERT_DPLL_PIN_REGISTERED(pin);
>+      dpll_pin_delete_ntf(pin);
>       dpll_xa_ref_pin_del(&dpll->pin_refs, pin, ops, priv, cookie);
>       dpll_xa_ref_dpll_del(&pin->dpll_refs, dpll, ops, priv, cookie);
>       if (xa_empty(&pin->dpll_refs)) {
>@@ -953,7 +954,6 @@ void dpll_pin_unregister(struct dpll_device *dpll,
>struct dpll_pin *pin,
>               return;
>
>       mutex_lock(&dpll_lock);
>-      dpll_pin_delete_ntf(pin);
>       __dpll_pin_unregister(dpll, pin, ops, priv, NULL);
>       mutex_unlock(&dpll_lock);
> }
>--
>2.39.3

Reply via email to