All of lore.kernel.org
 help / color / mirror / Atom feed
From: "guanghuifeng@linux.alibaba.com" <guanghuifeng@linux.alibaba.com>
To: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>,
	linux-kernel@vger.kernel.org, iommu@lists.linux.dev,
	joro@8bytes.org, jgg@nvidia.com
Cc: yi.l.liu@intel.com, kevin.tian@intel.com, nicolinc@nvidia.com,
	vasant.hegde@amd.com, jon.grimm@amd.com, santosh.shukla@amd.com,
	Sairaj.K@amd.com, jay.chen@amd.com, wvw@google.com,
	wnliu@google.com, dantuluris@google.com, chriscli@google.com,
	kpsingh@google.com, alejandro.j.jimenez@oracle.com,
	joao.m.martins@oracle.com
Subject: Re: [PATCH 15/24] iommu/amd: Add helper functions to manage DevID / DomID mapping tables
Date: Wed, 19 Aug 2026 21:30:15 +0800	[thread overview]
Message-ID: <fb4f14d0-3c80-4a77-880a-e28be558fa4d@linux.alibaba.com> (raw)
In-Reply-To: <20260727132913.22475-16-suravee.suthikulpanit@amd.com>


在 2026/7/27 21:29, Suravee Suthikulpanit 写道:
> Introduce amd_viommu_init_one() and amd_viommu_uninit_one().
> These functions are called during IOMMUFD vIOMMU initialize and destroy.
> Currently, it manages the IPA mapping for Device ID and Domain ID mapping
> tables.
>
> Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@amd.com>
> ---
>   drivers/iommu/amd/amd_iommu_types.h |  3 ++
>   drivers/iommu/amd/amd_viommu.h      | 13 ++++++++
>   drivers/iommu/amd/iommu.c           |  1 +
>   drivers/iommu/amd/iommufd.c         |  5 +++
>   drivers/iommu/amd/viommu.c          | 52 +++++++++++++++++++++++++++++
>   5 files changed, 74 insertions(+)
>
> diff --git a/drivers/iommu/amd/amd_iommu_types.h b/drivers/iommu/amd/amd_iommu_types.h
> index 340929ae776a..03346258e2dc 100644
> --- a/drivers/iommu/amd/amd_iommu_types.h
> +++ b/drivers/iommu/amd/amd_iommu_types.h
> @@ -549,6 +549,9 @@ struct amd_iommu_viommu {
>   	 */
>   	struct xarray gdomid_array;
>   
> +	u64 *devid_table;
> +	u64 *domid_table;
> +
>   	/* Offset for mmap() of guest VF MMIO; set after iommufd_viommu_alloc_mmap(). */
>   	unsigned long vfmmio_mmap_offset;
>   };
> diff --git a/drivers/iommu/amd/amd_viommu.h b/drivers/iommu/amd/amd_viommu.h
> index 447692b9101c..8b57717c22a6 100644
> --- a/drivers/iommu/amd/amd_viommu.h
> +++ b/drivers/iommu/amd/amd_viommu.h
> @@ -14,6 +14,10 @@ void __init amd_viommu_uninit(struct amd_iommu *iommu);
>   
>   u64 amd_viommu_get_vfmmio_addr(struct amd_iommu *iommu, u16 gid);
>   
> +int amd_viommu_init_one(struct amd_iommu *iommu, struct amd_iommu_viommu *viommu);
> +
> +void amd_viommu_uninit_one(struct amd_iommu *iommu, struct amd_iommu_viommu *viommu);
> +
>   #else
>   
>   static inline int amd_viommu_init(struct amd_iommu *iommu)
> @@ -30,6 +34,15 @@ static inline u64 amd_viommu_get_vfmmio_addr(struct amd_iommu *iommu, u16 gid)
>   	return 0;
>   }
>   
> +static inline int amd_viommu_init_one(struct amd_iommu *iommu, struct amd_iommu_viommu *viommu)
> +{
> +	return -EOPNOTSUPP;
> +}
> +
> +static inline void amd_viommu_uninit_one(struct amd_iommu *iommu, struct amd_iommu_viommu *viommu)
> +{
> +}
> +
>   #endif /* CONFIG_AMD_IOMMU_IOMMUFD */
>   
>   #endif /* AMD_VIOMMU_H */
> diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
> index 79698eec21dc..6895629cc8a5 100644
> --- a/drivers/iommu/amd/iommu.c
> +++ b/drivers/iommu/amd/iommu.c
> @@ -43,6 +43,7 @@
>   #include <linux/generic_pt/iommu.h>
>   
>   #include "amd_iommu.h"
> +#include "amd_viommu.h"
>   #include "iommufd.h"
>   #include "../irq_remapping.h"
>   #include "../iommu-pages.h"
> diff --git a/drivers/iommu/amd/iommufd.c b/drivers/iommu/amd/iommufd.c
> index 81e0244348a2..bfc4b0ec22a9 100644
> --- a/drivers/iommu/amd/iommufd.c
> +++ b/drivers/iommu/amd/iommufd.c
> @@ -83,6 +83,10 @@ int amd_iommufd_viommu_init(struct iommufd_viommu *viommu, struct iommu_domain *
>   	/* Reset vIOMMU MMIOs to initialize the vIOMMU */
>   	iommu_reset_vmmio(iommu, aviommu->gid);
>   
> +	ret = amd_viommu_init_one(iommu, aviommu);
> +	if (ret)
> +		goto err_init;
> +
>   	ret = iommu_copy_struct_to_user(user_data, &data,
>   					IOMMU_VIOMMU_TYPE_AMD,
>   					out_vfmmio_mmap_offset);
> @@ -118,6 +122,7 @@ static void amd_iommufd_viommu_destroy(struct iommufd_viommu *viommu)
>   	spin_unlock_irqrestore(&pdom->lock, flags);
>   	xa_destroy(&aviommu->gdomid_array);
>   	iommufd_viommu_destroy_mmap(&aviommu->core, aviommu->vfmmio_mmap_offset);
> +	amd_viommu_uninit_one(iommu, aviommu);
>   	amd_iommu_gid_free(iommu, aviommu->gid);
>   }
>   
> diff --git a/drivers/iommu/amd/viommu.c b/drivers/iommu/amd/viommu.c
> index 2c1a267826dc..91d0dd3ac912 100644
> --- a/drivers/iommu/amd/viommu.c
> +++ b/drivers/iommu/amd/viommu.c
> @@ -26,6 +26,20 @@
>   #include "amd_viommu.h"
>   #include "../iommu-pages.h"
>   
> +/*
> + * Guest Device ID Mapping Table
> + */
> +#define VIOMMU_MAX_GDEVID	0xFFFF
> +#define VIOMMU_DEVID_MAPPING_BASE	0x1000000000ULL
> +#define VIOMMU_DEVID_MAPPING_ENTRY_SIZE	(1 << 20)
> +
> +/*
> + * Guest Domain ID Mapping Table
> + */
> +#define VIOMMU_MAX_GDOMID	0xFFFF
> +#define VIOMMU_DOMID_MAPPING_BASE	0x2000000000ULL
> +#define VIOMMU_DOMID_MAPPING_ENTRY_SIZE	(1 << 19)
> +
>   LIST_HEAD(viommu_devid_map);
>   
>   static int viommu_init_pci_vsc(struct amd_iommu *iommu)
> @@ -405,3 +419,41 @@ static void __maybe_unused free_private_vm_region(struct amd_iommu *iommu, u64 *
>   
>   	*entry = NULL;
>   }
> +
> +void amd_viommu_uninit_one(struct amd_iommu *iommu, struct amd_iommu_viommu *aviommu)
> +{
> +	pr_debug("%s: gid=%u\n", __func__, aviommu->gid);
> +
> +	free_private_vm_region(iommu, &aviommu->devid_table,
> +			       VIOMMU_DEVID_MAPPING_BASE,
> +			       VIOMMU_DEVID_MAPPING_ENTRY_SIZE,
> +			       aviommu->gid);
> +	free_private_vm_region(iommu, &aviommu->domid_table,
> +			       VIOMMU_DOMID_MAPPING_BASE,
> +			       VIOMMU_DOMID_MAPPING_ENTRY_SIZE,
> +			       aviommu->gid);
> +}
> +
> +int amd_viommu_init_one(struct amd_iommu *iommu, struct amd_iommu_viommu *viommu)
> +{
> +	int ret;
> +
> +	ret = alloc_private_vm_region(iommu, &viommu->devid_table,
> +				      VIOMMU_DEVID_MAPPING_BASE,
> +				      VIOMMU_DEVID_MAPPING_ENTRY_SIZE,
> +				      viommu->gid);
> +	if (ret)
> +		goto err_out;
> +
> +	ret = alloc_private_vm_region(iommu, &viommu->domid_table,
> +				      VIOMMU_DOMID_MAPPING_BASE,
> +				      VIOMMU_DOMID_MAPPING_ENTRY_SIZE,
> +				      viommu->gid);
> +	if (ret)
> +		goto err_out;
> +
> +	return 0;
> +err_out:
> +	amd_viommu_uninit_one(iommu, viommu);
> +	return -ENOMEM;
> +}

