From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Jacopo Mondi <jacopo@jmondi.org>
Cc: Jonathan Cameron <jic23@kernel.org>,
Lars-Peter Clausen <lars@metafoo.de>,
Matt Ranostay <matt.ranostay@konsulko.com>,
Magnus Damm <magnus.damm@gmail.com>,
linux-iio@vger.kernel.org
Subject: Re: [PATCH v3.1 2/3] iio: chemical: Add Senseair Sunrise 006-0-007 driver
Date: Mon, 23 Aug 2021 12:40:00 +0300 [thread overview]
Message-ID: <YSNs8Oo+1oMZ5TJS@smile.fi.intel.com> (raw)
In-Reply-To: <20210823090610.hr6a7wjhkpyuupxv@uno.localdomain>
On Mon, Aug 23, 2021 at 11:06:10AM +0200, Jacopo Mondi wrote:
> On Mon, Aug 23, 2021 at 11:35:23AM +0300, Andy Shevchenko wrote:
> > On Mon, Aug 23, 2021 at 09:36:39AM +0200, Jacopo Mondi wrote:
...
> > Thanks for this intermediate update, looks much better.
> > So, there are a few comments below and we are almost ready.
>
> Thanks, I would also like feedback on the usage of channel's
> ext_info to handle calibration instead of using raw attributes as
> suggested by Matt
Better to wait for Jonathan.
...
> > > + depends on SYSFS
>
> Do you think I need this ? The driver includes iio/sysfs.h but I found
> no symbol nor dependency for that
Ditto.
...
> > Also, since it's one time use, please drop the definition completely and use
> > literal in-place.
> I got two usages
> ...
> iio_dev->name = DRIVER_NAME;
>
> ...
> .driver = {
> .name = DRIVER_NAME,
>
> Is it ok to keep it ?
Ah, okay then!
...
> > > + errors = (const unsigned long *)&value;
> >
> > Yes, it takes a pointer, but in your case it will oops the kernel quite likely.
>
> The usage of a pointer kind of puzzled me in first place, and I found
> no pattern to copy in the existing code base. I have probbaly not
> looked hard enough ?
>
> > unsigned long errors;
> >
> > ...
> >
> > errors = value;
> > for_each_set_bit(..., &errors, ...)
>
> I can do so but, for my education mostly, why do you think it would
> oops ? '*errors' is a pointer to a variable allocated on the stack as
> much as 'errors' you suggested is a local stack variable. I might be a
> bit slow today, but I'm missing the difference. FWIW I tested the
> function, even if there were no error bits set at the moment I tested, but
> the for_each_set_bit() macro was indeed run.
Because you theoretically access bytes behind 16-bit. That castings just ugly
and compiler should warn you about if it is clever enough.
If you found it in the existing code, please, fix it there, so quite bad
pattern won't spread.
> > > + for_each_set_bit(i, errors, ARRAY_SIZE(error_codes))
> > > + len += sysfs_emit_at(buf, len, "%s ", sunrise_error_statuses[i]);
...
> > > +static struct regmap_config sunrise_regmap_config = {
> > > + .reg_bits = 8,
> > > + .val_bits = 8,
> >
> > Does it need a lock?
> > (I think it does, but I would like to confirm)
>
> You know, I had the same doubt, but the description of a few fields of
> struct regmap_config lead me to think there's a locking mechanism
> already inplace
Exactly! But see below.
> * @disable_locking: This regmap is either protected by external means or
> * is guaranteed not to be accessed from multiple threads.
> * Don't use any locking mechanisms.
> * @lock: Optional lock callback (overrides regmap's default lock
> * function, based on spinlock or mutex).
>
> As you can see 'lock' is option and is said to override regmap's default
> lock functions. Locking seems to have be disabled explicitely
> through 'disable_locking' too. I was then expecting a reference to a
> locally declared mutex/spinlock to be passed through regmap_config
> if the regmap's locking mechanism requires driver-allocated locking
> primitives. This suggests to me there's an internal locking.
>
> In facts, regmap's core seems to have an internal mutex and a built-in
> locking mechanism, as shown by __regmap_init(), which selects the
> opportune locking primitive according to how regmap_config is
> initialized. In our case it seems it relies on the usage of the
> regmap_lock_mutex() and regmap_unlock_mutex() functions, which use
> struct regmap.mutex.
>
> I think we're then safe locking-wise, do you agree ?
My point is do you need regmap locking mechanism to be used or not?
> That said, as I'm not pushing to have the driver accepted for this
> merge window, for which we might be late already, I would wait for
> comments on the usage of the ext_channel abstraction from IIO people
> before submitting a new version if that's fine with everyone.
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2021-08-23 9:40 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-22 18:49 [PATCH v3 0/3] iio: chemical: Add Senseair Sunrise CO2 sensor Jacopo Mondi
2021-08-22 18:49 ` [PATCH v3 1/3] dt-bindings: iio: chemical: Document senseair,sunrise " Jacopo Mondi
2021-08-24 12:28 ` Rob Herring
2021-08-22 18:49 ` [PATCH v3 2/3] iio: chemical: Add Sensteair Sunrise 006-0-007 driver Jacopo Mondi
2021-08-22 20:09 ` Andy Shevchenko
2021-08-23 7:36 ` [PATCH v3.1 2/3] iio: chemical: Add Senseair " Jacopo Mondi
2021-08-23 8:35 ` Andy Shevchenko
2021-08-23 9:06 ` Jacopo Mondi
2021-08-23 9:40 ` Andy Shevchenko [this message]
2021-08-23 10:19 ` Jacopo Mondi
2021-08-23 11:09 ` Andy Shevchenko
2021-08-29 16:21 ` Jonathan Cameron
2021-08-29 17:39 ` Andy Shevchenko
2021-08-29 16:54 ` Jonathan Cameron
2021-08-30 16:20 ` Jacopo Mondi
2021-08-30 16:27 ` Jacopo Mondi
2021-08-30 17:11 ` Jonathan Cameron
2021-08-31 7:40 ` Jacopo Mondi
2021-09-05 10:04 ` Jonathan Cameron
2021-09-05 23:03 ` Peter Rosin
2021-09-06 6:56 ` Peter Rosin
2021-09-08 11:00 ` Jacopo Mondi
2021-09-08 15:29 ` Peter Rosin
2021-09-08 15:58 ` Andy Shevchenko
2021-09-08 16:08 ` Jacopo Mondi
2021-08-22 18:49 ` [PATCH v3 3/3] iio: ABI: docs: Document Senseair Sunrise ABI Jacopo Mondi
2021-08-29 16:57 ` Jonathan Cameron
2021-08-30 16:24 ` Jacopo Mondi
2021-08-30 17:12 ` Jonathan Cameron
2021-08-22 20:11 ` [PATCH v3 0/3] iio: chemical: Add Senseair Sunrise CO2 sensor Andy Shevchenko
2021-08-23 7:16 ` Jacopo Mondi
2021-08-23 7:39 ` Andy Shevchenko
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=YSNs8Oo+1oMZ5TJS@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=jacopo@jmondi.org \
--cc=jic23@kernel.org \
--cc=lars@metafoo.de \
--cc=linux-iio@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=matt.ranostay@konsulko.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox