]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
xen/swiotlb: fix allocated size
authorJuergen Gross <jgross@suse.com>
Sun, 15 Sep 2024 11:06:44 +0000 (13:06 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 4 Oct 2024 14:32:49 +0000 (16:32 +0200)
[ Upstream commit c3dea3d54f4d399f8044547f0f1abdccbdfb0fee ]

The allocated size in xen_swiotlb_alloc_coherent() and
xen_swiotlb_free_coherent() is calculated wrong for the case of
XEN_PAGE_SIZE not matching PAGE_SIZE. Fix that.

Fixes: 7250f422da04 ("xen-swiotlb: use actually allocated size on check physical continuous")
Reported-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
Signed-off-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/xen/swiotlb-xen.c

index 7a6f1f007527c075fbcd86ab0462126e94d7c839..5e83d1e0bd184c1d6f4ad1d15eb92aa8f1f76e2b 100644 (file)
@@ -146,7 +146,7 @@ xen_swiotlb_alloc_coherent(struct device *dev, size_t size,
        void *ret;
 
        /* Align the allocation to the Xen page size */
-       size = 1UL << (order + XEN_PAGE_SHIFT);
+       size = ALIGN(size, XEN_PAGE_SIZE);
 
        ret = (void *)__get_free_pages(flags, get_order(size));
        if (!ret)
@@ -178,7 +178,7 @@ xen_swiotlb_free_coherent(struct device *dev, size_t size, void *vaddr,
        int order = get_order(size);
 
        /* Convert the size to actually allocated. */
-       size = 1UL << (order + XEN_PAGE_SHIFT);
+       size = ALIGN(size, XEN_PAGE_SIZE);
 
        if (WARN_ON_ONCE(dma_handle + size - 1 > dev->coherent_dma_mask) ||
            WARN_ON_ONCE(range_straddles_page_boundary(phys, size)))