]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
habanalabs: fix bug in checking huge page optimization
authorOded Gabbay <oded.gabbay@gmail.com>
Tue, 28 May 2019 20:03:54 +0000 (23:03 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 25 Jun 2019 03:34:49 +0000 (11:34 +0800)
[ Upstream commit d724170160f800fa8dfd3c0cdebb8b093570b504 ]

This patch fix a bug in the mmu code that checks whether we can use huge
page mappings for host pages.

The code is supposed to enable huge page mappings only if ALL DMA
addresses are aligned to 2MB AND the number of pages in each DMA chunk is
a modulo of the number of pages in 2MB. However, the code ignored the
first requirement for the first DMA chunk.

This patch fix that issue by making sure the requirement of address
alignment is validated against all DMA chunks.

Signed-off-by: Oded Gabbay <oded.gabbay@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/misc/habanalabs/memory.c

index fadaf557603f5cc22679d035e66ddd8c5f45d94c..425442819d3186702fdf2294f11bb88d525016ac 100644 (file)
@@ -675,11 +675,6 @@ static int init_phys_pg_pack_from_userptr(struct hl_ctx *ctx,
 
                total_npages += npages;
 
-               if (first) {
-                       first = false;
-                       dma_addr &= PAGE_MASK_2MB;
-               }
-
                if ((npages % PGS_IN_2MB_PAGE) ||
                                        (dma_addr & (PAGE_SIZE_2MB - 1)))
                        is_huge_page_opt = false;
@@ -704,7 +699,6 @@ static int init_phys_pg_pack_from_userptr(struct hl_ctx *ctx,
        phys_pg_pack->total_size = total_npages * page_size;
 
        j = 0;
-       first = true;
        for_each_sg(userptr->sgt->sgl, sg, userptr->sgt->nents, i) {
                npages = get_sg_info(sg, &dma_addr);