From: Jason Gunthorpe <jgg@ziepe.ca>
To: Vasant Hegde <vasant.hegde@amd.com>
Cc: iommu@lists.linux.dev, joro@8bytes.org, will@kernel.org,
robin.murphy@arm.com, suravee.suthikulpanit@amd.com,
yi.l.liu@intel.com, baolu.lu@linux.intel.com,
kevin.tian@intel.com
Subject: Re: [PATCH 1/5] iommu: Enhance domain allocation code to take additional flags
Date: Wed, 21 Aug 2024 13:31:47 -0300 [thread overview]
Message-ID: <20240821163147.GZ3468552@ziepe.ca> (raw)
In-Reply-To: <20240821133554.7405-2-vasant.hegde@amd.com>
On Wed, Aug 21, 2024 at 01:35:50PM +0000, Vasant Hegde wrote:
> From: Jason Gunthorpe <jgg@ziepe.ca>
>
> Currently drivers calls iommu_paging_domain_alloc(dev) to get an
> UNAMANAGED domain. This is not sufficient to support PASID with
> UNAMANAGED domain as some HW like AMD requires certain page table type
> to support PASIDs.
>
> Also domain_alloc_paging() passes device as param for domain
> allocation. This is not sufficient for AMD driver to decide the right
> page table.
>
> Hence add iommu_paging_domain_alloc_flags() API which takes flags as
> parameter. Also update default domain allocation path to use this new
> API whenever device is PASID capable. HW driver should implement
> domain_alloc_user() to allocate PASID capable domain.
>
> Finally introduce new flag (IOMMUFD_HWPT_ALLOC_PASID) to
> domain_alloc_users() ops. If both IOMMU and device supports PASID it
> will allocate domain. Otherwise return error.
>
> Signed-off-by: Jason Gunthorpe <jgg@ziepe.ca>
> [Added __iommu_paging_domain_alloc_flags() and description - Vasant]
> Signed-off-by: Vasant Hegde <vasant.hegde@amd.com>
> ---
> @Jason,
> Notice that I have added __iommu_paging_domain_alloc_flags() so that
> it can call iommu_domain_init() with appropriate domain type.
It is okay, but also the type could be fixed in
__iommu_group_alloc_default_domain() using something like:
ret->type |= req_type;
> I think instead of having separate function it may be better to
> enhance __iommu_domain_alloc() such that:
> - Keep below changes from this patch
> - iommu_domain_init()
> - iommu_get_dma_cookie call inside iommu_setup_default_domain()
> - modify __iommu_domain_alloc() to additional param (flags)
> - iommu_paging_domain_alloc_flags() will call __iommu_domain_alloc()
My expectation was to basically remove iommu_domain_alloc() entirely
once Lu's work is merged.
Instead we'd have these direct APIs:
iommu_domain_alloc_paging_flags()
iommu_group_alloc_blocking_domain()
iommu_group_alloc_identity_domain()
And then iommu_group_alloc_default_domain() would just call them in
the right order maybe like this:
if (req_type & __IOMMU_DOMAIN_PAGING)
return iommu_domain_alloc_paging_flags();
if (req_type && req_type != IOMMU_DOMAIN_IDENTITY)
return ERR_PTR(-EOPNOTSUPP);
if (req_type || iommu_def_domain_type == IOMMU_DOMAIN_IDENTITY) {
dom = iommu_group_alloc_identity_domain();
if (req_type || !IS_ERR(dom))
return dom;
/*
* if iommu_def_domain_type == IDENTITY fails then fall through
* to PAGING
*/
}
/* iommu_def_domain_type is PAGING */
dom = iommu_domain_alloc_paging_flags();
if (IS_ERR(dom))
return dom;
pr_warn("Failed to allocate default IOMMU domain of type %u for group %s - Falling back to IOMMU_DOMAIN_DMA",
iommu_def_domain_type, group->name);
return dom;
Which is the only place we need to make a decision based on a type
input.
Hoping Lu's final few patches make it this cycle
> +static void iommu_domain_init(struct iommu_domain *domain, unsigned int type,
> + const struct iommu_ops *ops)
> +{
> + domain->type = type;
> + domain->owner = ops;
> + if (!domain->ops)
> + domain->ops = ops->default_domain_ops;
> +
> + /*
> + * If not already set, assume all sizes by default; the driver
> + * may override this later
> + */
> + if (!domain->pgsize_bitmap)
> + domain->pgsize_bitmap = ops->pgsize_bitmap;
> +}
Pedantically the pgsize_bitmap is only needed for paging domains, but
it is OK like this too.
> @@ -359,11 +359,17 @@ struct iommu_vfio_ioas {
> * enforced on device attachment
> * @IOMMU_HWPT_FAULT_ID_VALID: The fault_id field of hwpt allocation data is
> * valid.
> + * @IOMMUFD_HWPT_ALLOC_PASID: When the domain is used on a device, with no
> + * PASID, the device will support later attaching
> + * a PASID as well. Some HW requires a specific
> + * domain format on the device to allow PASID to
> + * work.
Maybe:
Requests a domain that can be used with PASID. The domain can be
attached to any PASID on the device. Any domain attached to the
non-PASID part of the device must also be flaged, otherwise attaching
a PASID will blocked.
Yi will need to add a check that IOMMUFD_HWPT_ALLOC_PASID was
specified on the RID domain while processing attach on the PASID
domain.
> enum iommufd_hwpt_alloc_flags {
> IOMMU_HWPT_ALLOC_NEST_PARENT = 1 << 0,
> IOMMU_HWPT_ALLOC_DIRTY_TRACKING = 1 << 1,
> IOMMU_HWPT_FAULT_ID_VALID = 1 << 2,
> + IOMMUFD_HWPT_ALLOC_PASID = 1 << 3,
Let's keep the consistent spelling IOMMU_HWPT_ALLOC_PASID
I think the series looks OK. The naming of domain_alloc_user() is now
a little bit weird, it has now turned into
domain_alloc_paging_extended().
Thanks,
Jason
next prev parent reply other threads:[~2024-08-21 16:31 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-21 13:35 [PATCH 0/5] iommu: Domain allocation enhancements Vasant Hegde
2024-08-21 13:35 ` [PATCH 1/5] iommu: Enhance domain allocation code to take additional flags Vasant Hegde
2024-08-21 16:31 ` Jason Gunthorpe [this message]
2024-08-22 1:50 ` Baolu Lu
2024-08-22 12:43 ` Jason Gunthorpe
2024-08-23 2:47 ` Baolu Lu
2024-08-26 8:08 ` Tian, Kevin
2024-08-26 8:34 ` Baolu Lu
2024-08-26 8:59 ` Tian, Kevin
2024-08-26 13:51 ` Jason Gunthorpe
2024-08-26 8:47 ` Vasant Hegde
2024-08-26 13:45 ` Jason Gunthorpe
2024-08-22 11:27 ` Yi Liu
2024-08-22 12:44 ` Jason Gunthorpe
2024-08-23 8:58 ` Yi Liu
2024-08-24 14:47 ` Vasant Hegde
2024-08-28 21:52 ` Jacob Pan
2024-08-29 10:51 ` Vasant Hegde
2024-08-29 12:10 ` Jason Gunthorpe
2024-08-29 12:47 ` Vasant Hegde
2024-08-29 13:11 ` Jason Gunthorpe
2024-09-11 10:54 ` Vasant Hegde
2024-08-29 17:40 ` Jacob Pan
[not found] ` <66d0b2a1.630a0220.1dd301.daceSMTPIN_ADDED_BROKEN@mx.google.com>
2024-08-30 15:00 ` Jason Gunthorpe
2024-08-26 8:36 ` Vasant Hegde
2024-08-26 13:56 ` Jason Gunthorpe
2024-08-29 12:34 ` Vasant Hegde
2024-08-22 1:38 ` Baolu Lu
2024-08-22 12:40 ` Jason Gunthorpe
2024-08-23 2:04 ` Baolu Lu
2024-08-26 6:09 ` Vasant Hegde
2024-08-22 2:10 ` kernel test robot
2024-08-22 3:03 ` kernel test robot
2024-08-22 5:07 ` kernel test robot
2024-08-21 13:35 ` [PATCH 2/5] iommu/amd: Separate page table setup from domain allocation Vasant Hegde
2024-08-21 16:40 ` Jason Gunthorpe
2024-08-21 13:35 ` [PATCH 3/5] iommu/amd: Pass page table type to pdomain_setup_pgtable() Vasant Hegde
2024-08-21 13:35 ` [PATCH 4/5] iommu/amd: Enhance domain_alloc_user() to allocate PASID capable domain Vasant Hegde
2024-08-21 13:35 ` [PATCH 5/5] iommu/amd: Add iommu_ops->domain_alloc_paging support Vasant Hegde
2024-08-21 15:57 ` Jason Gunthorpe
2024-09-11 10:44 ` Vasant Hegde
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=20240821163147.GZ3468552@ziepe.ca \
--to=jgg@ziepe.ca \
--cc=baolu.lu@linux.intel.com \
--cc=iommu@lists.linux.dev \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=robin.murphy@arm.com \
--cc=suravee.suthikulpanit@amd.com \
--cc=vasant.hegde@amd.com \
--cc=will@kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox