All of lore.kernel.org
 help / color / mirror / Atom feed
From: Herve Codina <herve.codina@bootlin.com>
To: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Liam Girdwood <lgirdwood@gmail.com>,
	Mark Brown <broonie@kernel.org>, Rob Herring <robh+dt@kernel.org>,
	Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Jonathan Cameron <jic23@kernel.org>,
	Lars-Peter Clausen <lars@metafoo.de>,
	Jaroslav Kysela <perex@perex.cz>, Takashi Iwai <tiwai@suse.com>,
	Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>,
	alsa-devel@alsa-project.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-iio@vger.kernel.org,
	Christophe Leroy <christophe.leroy@csgroup.eu>,
	Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: Re: [PATCH v3 06/12] minmax: Introduce {min,max}_array()
Date: Tue, 13 Jun 2023 10:00:00 +0200	[thread overview]
Message-ID: <20230613100000.6bd9e690@bootlin.com> (raw)
In-Reply-To: <CAHp75Vf2dmAS9VD-pgyZwVopVCFy8yFjhPWEj8sym=pfE7uxSA@mail.gmail.com>

Hi Andy,

On Mon, 12 Jun 2023 17:10:40 +0300
Andy Shevchenko <andy.shevchenko@gmail.com> wrote:

> On Mon, Jun 12, 2023 at 3:30 PM Herve Codina <herve.codina@bootlin.com> wrote:
> >
> > Introduce min_array() (resp max_array()) in order to get the
> > minimal (resp maximum) of values present in an array.  
> 
> Some comments below, after addressing them,
> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> 
> > Signed-off-by: Herve Codina <herve.codina@bootlin.com>
> > ---
> >  include/linux/minmax.h | 26 ++++++++++++++++++++++++++
> >  1 file changed, 26 insertions(+)
> >
> > diff --git a/include/linux/minmax.h b/include/linux/minmax.h
> > index 396df1121bff..37a211f22404 100644
> > --- a/include/linux/minmax.h
> > +++ b/include/linux/minmax.h
> > @@ -133,6 +133,32 @@
> >   */
> >  #define max_t(type, x, y)      __careful_cmp((type)(x), (type)(y), >)
> >
> > +#define __minmax_array(op, array, len) ({                      \  
> 
> Maybe it's my MUA, maybe the code contains spaces, can you switch to
> TABs if it's the case?
> 
> > +       typeof(array) __array = (array);                        \  
> 
> We have __must_be_array()

Using __must_be_array() will lead to some failure.
Indeed, we can have:
  --- 8< ---
  int *buff
  ...
  min = min_array(buff, nb_item);
  --- 8< ---

In this case, __must_be_array() will report that buff is not an array.

To avoid any confusion, what do you think if I renamed {min,max}_array()
to {min,max}_buffer() and replace __array by __buff and use *(__buff + xxx)
instead of array[xxx] in the macro.

This will lead to:
--- 8< ---
#define __minmax_buffer(op, buff, len) ({			\
	typeof(buff) __buff = (buff);			\
	typeof(len) __len = (len);				\
	typeof(*buff + 0) __element = *(__buff + --__len);	\
	while (__len--)						\
		__element = op(__element, *(__buff + __len]));	\
	__element; })

#define min_buffer(buffer, len) __minmax_array(min, buffer, len)
#define max_buffer(buffer, len) __minmax_array(max, buffer, len)
--- 8< ---

Regards,
Hervé

