lkml.org 
[lkml]   [2023]   [Mar]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 09/10] iommu: Fix MAX_ORDER usage in __iommu_dma_alloc_pages()
    Date
    MAX_ORDER is not inclusive: the maximum allocation order buddy allocator
    can deliver is MAX_ORDER-1.

    Fix MAX_ORDER usage in __iommu_dma_alloc_pages().

    Also use GENMASK() instead of hard to read "(2U << order) - 1" magic.

    Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Robin Murphy <robin.murphy@arm.com>
    Cc: Jacob Pan <jacob.jun.pan@linux.intel.com>
    ---
    drivers/iommu/dma-iommu.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
    index 99b2646cb5c7..ac996fd6bd9c 100644
    --- a/drivers/iommu/dma-iommu.c
    +++ b/drivers/iommu/dma-iommu.c
    @@ -736,7 +736,7 @@ static struct page **__iommu_dma_alloc_pages(struct device *dev,
    struct page **pages;
    unsigned int i = 0, nid = dev_to_node(dev);

    - order_mask &= (2U << MAX_ORDER) - 1;
    + order_mask &= GENMASK(MAX_ORDER - 1, 0);
    if (!order_mask)
    return NULL;

    @@ -756,7 +756,7 @@ static struct page **__iommu_dma_alloc_pages(struct device *dev,
    * than a necessity, hence using __GFP_NORETRY until
    * falling back to minimum-order allocations.
    */
    - for (order_mask &= (2U << __fls(count)) - 1;
    + for (order_mask &= GENMASK(__fls(count), 0);
    order_mask; order_mask &= ~order_size) {
    unsigned int order = __fls(order_mask);
    gfp_t alloc_flags = gfp;
    --
    2.39.2
    \
     
     \ /
      Last update: 2023-03-27 01:01    [W:8.260 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site