>From: Nitka, Grzegorz <[email protected]>
>Sent: Sunday, June 7, 2026 8:31 PM
>
>The rollback path in dpll_pin_on_pin_register() called
>__dpll_pin_unregister() before dpll_pin_delete_ntf(). When the
>unregister dropped the pin's last DPLL reference it cleared the
>DPLL_REGISTERED mark in dpll_pin_xa, so the subsequent
>dpll_pin_event_send() failed dpll_pin_available() and aborted with
>-ENODEV. As a result userspace was never notified of the rollback
>deletion and remained out of sync with the kernel.
>
>Send the delete notification first, matching the order used by
>dpll_pin_unregister() and dpll_pin_on_pin_unregister().
>
>Fixes: 9d71b54b65b1 ("dpll: netlink: Add DPLL framework base functions")
>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 cea7e2be2cbc..80195f3a84f3 100644
>--- a/drivers/dpll/dpll_core.c
>+++ b/drivers/dpll/dpll_core.c
>@@ -1007,9 +1007,9 @@ int dpll_pin_on_pin_register(struct dpll_pin
>*parent, struct dpll_pin *pin,
> dpll_unregister:
>       xa_for_each(&parent->dpll_refs, i, ref)
>               if (i < stop) {
>+                      dpll_pin_delete_ntf(pin);
>                       __dpll_pin_unregister(ref->dpll, pin, ops, priv,
>                                             parent);
>-                      dpll_pin_delete_ntf(pin);

Hey Grzegorz,

Since patch 7/13 this is already part of __dpll_pin_unregister ?
The call should be removed at all? Please make sure all calls to
__dpll_pin_unregister(..) are aware of that, also maybe better to
put this all related to one patch?

>               }
>       dpll_xa_ref_pin_del(&pin->parent_refs, parent, ops, priv, pin);
> unlock:
>--
>2.39.3

Reply via email to