Re: [PATCH v3 0/5] iio: core,buffer: re-organize chardev creation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2020-04-10 at 17:17 +0300, Alexandru Ardelean wrote:
> The main intent is to be able to add more chardevs per IIO device, one
> for each buffer. To get there, some rework is needed, and one important
> facet is to move the creation of the current chardev into
> 'industrialio-buffer.c', so that control/logic of these chardevs is
> localized in that file.
> 

This needs a new V4 now.
The drop of the devm_ APIs is causing some conflicts for this series.

Will send one tomorrow.

Still, any feedback until then [about this] is appreciated.

Thanks
Alex

> This changeset does that [incrementally] by moving the common chardev
> creation from 'industrialio-core.c' to 'industrialio-buffer.c' &
> 'industrialio-event.c'.
> The common chardev is required for both IIO buffers & IIO events.
> In order to make this work, the 'iio_device_event_ioctl()' needs to be
> passed from 'industrialio-event.c' to 'industrialio-buffer.c' flying past
> 'industrialio-core.c'. This sounds a bit wrong [at first] but it has the
> effect of reducing inter-dependencies between 'industrialio-core.c' to
> 'industrialio-buffer.c' quite a bit.
> The IIO buffer also has a CONFIG_IIO_BUFFER symbol which can turn it
> off. No idea how widely this is used [as disabled], but this changeset
> also takes that into consideration.
> 
> So, now the logic [for __iio_device_register() with regard to chardev
> init] is:
> 1. iio_device_buffers_init() will init buffer and the chardev, if that
>    works, the 'iio_device_event_ioctl()' will be attached to the chardev
> 2. if CONFIG_IIO_BUFFER is not defined or 'indio_dev->buffer == NULL'
>    (no buffter attached), -ENOTSUPP should be returned from
>    iio_device_buffers_init(), in which case the chardev should be
>    initialized in  'industrialio-event.c' via
>    'iio_device_register_event_chrdev()'
> 
> One neat side effect of this logic, is that we can also move the buffer
> sysfs alloc/cleanup into 'industrialio-buffer.c' under the new
> 'iio_device_buffers_{un}init()' functions.
> 
> Changelog v2 -> v3:
> * removed double init in
>   'iio: event: move event-only chardev in industrialio-event.c'
> 
> Changelog v1 -> v2:
> * re-reviewed some exit-paths and cleanup some potential leaks on those
>   exit paths:
>   - for 'iio: buffer: move iio buffer chrdev in industrialio-buffer.c'
>     add iio_device_buffers_put() helper and calling iio_buffers_uninit()
>     on device un-regsiter
>   - for 'move sysfs alloc/free in industrialio-buffer.c'
>     call 'iio_buffer_free_sysfs_and_mask()' on exit path if
>     cdev_device_add() fails
>   - for 'move event-only chardev in industrialio-event.c'
>     check if event_interface is NULL in
>     iio_device_unregister_event_chrdev()
> 
> Alexandru Ardelean (5):
>   iio: core: register buffer fileops only if buffer present
>   iio: buffer: add back-ref from iio_buffer to iio_dev
>   iio: buffer: move iio buffer chrdev in industrialio-buffer.c
>   iio: buffer: move sysfs alloc/free in industrialio-buffer.c
>   iio: event: move event-only chardev in industrialio-event.c
> 
>  drivers/iio/iio_core.h            |  30 +++----
>  drivers/iio/industrialio-buffer.c | 144 ++++++++++++++++++++++++++----
>  drivers/iio/industrialio-core.c   | 107 +++-------------------
>  drivers/iio/industrialio-event.c  | 122 ++++++++++++++++++++++++-
>  include/linux/iio/buffer_impl.h   |  10 +++
>  include/linux/iio/iio.h           |   4 -
>  6 files changed, 285 insertions(+), 132 deletions(-)
> 




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux