From: Paul Cercueil <paul@crapouillou.net> To: "Jonathan Cameron" <jic23@kernel.org>, "Lars-Peter Clausen" <lars@metafoo.de>, "Vinod Koul" <vkoul@kernel.org>, "Michael Hennerich" <Michael.Hennerich@analog.com>, "Nuno Sá" <noname.nuno@gmail.com>, "Sumit Semwal" <sumit.semwal@linaro.org>, "Christian König" <christian.koenig@amd.com> Cc: Paul Cercueil <paul@crapouillou.net>, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, dmaengine@vger.kernel.org, linux-media@vger.kernel.org Subject: [PATCH v3 00/11] iio: new DMABUF based API, v3 Date: Mon, 3 Apr 2023 17:47:49 +0200 [thread overview] Message-ID: <20230403154800.215924-1-paul@crapouillou.net> (raw) Hi Jonathan, Here's the v3 of my patchset that introduces a new interface based on DMABUF objects to complement the fileio API, and adds write() support to the existing fileio API. It changed quite a lot since V2; the IIO subsystem is now just a DMABUF importer, and all the complexity related to handling creation, deletion and export of DMABUFs (including DMA mapping etc.) is gone. This new interface will be used by Libiio. The code is ready[1] and will be merged to the main branch as soon as the kernel bits are accepted upstream. Note that Libiio (and its server counterpart, iiod) use this new interface in two different ways: - by memory-mapping the DMABUFs to access the sample data directly, which is much faster than using the existing fileio API as the sample data does not need to be copied; - by passing the DMABUFs around directly to the USB stack, in a device-to-device zero-copy fashion, using a new DMABUF interface for the USB (FunctionFS to be exact) stack, which is being upstreamed in parallel of this patchset [2]. As for write() support, Nuno (Cc'd) said he will work on upstreaming the DAC counterpart of adc/adi-axi-adc.c in the next few weeks, so there will be a user for the buffer write() support. I hope you are okay with this - otherwise, we can just wait until this work is done, and I still benefit from sending this patchset early to get feedback. Finally, the dmaengine implementation for this new interface requires a new dmaengine API function, since dmaengine_prep_slave_sg() will always transfer the full scatterlist unconditionally, while we want to be able to transfer an arbitrary amount of bytes from/to the DMABUF. Since scatterlists seem to be going away soon, the new API function will take an array of DMA addresses + lengths. I am open to suggestions if anybody (especially Vinod) have a better design in mind. Cheers, -Paul [1]: https://github.com/analogdevicesinc/libiio/pull/928 [2]: https://lore.kernel.org/linux-usb/425c1b8ea20002c6344a574cd094b4c715c67ba6.camel@crapouillou.net/T/#t --- Changelog: * Patches 01-02 are new; * Patches [03/11], [05/11] didn't change; * Patch [04/11]: - Reorganize arguments to iio_dma_buffer_io() - Change 'is_write' argument to 'is_from_user' - Change (__force char *) to (__force __user char *), in iio_dma_buffer_write(), since we only want to drop the "const". * Patch [07/11]: - Get rid of the old IOCTLs. The IIO subsystem does not create or manage DMABUFs anymore, and only attaches/detaches externally created DMABUFs. - Add IIO_BUFFER_DMABUF_CYCLIC to the supported flags. * Patch [09/11]: Update code to provide the functions that will be used as callbacks for the new IOCTLs. * Patch [10/11]: Use the new dmaengine_prep_slave_dma_array(), and adapt the code to work with the new functions introduced in industrialio-buffer-dma.c. * Patch [11/11]: Update the documentation to reflect the new API. --- Alexandru Ardelean (1): iio: buffer-dma: split iio_dma_buffer_fileio_free() function Paul Cercueil (10): dmaengine: Add API function dmaengine_prep_slave_dma_array() dmaengine: dma-axi-dmac: Implement device_prep_slave_dma_array iio: buffer-dma: Get rid of outgoing queue iio: buffer-dma: Enable buffer write support iio: buffer-dmaengine: Support specifying buffer direction iio: buffer-dmaengine: Enable write support iio: core: Add new DMABUF interface infrastructure iio: buffer-dma: Enable support for DMABUFs iio: buffer-dmaengine: Support new DMABUF based userspace API Documentation: iio: Document high-speed DMABUF based API Documentation/iio/dmabuf_api.rst | 59 +++ Documentation/iio/index.rst | 2 + drivers/dma/dma-axi-dmac.c | 41 ++ drivers/iio/adc/adi-axi-adc.c | 3 +- drivers/iio/buffer/industrialio-buffer-dma.c | 331 +++++++++++--- .../buffer/industrialio-buffer-dmaengine.c | 77 +++- drivers/iio/industrialio-buffer.c | 402 ++++++++++++++++++ include/linux/dmaengine.h | 16 + include/linux/iio/buffer-dma.h | 40 +- include/linux/iio/buffer-dmaengine.h | 5 +- include/linux/iio/buffer_impl.h | 22 + include/uapi/linux/iio/buffer.h | 22 + 12 files changed, 939 insertions(+), 81 deletions(-) create mode 100644 Documentation/iio/dmabuf_api.rst -- 2.39.2
WARNING: multiple messages have this Message-ID (diff)
From: Paul Cercueil <paul@crapouillou.net> To: "Jonathan Cameron" <jic23@kernel.org>, "Lars-Peter Clausen" <lars@metafoo.de>, "Vinod Koul" <vkoul@kernel.org>, "Michael Hennerich" <Michael.Hennerich@analog.com>, "Nuno Sá" <noname.nuno@gmail.com>, "Sumit Semwal" <sumit.semwal@linaro.org>, "Christian König" <christian.koenig@amd.com> Cc: linux-kernel@vger.kernel.org, dmaengine@vger.kernel.org, linux-iio@vger.kernel.org, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, Paul Cercueil <paul@crapouillou.net> Subject: [PATCH v3 00/11] iio: new DMABUF based API, v3 Date: Mon, 3 Apr 2023 17:47:49 +0200 [thread overview] Message-ID: <20230403154800.215924-1-paul@crapouillou.net> (raw) Hi Jonathan, Here's the v3 of my patchset that introduces a new interface based on DMABUF objects to complement the fileio API, and adds write() support to the existing fileio API. It changed quite a lot since V2; the IIO subsystem is now just a DMABUF importer, and all the complexity related to handling creation, deletion and export of DMABUFs (including DMA mapping etc.) is gone. This new interface will be used by Libiio. The code is ready[1] and will be merged to the main branch as soon as the kernel bits are accepted upstream. Note that Libiio (and its server counterpart, iiod) use this new interface in two different ways: - by memory-mapping the DMABUFs to access the sample data directly, which is much faster than using the existing fileio API as the sample data does not need to be copied; - by passing the DMABUFs around directly to the USB stack, in a device-to-device zero-copy fashion, using a new DMABUF interface for the USB (FunctionFS to be exact) stack, which is being upstreamed in parallel of this patchset [2]. As for write() support, Nuno (Cc'd) said he will work on upstreaming the DAC counterpart of adc/adi-axi-adc.c in the next few weeks, so there will be a user for the buffer write() support. I hope you are okay with this - otherwise, we can just wait until this work is done, and I still benefit from sending this patchset early to get feedback. Finally, the dmaengine implementation for this new interface requires a new dmaengine API function, since dmaengine_prep_slave_sg() will always transfer the full scatterlist unconditionally, while we want to be able to transfer an arbitrary amount of bytes from/to the DMABUF. Since scatterlists seem to be going away soon, the new API function will take an array of DMA addresses + lengths. I am open to suggestions if anybody (especially Vinod) have a better design in mind. Cheers, -Paul [1]: https://github.com/analogdevicesinc/libiio/pull/928 [2]: https://lore.kernel.org/linux-usb/425c1b8ea20002c6344a574cd094b4c715c67ba6.camel@crapouillou.net/T/#t --- Changelog: * Patches 01-02 are new; * Patches [03/11], [05/11] didn't change; * Patch [04/11]: - Reorganize arguments to iio_dma_buffer_io() - Change 'is_write' argument to 'is_from_user' - Change (__force char *) to (__force __user char *), in iio_dma_buffer_write(), since we only want to drop the "const". * Patch [07/11]: - Get rid of the old IOCTLs. The IIO subsystem does not create or manage DMABUFs anymore, and only attaches/detaches externally created DMABUFs. - Add IIO_BUFFER_DMABUF_CYCLIC to the supported flags. * Patch [09/11]: Update code to provide the functions that will be used as callbacks for the new IOCTLs. * Patch [10/11]: Use the new dmaengine_prep_slave_dma_array(), and adapt the code to work with the new functions introduced in industrialio-buffer-dma.c. * Patch [11/11]: Update the documentation to reflect the new API. --- Alexandru Ardelean (1): iio: buffer-dma: split iio_dma_buffer_fileio_free() function Paul Cercueil (10): dmaengine: Add API function dmaengine_prep_slave_dma_array() dmaengine: dma-axi-dmac: Implement device_prep_slave_dma_array iio: buffer-dma: Get rid of outgoing queue iio: buffer-dma: Enable buffer write support iio: buffer-dmaengine: Support specifying buffer direction iio: buffer-dmaengine: Enable write support iio: core: Add new DMABUF interface infrastructure iio: buffer-dma: Enable support for DMABUFs iio: buffer-dmaengine: Support new DMABUF based userspace API Documentation: iio: Document high-speed DMABUF based API Documentation/iio/dmabuf_api.rst | 59 +++ Documentation/iio/index.rst | 2 + drivers/dma/dma-axi-dmac.c | 41 ++ drivers/iio/adc/adi-axi-adc.c | 3 +- drivers/iio/buffer/industrialio-buffer-dma.c | 331 +++++++++++--- .../buffer/industrialio-buffer-dmaengine.c | 77 +++- drivers/iio/industrialio-buffer.c | 402 ++++++++++++++++++ include/linux/dmaengine.h | 16 + include/linux/iio/buffer-dma.h | 40 +- include/linux/iio/buffer-dmaengine.h | 5 +- include/linux/iio/buffer_impl.h | 22 + include/uapi/linux/iio/buffer.h | 22 + 12 files changed, 939 insertions(+), 81 deletions(-) create mode 100644 Documentation/iio/dmabuf_api.rst -- 2.39.2
next reply other threads:[~2023-04-03 15:48 UTC|newest] Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-04-03 15:47 Paul Cercueil [this message] 2023-04-03 15:47 ` [PATCH v3 00/11] iio: new DMABUF based API, v3 Paul Cercueil 2023-04-03 15:47 ` [PATCH v3 01/11] dmaengine: Add API function dmaengine_prep_slave_dma_array() Paul Cercueil 2023-04-03 15:47 ` Paul Cercueil 2023-04-04 1:59 ` Hillf Danton 2023-04-04 7:42 ` Paul Cercueil 2023-04-04 7:42 ` Paul Cercueil 2023-04-04 8:54 ` Christian König 2023-04-04 8:54 ` Christian König 2023-04-12 17:23 ` Vinod Koul 2023-04-12 17:23 ` Vinod Koul 2023-04-13 7:59 ` Paul Cercueil 2023-04-13 7:59 ` Paul Cercueil 2023-04-03 15:47 ` [PATCH v3 02/11] dmaengine: dma-axi-dmac: Implement device_prep_slave_dma_array Paul Cercueil 2023-04-03 15:47 ` Paul Cercueil 2023-04-03 15:47 ` [PATCH v3 03/11] iio: buffer-dma: Get rid of outgoing queue Paul Cercueil 2023-04-03 15:47 ` Paul Cercueil 2023-04-16 14:24 ` Jonathan Cameron 2023-04-16 14:24 ` Jonathan Cameron 2023-04-18 8:08 ` Paul Cercueil 2023-04-18 8:08 ` Paul Cercueil 2023-05-01 16:25 ` Jonathan Cameron 2023-05-01 16:25 ` Jonathan Cameron 2023-04-03 15:47 ` [PATCH v3 04/11] iio: buffer-dma: Enable buffer write support Paul Cercueil 2023-04-03 15:47 ` Paul Cercueil 2023-04-16 14:30 ` Jonathan Cameron 2023-04-16 14:30 ` Jonathan Cameron 2023-04-03 15:47 ` [PATCH v3 05/11] iio: buffer-dmaengine: Support specifying buffer direction Paul Cercueil 2023-04-03 15:47 ` Paul Cercueil 2023-04-16 14:35 ` Jonathan Cameron 2023-04-16 14:35 ` Jonathan Cameron 2023-04-03 15:47 ` [PATCH v3 06/11] iio: buffer-dmaengine: Enable write support Paul Cercueil 2023-04-03 15:47 ` Paul Cercueil 2023-04-16 14:37 ` Jonathan Cameron 2023-04-16 14:37 ` Jonathan Cameron 2023-04-03 15:47 ` [PATCH v3 07/11] iio: core: Add new DMABUF interface infrastructure Paul Cercueil 2023-04-03 15:47 ` Paul Cercueil 2023-04-04 7:32 ` Nuno Sá 2023-04-04 7:55 ` Paul Cercueil 2023-04-04 8:21 ` Nuno Sá 2023-04-04 13:22 ` Lars-Peter Clausen 2023-04-16 15:04 ` Jonathan Cameron 2023-04-16 15:04 ` Jonathan Cameron 2023-04-03 15:47 ` [PATCH v3 08/11] iio: buffer-dma: split iio_dma_buffer_fileio_free() function Paul Cercueil 2023-04-03 15:47 ` Paul Cercueil 2023-04-03 15:47 ` [PATCH v3 09/11] iio: buffer-dma: Enable support for DMABUFs Paul Cercueil 2023-04-03 15:47 ` Paul Cercueil 2023-04-16 15:10 ` Jonathan Cameron 2023-04-16 15:10 ` Jonathan Cameron 2023-04-03 15:49 ` [PATCH v3 10/11] iio: buffer-dmaengine: Support new DMABUF based userspace API Paul Cercueil 2023-04-03 15:49 ` Paul Cercueil 2023-04-03 15:49 ` [PATCH v3 11/11] Documentation: iio: Document high-speed DMABUF based API Paul Cercueil 2023-04-03 15:49 ` Paul Cercueil 2023-04-03 16:05 ` Jonathan Corbet 2023-04-03 16:05 ` Jonathan Corbet 2023-04-03 18:37 ` Paul Cercueil 2023-04-03 18:37 ` Paul Cercueil 2023-04-16 15:15 ` [PATCH v3 10/11] iio: buffer-dmaengine: Support new DMABUF based userspace API Jonathan Cameron 2023-04-16 15:15 ` Jonathan Cameron 2023-04-04 7:44 ` [PATCH v3 00/11] iio: new DMABUF based API, v3 Nuno Sá
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=20230403154800.215924-1-paul@crapouillou.net \ --to=paul@crapouillou.net \ --cc=Michael.Hennerich@analog.com \ --cc=christian.koenig@amd.com \ --cc=dmaengine@vger.kernel.org \ --cc=dri-devel@lists.freedesktop.org \ --cc=jic23@kernel.org \ --cc=lars@metafoo.de \ --cc=linaro-mm-sig@lists.linaro.org \ --cc=linux-iio@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-media@vger.kernel.org \ --cc=noname.nuno@gmail.com \ --cc=sumit.semwal@linaro.org \ --cc=vkoul@kernel.org \ /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: linkBe 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.