The err_out label overwrites the real error with -ENOMEM.
alloc_private_vm_region() (via viommu_priv_alloc_map()) can also
return -EINVAL when the pdom is not set up, and that information
gets lost on the way to iommufd. Please just "return ret;" here.


  reply	other threads:[~2026-08-19 13:30 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-27 13:28 [PATCH v4 00/24] iommu/amd: Introduce AMD Hardware-accelerated Virtualized IOMMU (vIOMMU) Support Suravee Suthikulpanit
2026-07-27 13:28 ` [PATCH 01/24] iommu/amd: Make amd_iommu_completion_wait() non-static Suravee Suthikulpanit
2026-08-05 17:01   ` Vasant Hegde
2026-07-27 13:28 ` [PATCH 02/24] iommu/amd: Introduce vIOMMU-specific events and event Suravee Suthikulpanit
2026-08-10  7:12   ` Vasant Hegde
2026-08-19  8:17   ` guanghuifeng
2026-07-27 13:28 ` [PATCH 03/24] iommu/amd: Detect and initialize AMD vIOMMU feature Suravee Suthikulpanit
2026-08-10  8:13   ` Vasant Hegde
2026-07-27 13:28 ` [PATCH 04/24] iommu/amd: Introduce IOMMUFD vIOMMU support for AMD Suravee Suthikulpanit
2026-07-27 13:28 ` [PATCH 05/24] iommu/amd: Allocate Guest IDs for IOMMUFD vIOMMU instances Suravee Suthikulpanit
2026-08-10  9:21   ` Vasant Hegde
2026-07-27 13:28 ` [PATCH 06/24] iommu/amd: Map vIOMMU VF and VF Control MMIO BARs Suravee Suthikulpanit
2026-08-10 10:00   ` Vasant Hegde
2026-08-19 13:18   ` guanghuifeng
2026-07-27 13:28 ` [PATCH 07/24] iommu/amd: Add support for AMD vIOMMU VF MMIO region Suravee Suthikulpanit
2026-08-10 10:49   ` Vasant Hegde
2026-07-27 13:28 ` [PATCH 08/24] iommu/amd: Introduce Reset vMMIO Command Suravee Suthikulpanit
2026-08-19  8:34   ` guanghuifeng
2026-07-27 13:28 ` [PATCH 09/24] iommu/amd: Introduce and map vIOMMU private IPA region Suravee Suthikulpanit
2026-07-27 13:28 ` [PATCH 10/24] iommu/amd: Pass iommu to device_flush_dte() Suravee Suthikulpanit
2026-08-10 11:07   ` Vasant Hegde
2026-07-27 13:29 ` [PATCH 11/24] iommu/amd: Export amd_iommu_alloc_dev_data() helper Suravee Suthikulpanit
2026-07-27 13:29 ` [PATCH 12/24] iommu/amd: Pass iommu and devid to amd_iommu_make_clear_dte() Suravee Suthikulpanit
2026-07-27 13:29 ` [PATCH 13/24] iommu/amd: Assign IOMMU Private Address domain to IOMMU Suravee Suthikulpanit
2026-07-27 13:29 ` [PATCH 14/24] iommu/amd: Add per-VM private IPA alloc/map helpers Suravee Suthikulpanit
2026-07-27 13:29 ` [PATCH 15/24] iommu/amd: Add helper functions to manage DevID / DomID mapping tables Suravee Suthikulpanit
2026-08-19 13:30   ` guanghuifeng [this message]
2026-07-27 13:29 ` [PATCH 16/24] iommu/amd: Introduce IOMMUFD vDevice support for AMD Suravee Suthikulpanit
2026-08-19 13:34   ` guanghuifeng
2026-07-27 13:29 ` [PATCH 17/24] iommu/amd: Introduce helper function for updating domain ID mapping table Suravee Suthikulpanit
2026-08-19 10:45   ` guanghuifeng
2026-07-27 13:29 ` [PATCH 18/24] iommu/amd: Introduce helper function for updating device " Suravee Suthikulpanit
2026-08-10 15:17   ` Vasant Hegde
2026-08-19 10:26   ` guanghuifeng
2026-07-27 13:29 ` [PATCH 19/24] iommu/amd: Add per-segment translate device ID pool Suravee Suthikulpanit
2026-07-27 13:29 ` [PATCH 20/24] iommu/amd: Reserve translate-device-id for PCI requestor aliases Suravee Suthikulpanit
2026-07-27 13:29 ` [PATCH 21/24] iommu/amd: Add translation DTE and VFctrl TransDevID helpers Suravee Suthikulpanit
2026-07-27 13:29 ` [PATCH 22/24] iommu/amd: Add translate-device-id alloc/free with vIOMMU owner Suravee Suthikulpanit
2026-07-27 13:29 ` [PATCH 23/24] iommu/amd: Assign per-vIOMMU translate device ID Suravee Suthikulpanit
2026-08-19 10:18   ` guanghuifeng
2026-07-27 13:29 ` [PATCH 24/24] iommu/amd: Relocate vIOMMU translate-device-id on PCI reserve Suravee Suthikulpanit
2026-08-19  9:42   ` guanghuifeng
2026-08-11  7:18 ` [PATCH v4 00/24] iommu/amd: Introduce AMD Hardware-accelerated Virtualized IOMMU (vIOMMU) Support Tian, Kevin

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=fb4f14d0-3c80-4a77-880a-e28be558fa4d@linux.alibaba.com \
    --to=guanghuifeng@linux.alibaba.com \
    --cc=Sairaj.K@amd.com \
    --cc=alejandro.j.jimenez@oracle.com \
    --cc=chriscli@google.com \
    --cc=dantuluris@google.com \
    --cc=iommu@lists.linux.dev \
    --cc=jay.chen@amd.com \
    --cc=jgg@nvidia.com \
    --cc=joao.m.martins@oracle.com \
    --cc=jon.grimm@amd.com \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=kpsingh@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nicolinc@nvidia.com \
    --cc=santosh.shukla@amd.com \
    --cc=suravee.suthikulpanit@amd.com \
    --cc=vasant.hegde@amd.com \
    --cc=wnliu@google.com \
    --cc=wvw@google.com \
    --cc=yi.l.liu@intel.com \
    /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.