Commit 5087f663 authored by Jason Gunthorpe's avatar Jason Gunthorpe Committed by Joerg Roedel
Browse files

iommu/pages: Remove iommu_alloc_page_node()



Use iommu_alloc_pages_node_sz() instead.

AMD and Intel are both using 4K pages for these structures since those
drivers only work on 4K PAGE_SIZE.

riscv is also spec'd to use SZ_4K.

Reviewed-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
Tested-by: default avatarAlejandro Jimenez <alejandro.j.jimenez@oracle.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
Link: https://lore.kernel.org/r/21-v4-c8663abbb606+3f7-iommu_pages_jgg@nvidia.com


Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
parent 28024569
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@ static bool increase_address_space(struct amd_io_pgtable *pgtable,
	bool ret = true;
	u64 *pte;

	pte = iommu_alloc_page_node(cfg->amd.nid, gfp);
	pte = iommu_alloc_pages_node_sz(cfg->amd.nid, gfp, SZ_4K);
	if (!pte)
		return false;

@@ -206,7 +206,8 @@ static u64 *alloc_pte(struct amd_io_pgtable *pgtable,

		if (!IOMMU_PTE_PRESENT(__pte) ||
		    pte_level == PAGE_MODE_NONE) {
			page = iommu_alloc_page_node(cfg->amd.nid, gfp);
			page = iommu_alloc_pages_node_sz(cfg->amd.nid, gfp,
							 SZ_4K);

			if (!page)
				return NULL;
@@ -535,7 +536,8 @@ static struct io_pgtable *v1_alloc_pgtable(struct io_pgtable_cfg *cfg, void *coo
{
	struct amd_io_pgtable *pgtable = io_pgtable_cfg_to_data(cfg);

	pgtable->root = iommu_alloc_page_node(cfg->amd.nid, GFP_KERNEL);
	pgtable->root =
		iommu_alloc_pages_node_sz(cfg->amd.nid, GFP_KERNEL, SZ_4K);
	if (!pgtable->root)
		return NULL;
	pgtable->mode = PAGE_MODE_3_LEVEL;
+2 −2
Original line number Diff line number Diff line
@@ -152,7 +152,7 @@ static u64 *v2_alloc_pte(int nid, u64 *pgd, unsigned long iova,
		}

		if (!IOMMU_PTE_PRESENT(__pte)) {
			page = iommu_alloc_page_node(nid, gfp);
			page = iommu_alloc_pages_node_sz(nid, gfp, SZ_4K);
			if (!page)
				return NULL;

@@ -346,7 +346,7 @@ static struct io_pgtable *v2_alloc_pgtable(struct io_pgtable_cfg *cfg, void *coo
	struct amd_io_pgtable *pgtable = io_pgtable_cfg_to_data(cfg);
	int ias = IOMMU_IN_ADDR_BIT_SIZE;

	pgtable->pgd = iommu_alloc_page_node(cfg->amd.nid, GFP_KERNEL);
	pgtable->pgd = iommu_alloc_pages_node_sz(cfg->amd.nid, GFP_KERNEL, SZ_4K);
	if (!pgtable->pgd)
		return NULL;

+1 −1
Original line number Diff line number Diff line
@@ -1884,7 +1884,7 @@ static int setup_gcr3_table(struct gcr3_tbl_info *gcr3_info,
		return -ENOSPC;
	gcr3_info->domid = domid;

	gcr3_info->gcr3_tbl = iommu_alloc_page_node(nid, GFP_ATOMIC);
	gcr3_info->gcr3_tbl = iommu_alloc_pages_node_sz(nid, GFP_ATOMIC, SZ_4K);
	if (gcr3_info->gcr3_tbl == NULL) {
		pdom_id_free(domid);
		return -ENOMEM;
+8 −5
Original line number Diff line number Diff line
@@ -397,7 +397,8 @@ struct context_entry *iommu_context_addr(struct intel_iommu *iommu, u8 bus,
		if (!alloc)
			return NULL;

		context = iommu_alloc_page_node(iommu->node, GFP_ATOMIC);
		context = iommu_alloc_pages_node_sz(iommu->node, GFP_ATOMIC,
						    SZ_4K);
		if (!context)
			return NULL;

@@ -731,7 +732,8 @@ static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain,
		if (!dma_pte_present(pte)) {
			uint64_t pteval, tmp;

			tmp_page = iommu_alloc_page_node(domain->nid, gfp);
			tmp_page = iommu_alloc_pages_node_sz(domain->nid, gfp,
							     SZ_4K);

			if (!tmp_page)
				return NULL;
@@ -982,7 +984,7 @@ static int iommu_alloc_root_entry(struct intel_iommu *iommu)
{
	struct root_entry *root;

	root = iommu_alloc_page_node(iommu->node, GFP_ATOMIC);
	root = iommu_alloc_pages_node_sz(iommu->node, GFP_ATOMIC, SZ_4K);
	if (!root) {
		pr_err("Allocating root entry for %s failed\n",
			iommu->name);
@@ -2026,7 +2028,8 @@ static int copy_context_table(struct intel_iommu *iommu,
			if (!old_ce)
				goto out;

			new_ce = iommu_alloc_page_node(iommu->node, GFP_KERNEL);
			new_ce = iommu_alloc_pages_node_sz(iommu->node,
							   GFP_KERNEL, SZ_4K);
			if (!new_ce)
				goto out_unmap;

@@ -3359,7 +3362,7 @@ static struct dmar_domain *paging_domain_alloc(struct device *dev, bool first_st
		domain->domain.geometry.aperture_end = __DOMAIN_MAX_ADDR(domain->gaw);

	/* always allocate the top pgd */
	domain->pgd = iommu_alloc_page_node(domain->nid, GFP_KERNEL);
	domain->pgd = iommu_alloc_pages_node_sz(domain->nid, GFP_KERNEL, SZ_4K);
	if (!domain->pgd) {
		kfree(domain);
		return ERR_PTR(-ENOMEM);
+2 −1
Original line number Diff line number Diff line
@@ -147,7 +147,8 @@ static struct pasid_entry *intel_pasid_get_entry(struct device *dev, u32 pasid)
	if (!entries) {
		u64 tmp;

		entries = iommu_alloc_page_node(info->iommu->node, GFP_ATOMIC);
		entries = iommu_alloc_pages_node_sz(info->iommu->node,
						    GFP_ATOMIC, SZ_4K);
		if (!entries)
			return NULL;

Loading