All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Xuyang Dong" <dongxuyang@eswincomputing.com>
To: "Philipp Zabel" <p.zabel@pengutronix.de>,
	sashiko-reviews@lists.linux.dev
Cc: ukleinek@kernel.org, robh@kernel.org, krzk+dt@kernel.org,
	conor+dt@kernel.org, ben-linux@fluff.org,
	ben.dooks@codethink.co.uk, linux-pwm@vger.kernel.org,
	devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	daniel.lezcano@kernel.org, tglx@kernel.org,
	ningyu@eswincomputing.com, linmin@eswincomputing.com,
	xuxiang@eswincomputing.com, wangguosheng@eswincomputing.com,
	pinkesh.vaghela@einfochips.com
Subject: Re: Re: Re: [PATCH v13 5/5] clocksource: dw_apb_timer: Use reset array API to handle all resets
Date: Tue, 28 Jul 2026 18:59:36 +0800 (GMT+08:00)	[thread overview]
Message-ID: <683d4880.8ceb.19fa8614bba.Coremail.dongxuyang@eswincomputing.com> (raw)
In-Reply-To: <331adad68e3913cae30d8b1c5764177affabf60f.camel@pengutronix.de>

> 
> On Mo, 2026-07-27 at 17:26 +0800, Xuyang Dong wrote:
> > > 
> > > Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> > > - [High] The patch dynamically allocates an exclusive reset control array using the unmanaged `of_` API but fails to free it, permanently locking shared APB resets and deadlocking other devices.
> > > --
> > > 
> > > --- Patch [5]: [PATCH v13 5/5] clocksource: dw_apb_timer: Use reset array API to handle all resets ---
> > > commit 015418d722b66a454000fd7a9c2606bea3f7e18b
> > > Author: Xuyang Dong <dongxuyang@eswincomputing.com>
> > > 
> > > clocksource: dw_apb_timer: Use reset array API to handle all resets
> > > 
> > > This patch updates the timer initialization to fetch and pulse all reset lines
> > > specified in the device tree by switching to the reset array API.
> > > 
> > > > Replace it with devm_reset_control_array_get_optional_exclusive() to
> > > > fetch and control all reset lines listed in the device tree, ensuring
> > > > every line is properly asserted and deasserted rather than only the first.
> > > 
> > > [Severity: Low]
> > > This isn't a bug, but the commit message mentions using the managed
> > > devm_reset_control_array_get_optional_exclusive function, while the code
> > > below actually uses the unmanaged of_reset_control_array_get_optional_exclusive
> > > function.
> > > 
> > > > diff --git a/drivers/clocksource/dw_apb_timer_of.c b/drivers/clocksource/dw_apb_timer_of.c
> > > > --- a/drivers/clocksource/dw_apb_timer_of.c
> > > > +++ b/drivers/clocksource/dw_apb_timer_of.c
> > > [ ... ]
> > > > @@ -29,9 +29,11 @@ static int __init timer_get_base_and_rate(struct device_node *np,
> > > >  	/*
> > > >  	 * Reset the timer if the reset control is available, wiping
> > > > -	 * out the state the firmware may have left it
> > > > +	 * out the state the firmware may have left it.
> > > > +	 * Use array variant to handle multiple resets (e.g., timer
> > > > +	 * and APB interface resets) if specified in the device tree.
> > > >  	 */
> > > > -	rstc = of_reset_control_get(np, NULL);
> > > > +	rstc = of_reset_control_array_get_optional_exclusive(np);
> > > >  	if (!IS_ERR(rstc)) {
> > > >  		reset_control_assert(rstc);
> > > >  		reset_control_deassert(rstc);
> > > >  	}
> > > 
> > > [Severity: High]
> > > Does this code leak the exclusive reset control array?
> > > 
> > > Since of_reset_control_array_get_optional_exclusive is used instead of the
> > > managed devm variant, the returned rstc needs to be manually freed.
> > > 
> > > Because this API acquires exclusive references to the resets (which the
> > > comment notes might include shared APB interface resets), exiting
> 
> Is this true? Do multiple timers share the same bus reset?
> 

Hi Philipp,

Thanks for your comments and time.
I think each timer might have its own reset signal(s).

> > > timer_get_base_and_rate without calling reset_control_put(rstc) leaves
> > > these resets permanently locked.
> > > 
> > > Could this prevent other devices on the bus from acquiring their shared
> > > resets during probe by returning -EBUSY?
> > 
> > Hi Sashiko,
> > 
> > Will change devm_reset_control_array_get_optional_exclusive() to
> > of_reset_control_array_get_optional_exclusive() in commit message.
> > 
> > Add reset_control_put(rstc) after deassert. The next version will be 
> > updated with the following changes. 
> > 
> > -	rstc = of_reset_control_get(np, NULL);
> > +	rstc = of_reset_control_array_get_optional_exclusive(np);
> >  	if (!IS_ERR(rstc)) {
> >  		reset_control_assert(rstc);
> >  		reset_control_deassert(rstc);
> > +		reset_control_put(rstc);
> > +		rstc = NULL;
> >  	}
> > 
> > Do you think this change is correct?
> 
> It does allows multiple timers to repeatedly assert/deassert the same
> bus reset. Is this what you need?
> 

We do not need to repeatedly assert and deassert the same bus reset, 
because we do not want other timers to affect the current timer when 
they assert the reset.

> Semantically, it is wrong, though. By releasing the reset controls, the
> driver states that it doesn't care about the state of the reset lines
> anymore.
> 

Will drop "reset_control_put(rstc);" and "rstc = NULL;".
Keep only the content below:

-	rstc = of_reset_control_get(np, NULL);
+	rstc = of_reset_control_array_get_optional_exclusive(np);
 	if (!IS_ERR(rstc)) {
 		reset_control_assert(rstc);
 		reset_control_deassert(rstc);
 	}

Do you think this change is correct?

Best regards,
Xuyang Dong

  reply	other threads:[~2026-07-28 10:59 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-24  8:41 [PATCH v13 0/5] Update designware pwm driver dongxuyang
2026-07-24  8:43 ` [PATCH v13 1/5] dt-bindings: pwm: dwc: Document optional resets property dongxuyang
2026-07-24  8:53   ` sashiko-bot
2026-07-27  9:25     ` Xuyang Dong
2026-07-25 15:05   ` Krzysztof Kozlowski
2026-07-24  8:43 ` [PATCH v13 2/5] dt-bindings: pwm: dwc: Add eswin compatible dongxuyang
2026-07-24  8:56   ` sashiko-bot
2026-07-27  9:25     ` Xuyang Dong
2026-07-25 15:06   ` Krzysztof Kozlowski
2026-07-27  9:26     ` Xuyang Dong
2026-07-24  8:43 ` [PATCH v13 3/5] pwm: dwc: add of/platform support dongxuyang
2026-07-24  8:57   ` sashiko-bot
2026-07-27  9:25     ` Xuyang Dong
2026-07-24  8:44 ` [PATCH v13 4/5] dt-bindings: timer: dwc: Update resets property items dongxuyang
2026-07-24  8:55   ` sashiko-bot
2026-07-24 13:55     ` Rob Herring
2026-07-24  8:44 ` [PATCH v13 5/5] clocksource: dw_apb_timer: Use reset array API to handle all resets dongxuyang
2026-07-24  8:55   ` sashiko-bot
2026-07-27  9:26     ` Xuyang Dong
2026-07-27 14:44       ` Philipp Zabel
2026-07-28 10:59         ` Xuyang Dong [this message]
2026-07-28 11:43           ` Philipp Zabel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=683d4880.8ceb.19fa8614bba.Coremail.dongxuyang@eswincomputing.com \
    --to=dongxuyang@eswincomputing.com \
    --cc=ben-linux@fluff.org \
    --cc=ben.dooks@codethink.co.uk \
    --cc=conor+dt@kernel.org \
    --cc=daniel.lezcano@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=krzk+dt@kernel.org \
    --cc=linmin@eswincomputing.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pwm@vger.kernel.org \
    --cc=ningyu@eswincomputing.com \
    --cc=p.zabel@pengutronix.de \
    --cc=pinkesh.vaghela@einfochips.com \
    --cc=robh@kernel.org \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=tglx@kernel.org \
    --cc=ukleinek@kernel.org \
    --cc=wangguosheng@eswincomputing.com \
    --cc=xuxiang@eswincomputing.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.