From: Jason Gunthorpe <jgg@ziepe.ca>
To: "Tian, Kevin" <kevin.tian@intel.com>
Cc: Baolu Lu <baolu.lu@linux.intel.com>,
Vasant Hegde <vasant.hegde@amd.com>,
"iommu@lists.linux.dev" <iommu@lists.linux.dev>,
"joro@8bytes.org" <joro@8bytes.org>,
"will@kernel.org" <will@kernel.org>,
"robin.murphy@arm.com" <robin.murphy@arm.com>,
"suravee.suthikulpanit@amd.com" <suravee.suthikulpanit@amd.com>,
"Liu, Yi L" <yi.l.liu@intel.com>,
"jacob.pan@linux.microsoft.com" <jacob.pan@linux.microsoft.com>
Subject: Re: [PATCH v2 2/8] iommu: Introduce iommu_paging_domain_alloc_flags()
Date: Tue, 15 Oct 2024 09:31:42 -0300 [thread overview]
Message-ID: <20241015123142.GF1825128@ziepe.ca> (raw)
In-Reply-To: <BN9PR11MB527639C51F172B6A3C6996EB8C452@BN9PR11MB5276.namprd11.prod.outlook.com>
On Tue, Oct 15, 2024 at 08:24:44AM +0000, Tian, Kevin wrote:
> > From: Baolu Lu <baolu.lu@linux.intel.com>
> > Sent: Thursday, September 12, 2024 12:05 PM
> >
> > On 9/11/24 6:19 PM, Vasant Hegde wrote:
> > > /**
> > > - * iommu_paging_domain_alloc() - Allocate a paging domain
> > > + * iommu_paging_domain_alloc_flags() - Allocate a paging domain
> > > * @dev: device for which the domain is allocated
> > > + * @flags: Bitmap of iommufd_hwpt_alloc_flags
> > > *
> > > * Allocate a paging domain which will be managed by a kernel driver.
> > Return
> > > * allocated domain if successful, or a ERR pointer for failure.
> > > */
> > > -struct iommu_domain *iommu_paging_domain_alloc(struct device *dev)
> > > +struct iommu_domain *iommu_paging_domain_alloc_flags(struct device
> > *dev,
> > > + unsigned int flags)
> > > {
> > > + const struct iommu_ops *ops;
> > > + struct iommu_domain *domain;
> > > +
> > > if (!dev_has_iommu(dev))
> > > return ERR_PTR(-ENODEV);
> > >
> > > - return __iommu_domain_alloc(dev_iommu_ops(dev), dev,
> > IOMMU_DOMAIN_UNMANAGED);
> > > + ops = dev_iommu_ops(dev);
> > > +
> > > + if (ops->domain_alloc_paging && !flags)
> > > + domain = ops->domain_alloc_paging(dev);
> > > + else if (ops->domain_alloc_user)
> > > + domain = ops->domain_alloc_user(dev, flags, NULL, NULL);
> > > + else if (ops->domain_alloc && !flags)
> > > + domain = ops-
> > >domain_alloc(IOMMU_DOMAIN_UNMANAGED);
> > > + else
> > > + return ERR_PTR(-EOPNOTSUPP);
> >
> > How about
> >
> > if (flags) {
> > if (!ops->domain_alloc_user)
> > return ERR_PTR(-EOPNOTSUPP);
> > domain = ops->domain_alloc_user(dev, flags, NULL, NULL);
> > } else if (ops->domain_alloc_paging) {
> > domain = ops->domain_alloc_paging(dev);
> > } else if (ops->domain_alloc) {
> > domain = ops-
> > >domain_alloc(IOMMU_DOMAIN_UNMANAGED);
> > } else {
> > return ERR_PTR(-EOPNOTSUPP);
> > }
> >
>
> There is slight semantics difference.
>
> Original code picks domain_alloc_user() if !domain_alloc_paging
> and !flags.
>
> but your code will pick domain_alloc().
>
> Based on discussions in this thread domain_alloc_user/ext is the
> preferred one. Then below is the right order?
>
> If (ops->domain_alloc_user) {
> domain = ops->domain_alloc_user(dev, flags, NULL, NULL);
> } else if (flags) {
> return ERR_PTR(-EOPNOTSUPP);
> } else if (ops->domain_alloc_paging) {
> domain = ops->domain_alloc_paging(dev);
> } else if (ops->domain_alloc) {
> domain = ops->domain_alloc(IOMMU_DOMAIN_UNMANAGED);
> } else {
> return ERR_PTR(-EOPNOTSUPP);
> }
This can work too, but I think we need a few more patches still to get
there?
The order above makes sense if drivers implement both
ops->domain_alloc_paging/user, then you'd want to prefer the more
narrow one.
Once drivers don't implement both then it would make sense to switch
to your version
Jason
next prev parent reply other threads:[~2024-10-15 12:31 UTC|newest]
Thread overview: 75+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-11 10:19 [PATCH v2 0/8] iommu: Domain allocation enhancements Vasant Hegde
2024-09-11 10:19 ` [PATCH v2 1/8] iommu: Refactor __iommu_domain_alloc() Vasant Hegde
2024-09-12 1:50 ` Baolu Lu
2024-09-13 4:02 ` Jacob Pan
2024-09-26 10:17 ` Vasant Hegde
2024-09-30 17:55 ` Jacob Pan
2024-10-01 4:31 ` Vasant Hegde
2024-10-02 5:11 ` Jacob Pan
[not found] ` <66fae60d.170a0220.280357.3d11SMTPIN_ADDED_BROKEN@mx.google.com>
2024-10-02 14:19 ` Jason Gunthorpe
2024-10-02 16:16 ` Jacob Pan
2024-10-02 19:09 ` Jason Gunthorpe
2024-10-15 8:12 ` Tian, Kevin
2024-09-11 10:19 ` [PATCH v2 2/8] iommu: Introduce iommu_paging_domain_alloc_flags() Vasant Hegde
2024-09-12 4:04 ` Baolu Lu
2024-09-26 10:43 ` Vasant Hegde
2024-10-15 8:24 ` Tian, Kevin
2024-10-15 12:31 ` Jason Gunthorpe [this message]
2024-10-16 2:44 ` Tian, Kevin
2024-10-02 19:12 ` Jason Gunthorpe
2024-10-09 21:14 ` Jacob Pan
2024-10-16 10:14 ` Vasant Hegde
2024-09-11 10:19 ` [PATCH v2 3/8] iommu: Add new flag to explictly request PASID capable domain Vasant Hegde
2024-09-12 4:14 ` Baolu Lu
2024-09-26 10:29 ` Vasant Hegde
2024-09-26 11:01 ` Vasant Hegde
2024-10-02 14:23 ` Jason Gunthorpe
2024-10-02 19:02 ` Jacob Pan
[not found] ` <66fd98e3.170a0220.23d7ae.c2a9SMTPIN_ADDED_BROKEN@mx.google.com>
2024-10-02 19:07 ` Jason Gunthorpe
2024-10-03 16:00 ` Jacob Pan
2024-10-02 19:23 ` Jason Gunthorpe
2024-10-04 8:12 ` Vasant Hegde
2024-10-04 12:46 ` Jason Gunthorpe
2024-10-15 8:31 ` Tian, Kevin
2024-09-11 10:19 ` [PATCH v2 4/8] iommu/amd: Separate page table setup from domain allocation Vasant Hegde
2024-09-13 17:08 ` Jacob Pan
2024-10-02 19:24 ` Jason Gunthorpe
2024-09-11 10:19 ` [PATCH v2 5/8] iommu/amd: Pass page table type as param to pdom_setup_pgtable() Vasant Hegde
2024-09-13 21:39 ` Jacob Pan
2024-09-26 10:25 ` Vasant Hegde
2024-09-30 17:57 ` Jacob Pan
[not found] ` <66e4b125.170a0220.2fa213.1e2cSMTPIN_ADDED_BROKEN@mx.google.com>
2024-09-20 13:02 ` Jason Gunthorpe
2024-09-11 10:19 ` [PATCH v2 6/8] iommu/amd: Enhance domain_alloc_user() to allocate PASID capable domain Vasant Hegde
2024-10-02 19:31 ` Jason Gunthorpe
2024-10-04 8:18 ` Vasant Hegde
2024-10-04 12:48 ` Jason Gunthorpe
2024-10-04 14:32 ` Vasant Hegde
2024-10-15 8:41 ` Tian, Kevin
2024-10-15 12:40 ` Jason Gunthorpe
2024-10-16 2:48 ` Tian, Kevin
2024-10-16 15:28 ` Jason Gunthorpe
2024-10-17 6:11 ` Tian, Kevin
2024-10-17 11:03 ` Vasant Hegde
2024-09-11 10:19 ` [PATCH v2 7/8] iommu/amd: Add iommu_ops->domain_alloc_paging support Vasant Hegde
2024-10-02 19:33 ` Jason Gunthorpe
2024-10-04 11:55 ` Vasant Hegde
2024-10-04 12:56 ` Jason Gunthorpe
2024-10-04 14:30 ` Vasant Hegde
2024-10-04 15:31 ` Jason Gunthorpe
2024-10-08 10:08 ` Vasant Hegde
2024-09-11 10:19 ` [PATCH v2 8/8] iommu/amd: Implement global identity domain Vasant Hegde
2024-10-02 19:36 ` Jason Gunthorpe
2024-10-04 11:42 ` Vasant Hegde
2024-10-02 5:30 ` [PATCH v2 0/8] iommu: Domain allocation enhancements Vasant Hegde
2024-10-02 14:24 ` Jason Gunthorpe
2024-10-04 6:11 ` Vasant Hegde
2024-10-09 2:47 ` Baolu Lu
2024-10-09 9:53 ` Vasant Hegde
2024-10-09 12:15 ` Jason Gunthorpe
2024-10-10 6:40 ` Baolu Lu
2024-10-10 6:48 ` Baolu Lu
2024-10-10 11:38 ` Jason Gunthorpe
2024-10-10 14:06 ` Baolu Lu
2024-10-11 5:06 ` Tian, Kevin
2024-10-11 11:39 ` Jason Gunthorpe
2024-10-15 8:10 ` 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=20241015123142.GF1825128@ziepe.ca \
--to=jgg@ziepe.ca \
--cc=baolu.lu@linux.intel.com \
--cc=iommu@lists.linux.dev \
--cc=jacob.pan@linux.microsoft.com \
--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