RE: [PATCH v14 net-next 06/13] dpll: guard sync-pair removal on full pin unregister

From: Kubalewski, Arkadiusz

Date: Mon Jun 08 2026 - 12:45:40 EST


>From: Nitka, Grzegorz <grzegorz.nitka@xxxxxxxxx>
>Sent: Sunday, June 7, 2026 8:31 PM
>
>__dpll_pin_unregister() wiped the global sync-pair state on every
>(dpll, ops, priv, cookie) tuple removed from a pin. When a pin is
>registered multiple times and only one registration is being torn
>down, this dropped sync-pair pairings still in use by the surviving
>registrations.
>
>Move dpll_pin_ref_sync_pair_del() inside the xa_empty(&pin->dpll_refs)
>branch so it only runs when the last registration is gone, alongside
>clearing the DPLL_REGISTERED mark.
>
>Fixes: 58256a26bfb3 ("dpll: add reference sync get/set")

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

>Signed-off-by: Grzegorz Nitka <grzegorz.nitka@xxxxxxxxx>
>---
> drivers/dpll/dpll_core.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/dpll/dpll_core.c b/drivers/dpll/dpll_core.c
>index 58034be07080..ea45bb41376c 100644
>--- a/drivers/dpll/dpll_core.c
>+++ b/drivers/dpll/dpll_core.c
>@@ -926,11 +926,12 @@ __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_ref_sync_pair_del(pin->id);
> 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))
>+ if (xa_empty(&pin->dpll_refs)) {
>+ dpll_pin_ref_sync_pair_del(pin->id);
> xa_clear_mark(&dpll_pin_xa, pin->id, DPLL_REGISTERED);
>+ }
> }
>
> /**
>--
>2.39.3