kfifo: pass offset to setup_sgl_buf() instead of a pointer
authorJiri Slaby (SUSE) <jirislaby@kernel.org>
Fri, 5 Apr 2024 06:08:17 +0000 (08:08 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 9 Apr 2024 13:28:03 +0000 (15:28 +0200)
As a preparatory for dma addresses filling, we need the data offset
instead of virtual pointer in setup_sgl_buf(). So pass the former
instead the latter.

And pointer to fifo is needed in setup_sgl_buf() now too.

Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org>
Cc: Stefani Seibold <stefani@seibold.net>
Cc: Andrew Morton <akpm@linux-foundation.org>
Link: https://lore.kernel.org/r/20240405060826.2521-7-jirislaby@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
lib/kfifo.c

index 61e35550aea5ffc290922ca18ce6d3dbe56cbdf2..3a249ce4f2819984546001d7eae523a0ffd3d3e5 100644 (file)
@@ -305,9 +305,12 @@ int __kfifo_to_user(struct __kfifo *fifo, void __user *to,
 }
 EXPORT_SYMBOL(__kfifo_to_user);
 
-static unsigned int setup_sgl_buf(struct scatterlist *sgl, void *buf,
-                                 int nents, unsigned int len)
+static unsigned int setup_sgl_buf(struct __kfifo *fifo, struct scatterlist *sgl,
+                                 unsigned int data_offset, int nents,
+                                 unsigned int len)
 {
+       const void *buf = fifo->data + data_offset;
+
        if (!nents || !len)
                return 0;
 
@@ -332,8 +335,8 @@ static unsigned int setup_sgl(struct __kfifo *fifo, struct scatterlist *sgl,
        }
        len_to_end = min(len, size - off);
 
-       n = setup_sgl_buf(sgl, fifo->data + off, nents, len_to_end);
-       n += setup_sgl_buf(sgl + n, fifo->data, nents - n, len - len_to_end);
+       n = setup_sgl_buf(fifo, sgl, off, nents, len_to_end);
+       n += setup_sgl_buf(fifo, sgl + n, 0, nents - n, len - len_to_end);
 
        return n;
 }