]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
udmabuf: fix vmap missed offset page
authorHuan Yang <link@vivo.com>
Mon, 28 Apr 2025 07:38:30 +0000 (15:38 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 15 Aug 2025 14:38:36 +0000 (16:38 +0200)
[ Upstream commit a26fd92b7223160ad31c3e2971b63178faed9cf5 ]

Before invoke vmap, we need offer a pages pointer array which each page
need to map in vmalloc area.

But currently vmap_udmabuf only set each folio's head page into pages,
missed each offset pages when iter.

This patch set the correctly offset page in each folio into array.

Signed-off-by: Huan Yang <link@vivo.com>
Fixes: 5e72b2b41a21 ("udmabuf: convert udmabuf driver to use folios")
Acked-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
Link: https://lore.kernel.org/r/20250428073831.19942-3-link@vivo.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/dma-buf/udmabuf.c

index 4cc342fb28f49ae241687490ed342af8399fc571..40399c26e6be6283e76ab3d9a8eedca9e4c6f932 100644 (file)
@@ -120,7 +120,8 @@ static int vmap_udmabuf(struct dma_buf *buf, struct iosys_map *map)
                return -ENOMEM;
 
        for (pg = 0; pg < ubuf->pagecount; pg++)
-               pages[pg] = &ubuf->folios[pg]->page;
+               pages[pg] = folio_page(ubuf->folios[pg],
+                                      ubuf->offsets[pg] >> PAGE_SHIFT);
 
        vaddr = vm_map_ram(pages, ubuf->pagecount, -1);
        kvfree(pages);