> 
> You will need to fix the inclusions in minmax.h at the same time, it needs
> linux/build_bug.h (which includes compiler.h needed for __UNIQUE_ID()
> and for the above mentioned one).
> 
> > +       typeof(len) __len = (len);                              \
> > +       typeof(*__array + 0) __element = __array[--__len];      \  
> 
> After above, this can be written as __array[0].
> 
> > +       while (__len--)                                         \
> > +               __element = op(__element, __array[__len]);      \
> > +       __element; })
> > +
> > +/**
> > + * min_array - return minimum of values present in an array
> > + * @array: array
> > + * @len: array length
> > + *
> > + * Note that @len must not be zero (empty array).
> > + */
> > +#define min_array(array, len) __minmax_array(min, array, len)
> > +
> > +/**
> > + * max_array - return maximum of values present in an array
> > + * @array: array
> > + * @len: array length
> > + *
> > + * Note that @len must not be zero (empty array).
> > + */
> > +#define max_array(array, len) __minmax_array(max, array, len)
> > +
> >  /**
> >   * clamp_t - return a value clamped to a given range using a given type
> >   * @type: the type of variable to use  
> 


  reply	other threads:[~2023-06-13  8:01 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-12 12:29 [PATCH v3 00/12] Add support for IIO devices in ASoC Herve Codina
2023-06-12 12:29 ` [PATCH v3 01/12] ASoC: dt-bindings: Add audio-iio-aux Herve Codina
2023-06-12 12:29 ` [PATCH v3 02/12] ASoC: dt-bindings: simple-card: Add additional-devs subnode Herve Codina
2023-06-12 12:29 ` [PATCH v3 03/12] iio: inkern: Check error explicitly in iio_channel_read_max() Herve Codina
2023-06-12 14:04   ` Andy Shevchenko
2023-06-12 12:29 ` [PATCH v3 04/12] iio: consumer.h: Fix raw values documentation notes Herve Codina
2023-06-12 14:16   ` Andy Shevchenko
2023-06-12 12:29 ` [PATCH v3 05/12] iio: inkern: Remove the 'unused' variable usage in iio_channel_read_max() Herve Codina
2023-06-12 14:05   ` Andy Shevchenko
2023-06-12 12:29 ` [PATCH v3 06/12] minmax: Introduce {min,max}_array() Herve Codina
2023-06-12 14:10   ` Andy Shevchenko
2023-06-13  8:00     ` Herve Codina [this message]
2023-06-13 17:08       ` Andy Shevchenko
2023-06-13 17:34         ` Herve Codina
2023-06-12 12:29 ` [PATCH v3 07/12] iio: inkern: Use max_array() to get the maximum value from an array Herve Codina
2023-06-12 14:12   ` Andy Shevchenko
2023-06-12 14:13     ` Andy Shevchenko
2023-06-12 12:29 ` [PATCH v3 08/12] iio: inkern: Replace a FIXME comment by a TODO one Herve Codina
2023-06-12 14:14   ` Andy Shevchenko
2023-06-12 12:29 ` [PATCH v3 09/12] iio: inkern: Add a helper to query an available minimum raw value Herve Codina
2023-06-12 14:15   ` Andy Shevchenko
2023-06-12 12:29 ` [PATCH v3 10/12] ASoC: soc-dapm.h: Convert macros to return a compound litteral Herve Codina
2023-06-12 14:23   ` Andy Shevchenko
2023-06-12 12:29 ` [PATCH v3 11/12] ASoC: codecs: Add support for the generic IIO auxiliary devices Herve Codina
2023-06-12 14:37   ` Andy Shevchenko
2023-06-13  9:37     ` Herve Codina
2023-06-13 13:24       ` Andy Shevchenko
2023-06-13 13:55         ` Herve Codina
2023-06-12 12:29 ` [PATCH v3 12/12] ASoC: simple-card: Handle additional devices Herve Codina

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=20230613100000.6bd9e690@bootlin.com \
    --to=herve.codina@bootlin.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=andy.shevchenko@gmail.com \
    --cc=broonie@kernel.org \
    --cc=christophe.leroy@csgroup.eu \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=jic23@kernel.org \
    --cc=krzysztof.kozlowski+dt@linaro.org \
    --cc=kuninori.morimoto.gx@renesas.com \
    --cc=lars@metafoo.de \
    --cc=lgirdwood@gmail.com \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=perex@perex.cz \
    --cc=robh+dt@kernel.org \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=tiwai@suse.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.