Re: [PATCH RFC 6/6] iio: core: mark scan_timestamp as __private
From: Vasileios Amoiridis
Date: Tue Dec 03 2024 - 17:15:11 EST
On Sat, Nov 30, 2024 at 02:19:54PM +0000, Jonathan Cameron wrote:
> On Sat, 30 Nov 2024 01:27:10 +0100
> Vasileios Amoiridis <vassilisamir@xxxxxxxxx> wrote:
>
> > Since there are no more direct accesses to the indio_dev->scan_timestamp
> > value, it can be marked as __private and use the macro ACCESS_PRIVATE()
> > in order to access it. Like this, static checkers will be able to inform
> > in case someone tries to either write to the value, or read its value
> > directly.
> >
> > Signed-off-by: Vasileios Amoiridis <vassilisamir@xxxxxxxxx>
> > ---
> > drivers/iio/industrialio-buffer.c | 2 +-
> > include/linux/iio/iio.h | 4 ++--
> > 2 files changed, 3 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/iio/industrialio-buffer.c b/drivers/iio/industrialio-buffer.c
> > index 8104696cd475..c332741f3cf4 100644
> > --- a/drivers/iio/industrialio-buffer.c
> > +++ b/drivers/iio/industrialio-buffer.c
> > @@ -1137,7 +1137,7 @@ static int iio_enable_buffers(struct iio_dev *indio_dev,
> > int ret;
> >
> > indio_dev->active_scan_mask = config->scan_mask;
> > - indio_dev->scan_timestamp = config->scan_timestamp;
> > + ACCESS_PRIVATE(indio_dev, scan_timestamp) = config->scan_timestamp;
> > indio_dev->scan_bytes = config->scan_bytes;
> > iio_dev_opaque->currentmode = config->mode;
> >
> > diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
> > index 5661794d1127..669b4ef1280d 100644
> > --- a/include/linux/iio/iio.h
> > +++ b/include/linux/iio/iio.h
> > @@ -611,7 +611,7 @@ struct iio_dev {
> > const unsigned long *available_scan_masks;
> > unsigned int __private masklength;
> > const unsigned long *active_scan_mask;
> > - bool scan_timestamp;
> > + bool __private scan_timestamp;
> > struct iio_trigger *trig;
> > struct iio_poll_func *pollfunc;
> > struct iio_poll_func *pollfunc_event;
> > @@ -908,7 +908,7 @@ int iio_active_scan_mask_index(struct iio_dev *indio_dev);
> > */
> > static inline bool iio_is_soft_ts_enabled(const struct iio_dev *indio_dev)
> > {
> > - return indio_dev->scan_timestamp;
> > + return ACCESS_PRIVATE(indio_dev, scan_timestamp);
> If we only end up with one use of this (based on feedback on other drivers)
> I'd tempted to deliberately not provide this convenience function and instead
> just use ACCESS_PRIVATE() directly in iio_push_to_buffers_with_timestamp()
>
> Nice work. Particularly by highlighting some 'odd corners' in drivers that
> probably make no real sense to keep ;)
>
> Jonathan
>
>
> > }
> >
> > ssize_t iio_format_value(char *buf, unsigned int type, int size, int *vals);
>
Hi Jonathan,
Indeed, if it is only one case that this is being used, it wouldn't make
sense to provide an accessor. I wouldn't think of going directly to
touch the drivers without sending this RFC first, so it's good that you
like the solution of optimizing the drivers themselves. I might find
some time before the weekend to spin a v2 to discuss. Thanks for your
time, your comments are always of great help!
Cheers,
Vasilis