RE: [Intel-wired-lan] [PATCH net-next v2 09/12] dpll: Prevent duplicate registrations
From: Loktionov, Aleksandr
Date: Mon Jan 19 2026 - 02:51:03 EST
> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@xxxxxxxxxx> On Behalf
> Of Ivan Vecera
> Sent: Friday, January 16, 2026 7:46 PM
> To: netdev@xxxxxxxxxxxxxxx
> Cc: Eric Dumazet <edumazet@xxxxxxxxxx>; Nguyen, Anthony L
> <anthony.l.nguyen@xxxxxxxxx>; Rob Herring <robh@xxxxxxxxxx>; Leon
> Romanovsky <leon@xxxxxxxxxx>; Lobakin, Aleksander
> <aleksander.lobakin@xxxxxxxxx>; linux-rdma@xxxxxxxxxxxxxxx; Kitszel,
> Przemyslaw <przemyslaw.kitszel@xxxxxxxxx>; Kubalewski, Arkadiusz
> <arkadiusz.kubalewski@xxxxxxxxx>; intel-wired-lan@xxxxxxxxxxxxxxxx;
> Jakub Kicinski <kuba@xxxxxxxxxx>; Paolo Abeni <pabeni@xxxxxxxxxx>;
> devicetree@xxxxxxxxxxxxxxx; Conor Dooley <conor+dt@xxxxxxxxxx>; Jiri
> Pirko <jiri@xxxxxxxxxxx>; Richard Cochran <richardcochran@xxxxxxxxx>;
> Saravana Kannan <saravanak@xxxxxxxxxx>; Prathosh Satish
> <Prathosh.Satish@xxxxxxxxxxxxx>; Vadim Fedorenko
> <vadim.fedorenko@xxxxxxxxx>; Mark Bloch <mbloch@xxxxxxxxxx>; linux-
> kernel@xxxxxxxxxxxxxxx; Tariq Toukan <tariqt@xxxxxxxxxx>; Andrew Lunn
> <andrew+netdev@xxxxxxx>; Jonathan Lemon <jonathan.lemon@xxxxxxxxx>;
> Krzysztof Kozlowski <krzk+dt@xxxxxxxxxx>; Saeed Mahameed
> <saeedm@xxxxxxxxxx>; David S. Miller <davem@xxxxxxxxxxxxx>
> Subject: [Intel-wired-lan] [PATCH net-next v2 09/12] 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.
>
> Signed-off-by: Ivan Vecera <ivecera@xxxxxxxxxx>
> ---
> drivers/dpll/dpll_core.c | 12 ++++--------
> 1 file changed, 4 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/dpll/dpll_core.c b/drivers/dpll/dpll_core.c index
> f2a77eb1b9916..8616d6285c646 100644
> --- a/drivers/dpll/dpll_core.c
> +++ b/drivers/dpll/dpll_core.c
> @@ -161,10 +161,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;
> }
> @@ -244,10 +242,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;
> }
> --
> 2.52.0
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@xxxxxxxxx>