A part of the logic in the iio_dma_buffer_exit() is required for the change
to add mmap support to IIO buffers.
This change splits the logic into a separate function, which will be
re-used later.

Signed-off-by: Alexandru Ardelean <alexandru.ardel...@analog.com>
---
 drivers/iio/buffer/industrialio-buffer-dma.c | 45 +++++++++++---------
 1 file changed, 25 insertions(+), 20 deletions(-)

diff --git a/drivers/iio/buffer/industrialio-buffer-dma.c 
b/drivers/iio/buffer/industrialio-buffer-dma.c
index d348af8b9705..858af7eea53e 100644
--- a/drivers/iio/buffer/industrialio-buffer-dma.c
+++ b/drivers/iio/buffer/industrialio-buffer-dma.c
@@ -356,6 +356,30 @@ int iio_dma_buffer_request_update(struct iio_buffer 
*buffer)
 }
 EXPORT_SYMBOL_GPL(iio_dma_buffer_request_update);
 
+static void iio_dma_buffer_fileio_free(struct iio_dma_buffer_queue *queue)
+{
+       unsigned int i;
+
+       spin_lock_irq(&queue->list_lock);
+       for (i = 0; i < ARRAY_SIZE(queue->fileio.blocks); i++) {
+               if (!queue->fileio.blocks[i])
+                       continue;
+               queue->fileio.blocks[i]->state = IIO_BLOCK_STATE_DEAD;
+       }
+       INIT_LIST_HEAD(&queue->outgoing);
+       spin_unlock_irq(&queue->list_lock);
+
+       INIT_LIST_HEAD(&queue->incoming);
+
+       for (i = 0; i < ARRAY_SIZE(queue->fileio.blocks); i++) {
+               if (!queue->fileio.blocks[i])
+                       continue;
+               iio_buffer_block_put(queue->fileio.blocks[i]);
+               queue->fileio.blocks[i] = NULL;
+       }
+       queue->fileio.active_block = NULL;
+}
+
 static void iio_dma_buffer_submit_block(struct iio_dma_buffer_queue *queue,
        struct iio_dma_buffer_block *block)
 {
@@ -635,28 +659,9 @@ EXPORT_SYMBOL_GPL(iio_dma_buffer_init);
  */
 void iio_dma_buffer_exit(struct iio_dma_buffer_queue *queue)
 {
-       unsigned int i;
-
        mutex_lock(&queue->lock);
 
-       spin_lock_irq(&queue->list_lock);
-       for (i = 0; i < ARRAY_SIZE(queue->fileio.blocks); i++) {
-               if (!queue->fileio.blocks[i])
-                       continue;
-               queue->fileio.blocks[i]->state = IIO_BLOCK_STATE_DEAD;
-       }
-       INIT_LIST_HEAD(&queue->outgoing);
-       spin_unlock_irq(&queue->list_lock);
-
-       INIT_LIST_HEAD(&queue->incoming);
-
-       for (i = 0; i < ARRAY_SIZE(queue->fileio.blocks); i++) {
-               if (!queue->fileio.blocks[i])
-                       continue;
-               iio_buffer_block_put(queue->fileio.blocks[i]);
-               queue->fileio.blocks[i] = NULL;
-       }
-       queue->fileio.active_block = NULL;
+       iio_dma_buffer_fileio_free(queue);
        queue->ops = NULL;
 
        mutex_unlock(&queue->lock);
-- 
2.17.1

Reply via email to