All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Théo Lebrun" <theo.lebrun@bootlin.com>
To: "Andi Shyti" <andi.shyti@kernel.org>
Cc: "Linus Walleij" <linus.walleij@linaro.org>,
	"Rob Herring" <robh+dt@kernel.org>,
	"Krzysztof Kozlowski" <krzysztof.kozlowski+dt@linaro.org>,
	"Conor Dooley" <conor+dt@kernel.org>,
	"Thomas Bogendoerfer" <tsbogend@alpha.franken.de>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-i2c@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <linux-mips@vger.kernel.org>,
	"Gregory Clement" <gregory.clement@bootlin.com>,
	"Vladimir Kondratiev" <vladimir.kondratiev@mobileye.com>,
	"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
	"Tawfik Bayouk" <tawfik.bayouk@mobileye.com>
Subject: Re: [SPAM] [PATCH v2 06/11] i2c: nomadik: support short xfer timeouts using waitqueue & hrtimer
Date: Mon, 04 Mar 2024 15:32:38 +0100	[thread overview]
Message-ID: <CZL1F576XCJB.2DBGD5Z7UUXIH@bootlin.com> (raw)
In-Reply-To: <uq6n6s4ksuxvkonowouhr747cnu4ccwvhgpl6r7txgdtnimqnz@sl33zjshzemk>

Hello,

