All of lore.kernel.org
 help / color / mirror / Atom feed
From: Baolu Lu <baolu.lu@linux.intel.com>
To: Guanghui Feng <guanghuifeng@linux.alibaba.com>,
	dwmw2@infradead.org, joro@8bytes.org, will@kernel.org,
	robin.murphy@arm.com
Cc: iommu@lists.linux.dev, linux-kernel@vger.kernel.org,
	alikernel-developer@linux.alibaba.com
Subject: Re: [PATCH] iommu/vt-d: fix iommu pasid memory alloc & max pasid err
Date: Mon, 1 Sep 2025 15:28:29 +0800	[thread overview]
Message-ID: <cdd1c8ff-6bb5-4665-a55a-9d86cd81a8ef@linux.intel.com> (raw)
In-Reply-To: <20250830130737.1930726-1-guanghuifeng@linux.alibaba.com>

On 8/30/25 21:07, Guanghui Feng wrote:
> When intel_pasid_alloc_table allocates memory for Scalable Mode PASID
> directories, the specified memory page order is incorrect, and an
> additional PAGE_SHIFT is added. There is also an error in calculating
> the maximum number of supported PASID directories. In the revised
> implementation, 1 << (order + PASID_PDE_SHIFT - 3) represents the memory
> occupied by the Scalable Mode PASID directory, divided by 8 to represent
> the number of PASID directories, and then multiplied by the number of (1
> << PASID_PDE_SHIFT) entries in each PASID directory.

Do you see any specific issues if the changes described in this patch
are lacking?

> 
> Signed-off-by: Guanghui Feng <guanghuifeng@linux.alibaba.com>
> ---
>   drivers/iommu/intel/pasid.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/iommu/intel/pasid.c b/drivers/iommu/intel/pasid.c
> index 52f678975da7..9969913b600b 100644
> --- a/drivers/iommu/intel/pasid.c
> +++ b/drivers/iommu/intel/pasid.c
> @@ -61,14 +61,14 @@ int intel_pasid_alloc_table(struct device *dev)
>   	size = max_pasid >> (PASID_PDE_SHIFT - 3);
>   	order = size ? get_order(size) : 0;
>   	dir = iommu_alloc_pages_node_sz(info->iommu->node, GFP_KERNEL,
> -					1 << (order + PAGE_SHIFT));
> +					1 << order);

This converts the order to the allocation size.

>   	if (!dir) {
>   		kfree(pasid_table);
>   		return -ENOMEM;
>   	}
>   
>   	pasid_table->table = dir;
> -	pasid_table->max_pasid = 1 << (order + PAGE_SHIFT + 3);

With this code, I can get the pasid_table->max_pasid equal to 0x100000
if the device supports PASID, which is what I expect.

> +	pasid_table->max_pasid = 1 << (order + PASID_PDE_SHIFT - 3);
>   	info->pasid_table = pasid_table;
>   
>   	if (!ecap_coherent(info->iommu->ecap))

Thanks,
baolu

  reply	other threads:[~2025-09-01  7:44 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-30 13:07 [PATCH] iommu/vt-d: fix iommu pasid memory alloc & max pasid err Guanghui Feng
2025-09-01  7:28 ` Baolu Lu [this message]
2025-09-02 16:28   ` Jason Gunthorpe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=cdd1c8ff-6bb5-4665-a55a-9d86cd81a8ef@linux.intel.com \
    --to=baolu.lu@linux.intel.com \
    --cc=alikernel-developer@linux.alibaba.com \
    --cc=dwmw2@infradead.org \
    --cc=guanghuifeng@linux.alibaba.com \
    --cc=iommu@lists.linux.dev \
    --cc=joro@8bytes.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.