All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guru Das Srinagesh <gurus@codeaurora.org>
To: Arnd Bergmann <arnd@arndb.de>
Cc: "Linux PWM List" <linux-pwm@vger.kernel.org>,
	"Thierry Reding" <thierry.reding@gmail.com>,
	"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
	"Subbaraman Narayanamurthy" <subbaram@codeaurora.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"Shawn Guo" <shawnguo@kernel.org>,
	"Sascha Hauer" <s.hauer@pengutronix.de>,
	"Pengutronix Kernel Team" <kernel@pengutronix.de>,
	"Fabio Estevam" <festevam@gmail.com>,
	"NXP Linux Team" <linux-imx@nxp.com>
Subject: Re: [PATCH v11 06/12] pwm: imx27: Use 64-bit division macro and function
Date: Tue, 31 Mar 2020 13:20:58 -0700	[thread overview]
Message-ID: <20200331202058.GB25781@codeaurora.org> (raw)
In-Reply-To: <CAK8P3a1VC6+0Tydm=BoK2NvHB1ZCPjE1Gfi-sTE5O-xnu3Ya3A@mail.gmail.com>

On Tue, Mar 31, 2020 at 05:24:52PM +0200, Arnd Bergmann wrote:
> On Mon, Mar 30, 2020 at 10:44 PM Guru Das Srinagesh
> <gurus@codeaurora.org> wrote:
> >
> > On Fri, Mar 20, 2020 at 06:09:39PM +0100, Arnd Bergmann wrote:
> > > On Fri, Mar 20, 2020 at 2:42 AM Guru Das Srinagesh <gurus@codeaurora.org> wrote:
> > >
> > > > @@ -240,8 +240,7 @@ static int pwm_imx27_apply(struct pwm_chip *chip, struct pwm_device *pwm,
> > > >
> > > >         period_cycles /= prescale;
> > > >         c = (unsigned long long)period_cycles * state->duty_cycle;
> > > > -       do_div(c, state->period);
> > > > -       duty_cycles = c;
> > > > +       duty_cycles = div64_u64(c, state->period);
> > > >
> > >
> > > This change looks fine, but I wonder if the code directly above it
> > >
> > >         c = clk_get_rate(imx->clk_per);
> > >         c *= state->period;
> > >         do_div(c, 1000000000);
> > >         period_cycles = c;
> > >
> > > might run into an overflow when both the clock rate and the period
> > > are large numbers.
> >
> > Hmm. Seems to me like addressing this would be outside the scope of this
> > patch series.
> 
> I think it should be part of the same series, addressing bugs that
> were introduced
> by the change to 64-bit period. If it's not getting fixed along with
> the other regressions,
> I fear nobody is going to go back and fix it later.

Makes sense, I agree. Would this be an acceptable fix?

Instead of multiplying c and state->period first and then dividing by
10^9, first divide state->period by 10^9 and then multiply the quotient
of that division with c and assign it to period_cycles. Like so:

	c = clk_get_rate(imx->clk_per);
	c *= div_u64(state->period, 1000000000);
	period_cycles = c;

This should take care of overflow not happening because state->period is
converted from nanoseconds to seconds early on and so becomes a small
number.

Thank you.

Guru Das.

  reply	other threads:[~2020-03-31 20:21 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-20  1:41 [PATCH v11 00/12] Convert PWM period and duty cycle to u64 Guru Das Srinagesh
2020-03-20  1:41 ` [Intel-gfx] " Guru Das Srinagesh
2020-03-20  1:41 ` Guru Das Srinagesh
2020-03-20  1:41 ` Guru Das Srinagesh
2020-03-20  1:41 ` [PATCH v11 01/12] drm/i915: Use 64-bit division macro Guru Das Srinagesh
2020-03-20  1:41   ` [Intel-gfx] " Guru Das Srinagesh
2020-03-20  1:41   ` Guru Das Srinagesh
2020-03-20  1:41 ` [PATCH v11 02/12] hwmon: pwm-fan: " Guru Das Srinagesh
2020-03-20  1:41 ` [PATCH v11 03/12] ir-rx51: " Guru Das Srinagesh
2020-03-20  1:41 ` [PATCH v11 04/12] pwm: clps711x: Cast period to u32 before use as divisor Guru Das Srinagesh
2020-03-20 17:11   ` Arnd Bergmann
2020-04-07  0:26     ` Guru Das Srinagesh
2020-03-20  1:41 ` [PATCH v11 05/12] pwm: pwm-imx-tpm: Use 64-bit division macro Guru Das Srinagesh
2020-03-20  1:41 ` [PATCH v11 06/12] pwm: imx27: Use 64-bit division macro and function Guru Das Srinagesh
2020-03-20 17:09   ` Arnd Bergmann
2020-03-30 20:43     ` Guru Das Srinagesh
2020-03-31 15:24       ` Arnd Bergmann
2020-03-31 20:20         ` Guru Das Srinagesh [this message]
2020-03-31 20:49           ` Thierry Reding
2020-04-02 20:16             ` Guru Das Srinagesh
2020-04-02 20:55               ` Guru Das Srinagesh
2020-04-02 21:16               ` Arnd Bergmann
2020-04-03 17:37                 ` Guru Das Srinagesh
2020-04-03 19:13                   ` Arnd Bergmann
2020-03-20  1:41 ` [PATCH v11 07/12] pwm: sifive: Use 64-bit division macro Guru Das Srinagesh
2020-03-20  1:41   ` Guru Das Srinagesh
2020-03-20  1:41 ` [PATCH v11 08/12] pwm: stm32-lp: Use %llu format specifier for period Guru Das Srinagesh
2020-03-20 10:45   ` Joe Perches
2020-03-30 19:30     ` Guru Das Srinagesh
2020-03-20  1:41 ` [PATCH v11 09/12] pwm: sun4i: Use 64-bit division function Guru Das Srinagesh
2020-03-20 17:02   ` Arnd Bergmann
2020-03-20  1:41 ` [PATCH v11 10/12] backlight: pwm_bl: " Guru Das Srinagesh
2020-03-20  1:41   ` Guru Das Srinagesh
2020-03-20  1:41   ` Guru Das Srinagesh
2020-03-20 13:31   ` Lee Jones
2020-03-20 13:31     ` Lee Jones
2020-03-20 13:31     ` Lee Jones
2020-03-24 11:07     ` Lee Jones
2020-03-24 11:07       ` Lee Jones
2020-03-24 11:07       ` Lee Jones
2020-03-24 12:57       ` Uwe Kleine-König
2020-03-24 12:57         ` Uwe Kleine-König
2020-03-24 12:57         ` Uwe Kleine-König
2020-03-24 13:04         ` Daniel Thompson
2020-03-24 13:04           ` Daniel Thompson
2020-03-24 13:04           ` Daniel Thompson
2020-03-24 14:24           ` Lee Jones
2020-03-24 14:24             ` Lee Jones
2020-03-24 14:24             ` Lee Jones
2020-03-24 14:43             ` Uwe Kleine-König
2020-03-24 14:43               ` Uwe Kleine-König
2020-03-24 14:43               ` Uwe Kleine-König
2020-04-15  9:26               ` Lee Jones
2020-04-15  9:26                 ` Lee Jones
2020-04-15  9:26                 ` Lee Jones
2020-03-20  1:41 ` [PATCH v11 11/12] clk: pwm: Assign u64 divisor to unsigned int before use Guru Das Srinagesh
2020-03-20 17:00   ` Arnd Bergmann
2020-03-20 18:42     ` David Laight
2020-04-07  2:40       ` Guru Das Srinagesh
2020-03-20  1:41 ` [PATCH v11 12/12] pwm: core: Convert period and duty cycle to u64 Guru Das Srinagesh

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=20200331202058.GB25781@codeaurora.org \
    --to=gurus@codeaurora.org \
    --cc=arnd@arndb.de \
    --cc=festevam@gmail.com \
    --cc=kernel@pengutronix.de \
    --cc=linux-imx@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pwm@vger.kernel.org \
    --cc=s.hauer@pengutronix.de \
    --cc=shawnguo@kernel.org \
    --cc=subbaram@codeaurora.org \
    --cc=thierry.reding@gmail.com \
    --cc=u.kleine-koenig@pengutronix.de \
    /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.