On Mon Mar 4, 2024 at 2:54 PM CET, Andi Shyti wrote:
> Hi Theo,
>
> ...
>
> > +static bool nmk_i2c_wait_xfer_done(struct nmk_i2c_dev *priv)
> > +{
> > +	if (priv->timeout_usecs < jiffies_to_usecs(1)) {
> > +		unsigned long timeout_usecs = priv->timeout_usecs;
> > +		ktime_t timeout = ktime_set(0, timeout_usecs * NSEC_PER_USEC);
> > +
> > +		wait_event_hrtimeout(priv->xfer_wq, priv->xfer_done, timeout);
> > +	} else {
> > +		unsigned long timeout = usecs_to_jiffies(priv->timeout_usecs);
> > +
> > +		wait_event_timeout(priv->xfer_wq, priv->xfer_done, timeout);
> > +	}
> > +
> > +	return priv->xfer_done;
>
> You could eventually write this as
>
>   static bool nmk_i2c_wait_xfer_done(struct nmk_i2c_dev *priv)
>   {
> 	if (priv->timeout_usecs < jiffies_to_usecs(1)) {
> 		...
>
> 		return !wait_event_hrtimeout(...);
> 	}
>
> 	...
> 	return wait_event_timeout(...);
>   }
>
> It looks a bit cleaner to me... your choice.

The full block would become:

static bool nmk_i2c_wait_xfer_done(struct nmk_i2c_dev *priv)
{
	if (priv->timeout_usecs < jiffies_to_usecs(1)) {
		unsigned long timeout_usecs = priv->timeout_usecs;
		ktime_t timeout = ktime_set(0, timeout_usecs * NSEC_PER_USEC);

		return !wait_event_hrtimeout(priv->xfer_wq, priv->xfer_done,
					     timeout);
	}

	return wait_event_timeout(priv->xfer_wq, priv->xfer_done,
				  usecs_to_jiffies(priv->timeout_usecs));
}

Three things:

 - Deindenting the jiffy timeout case means no variable declaration
   after the if-block. This is fine from my point-of-view.

 - It means we depend on the half-mess that are return values from
   wait_event_*timeout() macros. I wanted to avoid that because it
   looks like an error when you read the above code and see one is
   negated while the other is not.

 - Also, I'm not confident in casting either return value to bool; what
   happens if either macro returns an error? This is a theoretical case
   that shouldn't happen, but behavior might change at some point or
   bugs could occur. We know priv->xfer_done will give us the right
   answer.

My preference still goes to the original version, but I'm happy we are
having a discussion about this code block.

> Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Thanks for your review Andi!

--
Théo Lebrun, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


WARNING: multiple messages have this Message-ID (diff)
From: "Théo Lebrun" <theo.lebrun@bootlin.com>
To: "Andi Shyti" <andi.shyti@kernel.org>
Cc: "Linus Walleij" <linus.walleij@linaro.org>,
	"Rob Herring" <robh+dt@kernel.org>,
	"Krzysztof Kozlowski" <krzysztof.kozlowski+dt@linaro.org>,
	"Conor Dooley" <conor+dt@kernel.org>,
	"Thomas Bogendoerfer" <tsbogend@alpha.franken.de>,
	<linux-arm-kernel@lists.infradead.org>,
	<linux-i2c@vger.kernel.org>, <devicetree@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>, <linux-mips@vger.kernel.org>,
	"Gregory Clement" <gregory.clement@bootlin.com>,
	"Vladimir Kondratiev" <vladimir.kondratiev@mobileye.com>,
	"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
	"Tawfik Bayouk" <tawfik.bayouk@mobileye.com>
Subject: Re: [SPAM] [PATCH v2 06/11] i2c: nomadik: support short xfer timeouts using waitqueue & hrtimer
Date: Mon, 04 Mar 2024 15:32:38 +0100	[thread overview]
Message-ID: <CZL1F576XCJB.2DBGD5Z7UUXIH@bootlin.com> (raw)
In-Reply-To: <uq6n6s4ksuxvkonowouhr747cnu4ccwvhgpl6r7txgdtnimqnz@sl33zjshzemk>

Hello,

On Mon Mar 4, 2024 at 2:54 PM CET, Andi Shyti wrote:
> Hi Theo,
>
> ...
>
> > +static bool nmk_i2c_wait_xfer_done(struct nmk_i2c_dev *priv)
> > +{
> > +	if (priv->timeout_usecs < jiffies_to_usecs(1)) {
> > +		unsigned long timeout_usecs = priv->timeout_usecs;
> > +		ktime_t timeout = ktime_set(0, timeout_usecs * NSEC_PER_USEC);
> > +
> > +		wait_event_hrtimeout(priv->xfer_wq, priv->xfer_done, timeout);
> > +	} else {
> > +		unsigned long timeout = usecs_to_jiffies(priv->timeout_usecs);
> > +
> > +		wait_event_timeout(priv->xfer_wq, priv->xfer_done, timeout);
> > +	}
> > +
> > +	return priv->xfer_done;
>
> You could eventually write this as
>
>   static bool nmk_i2c_wait_xfer_done(struct nmk_i2c_dev *priv)
>   {
> 	if (priv->timeout_usecs < jiffies_to_usecs(1)) {
> 		...
>
> 		return !wait_event_hrtimeout(...);
> 	}
>
> 	...
> 	return wait_event_timeout(...);
>   }
>
> It looks a bit cleaner to me... your choice.

The full block would become:

static bool nmk_i2c_wait_xfer_done(struct nmk_i2c_dev *priv)
{
	if (priv->timeout_usecs < jiffies_to_usecs(1)) {
		unsigned long timeout_usecs = priv->timeout_usecs;
		ktime_t timeout = ktime_set(0, timeout_usecs * NSEC_PER_USEC);

		return !wait_event_hrtimeout(priv->xfer_wq, priv->xfer_done,
					     timeout);
	}

	return wait_event_timeout(priv->xfer_wq, priv->xfer_done,
				  usecs_to_jiffies(priv->timeout_usecs));
}

Three things:

 - Deindenting the jiffy timeout case means no variable declaration
   after the if-block. This is fine from my point-of-view.

 - It means we depend on the half-mess that are return values from
   wait_event_*timeout() macros. I wanted to avoid that because it
   looks like an error when you read the above code and see one is
   negated while the other is not.

 - Also, I'm not confident in casting either return value to bool; what
   happens if either macro returns an error? This is a theoretical case
   that shouldn't happen, but behavior might change at some point or
   bugs could occur. We know priv->xfer_done will give us the right
   answer.

My preference still goes to the original version, but I'm happy we are
having a discussion about this code block.

> Reviewed-by: Andi Shyti <andi.shyti@kernel.org>

Thanks for your review Andi!

--
Théo Lebrun, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2024-03-04 14:32 UTC|newest]

Thread overview: 108+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-29 18:10 [PATCH v2 00/11] Add Mobileye EyeQ5 support to the Nomadik I2C controller & use hrtimers for timeouts Théo Lebrun
2024-02-29 18:10 ` Théo Lebrun
2024-02-29 18:10 ` [PATCH v2 01/11] dt-bindings: i2c: nomadik: add mobileye,eyeq5-i2c bindings and example Théo Lebrun
2024-02-29 18:10   ` Théo Lebrun
2024-02-29 19:26   ` Rob Herring
2024-02-29 19:26     ` Rob Herring
2024-03-01 15:11   ` Rob Herring
2024-03-01 15:11     ` Rob Herring
2024-03-01 15:47     ` Théo Lebrun
2024-03-01 15:47       ` Théo Lebrun
2024-02-29 18:10 ` [PATCH v2 02/11] dt-bindings: hwmon: lm75: use common hwmon schema Théo Lebrun
2024-02-29 18:10   ` Théo Lebrun
2024-02-29 19:26   ` Rob Herring
2024-02-29 19:26     ` Rob Herring
2024-03-01  6:37   ` Krzysztof Kozlowski
2024-03-01  6:37     ` Krzysztof Kozlowski
2024-03-01  6:53     ` Guenter Roeck
2024-03-01  6:53       ` Guenter Roeck
2024-03-01  9:41       ` Théo Lebrun
2024-03-01  9:41         ` Théo Lebrun
2024-03-01 10:13         ` Krzysztof Kozlowski
2024-03-01 10:13           ` Krzysztof Kozlowski
2024-03-01 10:44           ` Théo Lebrun
2024-03-01 10:44             ` Théo Lebrun
2024-03-01 11:35             ` Krzysztof Kozlowski
2024-03-01 11:35               ` Krzysztof Kozlowski
2024-03-01 14:09               ` Théo Lebrun
2024-03-01 14:09                 ` Théo Lebrun
2024-03-01 14:13                 ` Krzysztof Kozlowski
2024-03-01 14:13                   ` Krzysztof Kozlowski
2024-03-01 15:35             ` Rob Herring
2024-03-01 15:35               ` Rob Herring
2024-03-01 15:52               ` Théo Lebrun
2024-03-01 15:52                 ` Théo Lebrun
2024-03-01 15:38       ` Rob Herring
2024-03-01 15:38         ` Rob Herring
2024-03-01 19:21   ` Guenter Roeck
2024-03-01 19:21     ` Guenter Roeck
2024-02-29 18:10 ` [PATCH v2 03/11] i2c: nomadik: rename private struct pointers from dev to priv Théo Lebrun
2024-02-29 18:10   ` Théo Lebrun
2024-03-02  0:16   ` [SPAM] " Andi Shyti
2024-03-02  0:16     ` Andi Shyti
2024-03-04  9:13   ` Wolfram Sang
2024-03-04  9:13     ` Wolfram Sang
2024-02-29 18:10 ` [PATCH v2 04/11] i2c: nomadik: simplify IRQ masking logic Théo Lebrun
2024-02-29 18:10   ` Théo Lebrun
2024-03-02  0:39   ` [SPAM] " Andi Shyti
2024-03-02  0:39     ` Andi Shyti
2024-03-04  9:46     ` Théo Lebrun
2024-03-04  9:46       ` Théo Lebrun
2024-02-29 18:10 ` [PATCH v2 05/11] i2c: nomadik: use bitops helpers Théo Lebrun
2024-02-29 18:10   ` Théo Lebrun
2024-03-02  1:31   ` Andi Shyti
2024-03-02  1:31     ` Andi Shyti
2024-03-04 10:00     ` Théo Lebrun
2024-03-04 10:00       ` Théo Lebrun
2024-02-29 18:10 ` [PATCH v2 06/11] i2c: nomadik: support short xfer timeouts using waitqueue & hrtimer Théo Lebrun
2024-02-29 18:10   ` Théo Lebrun
2024-03-04  9:18   ` Wolfram Sang
2024-03-04  9:18     ` Wolfram Sang
2024-03-04 10:14     ` Théo Lebrun
2024-03-04 10:14       ` Théo Lebrun
2024-03-04 11:37       ` Wolfram Sang
2024-03-04 11:37         ` Wolfram Sang
2024-03-04 13:54   ` [SPAM] " Andi Shyti
2024-03-04 13:54     ` Andi Shyti
2024-03-04 14:32     ` Théo Lebrun [this message]
2024-03-04 14:32       ` Théo Lebrun
2024-03-04 15:09       ` Andi Shyti
2024-03-04 15:09         ` Andi Shyti
2024-02-29 18:10 ` [PATCH v2 07/11] i2c: nomadik: replace jiffies by ktime for FIFO flushing timeout Théo Lebrun
2024-02-29 18:10   ` Théo Lebrun
2024-03-04  9:23   ` Wolfram Sang
2024-03-04  9:23     ` Wolfram Sang
2024-03-04 13:55   ` Andi Shyti
2024-03-04 13:55     ` Andi Shyti
2024-02-29 18:10 ` [PATCH v2 08/11] i2c: nomadik: fetch i2c-transfer-timeout-us property from devicetree Théo Lebrun
2024-02-29 18:10   ` Théo Lebrun
2024-02-29 21:04   ` Linus Walleij
2024-02-29 21:04     ` Linus Walleij
2024-03-04  9:25   ` Wolfram Sang
2024-03-04  9:25     ` Wolfram Sang
2024-03-04 13:57   ` Andi Shyti
2024-03-04 13:57     ` Andi Shyti
2024-02-29 18:10 ` [PATCH v2 09/11] i2c: nomadik: support Mobileye EyeQ5 I2C controller Théo Lebrun
2024-02-29 18:10   ` Théo Lebrun
2024-02-29 21:08   ` Linus Walleij
2024-02-29 21:08     ` Linus Walleij
2024-03-04  9:27   ` Wolfram Sang
2024-03-04  9:27     ` Wolfram Sang
2024-03-04 10:25     ` Théo Lebrun
2024-03-04 10:25       ` Théo Lebrun
2024-03-04 14:08   ` Andi Shyti
2024-03-04 14:08     ` Andi Shyti
2024-03-04 14:53     ` Théo Lebrun
2024-03-04 14:53       ` Théo Lebrun
2024-02-29 18:10 ` [PATCH v2 10/11] MIPS: mobileye: eyeq5: add 5 I2C controller nodes Théo Lebrun
2024-02-29 18:10   ` Théo Lebrun
2024-02-29 21:09   ` Linus Walleij
2024-02-29 21:09     ` Linus Walleij
2024-02-29 18:10 ` [PATCH v2 11/11] MIPS: mobileye: eyeq5: add evaluation board I2C temp sensor Théo Lebrun
2024-02-29 18:10   ` Théo Lebrun
2024-02-29 21:09   ` Linus Walleij
2024-02-29 21:09     ` Linus Walleij
2024-03-06  1:49 ` [PATCH v2 00/11] Add Mobileye EyeQ5 support to the Nomadik I2C controller & use hrtimers for timeouts Andi Shyti
2024-03-06  1:49   ` Andi Shyti
2024-03-06  9:34   ` Théo Lebrun
2024-03-06  9:34     ` Théo Lebrun

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=CZL1F576XCJB.2DBGD5Z7UUXIH@bootlin.com \
    --to=theo.lebrun@bootlin.com \
    --cc=andi.shyti@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=gregory.clement@bootlin.com \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@vger.kernel.org \
    --cc=robh+dt@kernel.org \
    --cc=tawfik.bayouk@mobileye.com \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=tsbogend@alpha.franken.de \
    --cc=vladimir.kondratiev@mobileye.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.