kfifo: remove support for physically non-contiguous memory
First, there is no such user. The only user of this interface is caam_rng_fill_async() and that uses kfifo_alloc() -> kmalloc(). Second, the implementation does not allow anything else than direct mapping and kmalloc() (due to virt_to_phys()), anyway. Therefore, there is no point in having this dead (and complex) code in the kernel. Note the setup_sgl_buf() function now boils down to simple sg_set_buf(). That is called twice from setup_sgl() to take care of kfifo buffer wrap-around. setup_sgl_buf() will be extended shortly, so keeping it in place. Signed-off-by: Jiri Slaby (SUSE) <jirislaby@kernel.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Stefani Seibold <stefani@seibold.net> Link: https://lore.kernel.org/r/20240405060826.2521-5-jirislaby@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
4edd7e96a1
commit
e9d9576de0
38
lib/kfifo.c
38
lib/kfifo.c
@ -305,43 +305,15 @@ int __kfifo_to_user(struct __kfifo *fifo, void __user *to,
|
||||
}
|
||||
EXPORT_SYMBOL(__kfifo_to_user);
|
||||
|
||||
static int setup_sgl_buf(struct scatterlist *sgl, void *buf,
|
||||
int nents, unsigned int len)
|
||||
static unsigned int setup_sgl_buf(struct scatterlist *sgl, void *buf,
|
||||
int nents, unsigned int len)
|
||||
{
|
||||
int n;
|
||||
unsigned int l;
|
||||
unsigned int off;
|
||||
struct page *page;
|
||||
|
||||
if (!nents)
|
||||
if (!nents || !len)
|
||||
return 0;
|
||||
|
||||
if (!len)
|
||||
return 0;
|
||||
sg_set_buf(sgl, buf, len);
|
||||
|
||||
n = 0;
|
||||
page = virt_to_page(buf);
|
||||
off = offset_in_page(buf);
|
||||
l = 0;
|
||||
|
||||
while (len >= l + PAGE_SIZE - off) {
|
||||
struct page *npage;
|
||||
|
||||
l += PAGE_SIZE;
|
||||
buf += PAGE_SIZE;
|
||||
npage = virt_to_page(buf);
|
||||
if (page_to_phys(page) != page_to_phys(npage) - l) {
|
||||
sg_set_page(sgl, page, l - off, off);
|
||||
sgl = sg_next(sgl);
|
||||
if (++n == nents || sgl == NULL)
|
||||
return n;
|
||||
page = npage;
|
||||
len -= l - off;
|
||||
l = off = 0;
|
||||
}
|
||||
}
|
||||
sg_set_page(sgl, page, len, off);
|
||||
return n + 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static unsigned int setup_sgl(struct __kfifo *fifo, struct scatterlist *sgl,
|
||||
|
Loading…
x
Reference in New Issue
Block a user