[PATCH v3 15/23] iommu/pages: Move the __GFP_HIGHMEM checks into the common code
Mostafa Saleh
smostafa at google.com
Wed Mar 12 05:45:39 PDT 2025
On Tue, Feb 25, 2025 at 03:39:32PM -0400, Jason Gunthorpe wrote:
> The entire allocator API is built around using the kernel virtual address,
> it is illegal to pass GFP_HIGHMEM in as a GFP flag. Block it in the common
> code. Remove the duplicated checks from drivers.
>
> Reviewed-by: Lu Baolu <baolu.lu at linux.intel.com>
> Signed-off-by: Jason Gunthorpe <jgg at nvidia.com>
Reviewed-by: Mostafa Saleh <smostafa at google.com>
> ---
> drivers/iommu/io-pgtable-arm.c | 2 --
> drivers/iommu/io-pgtable-dart.c | 1 -
> drivers/iommu/iommu-pages.c | 4 ++++
> 3 files changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/iommu/io-pgtable-arm.c b/drivers/iommu/io-pgtable-arm.c
> index 62df2528d020b2..08d0f62abe8a09 100644
> --- a/drivers/iommu/io-pgtable-arm.c
> +++ b/drivers/iommu/io-pgtable-arm.c
> @@ -267,8 +267,6 @@ static void *__arm_lpae_alloc_pages(size_t size, gfp_t gfp,
> dma_addr_t dma;
> void *pages;
>
> - VM_BUG_ON((gfp & __GFP_HIGHMEM));
> -
> if (cfg->alloc)
> pages = cfg->alloc(cookie, size, gfp);
> else
> diff --git a/drivers/iommu/io-pgtable-dart.c b/drivers/iommu/io-pgtable-dart.c
> index 7efcaea0bd5c86..ebf330e67bfa30 100644
> --- a/drivers/iommu/io-pgtable-dart.c
> +++ b/drivers/iommu/io-pgtable-dart.c
> @@ -111,7 +111,6 @@ static void *__dart_alloc_pages(size_t size, gfp_t gfp)
> {
> int order = get_order(size);
>
> - VM_BUG_ON((gfp & __GFP_HIGHMEM));
> return iommu_alloc_pages(gfp, order);
> }
>
> diff --git a/drivers/iommu/iommu-pages.c b/drivers/iommu/iommu-pages.c
> index 3077df642adb1f..a7eed09420a231 100644
> --- a/drivers/iommu/iommu-pages.c
> +++ b/drivers/iommu/iommu-pages.c
> @@ -37,6 +37,10 @@ void *iommu_alloc_pages_node(int nid, gfp_t gfp, unsigned int order)
> const unsigned long pgcnt = 1UL << order;
> struct folio *folio;
>
> + /* This uses page_address() on the memory. */
> + if (WARN_ON(gfp & __GFP_HIGHMEM))
> + return NULL;
> +
> /*
> * __folio_alloc_node() does not handle NUMA_NO_NODE like
> * alloc_pages_node() did.
> --
> 2.43.0
>
More information about the linux-arm-kernel
mailing list