From: Baolu Lu <baolu.lu@linux.intel.com>
To: Yi Liu <yi.l.liu@intel.com>, "Tian, Kevin" <kevin.tian@intel.com>,
Jason Gunthorpe <jgg@nvidia.com>
Cc: baolu.lu@linux.intel.com, "joro@8bytes.org" <joro@8bytes.org>,
"alex.williamson@redhat.com" <alex.williamson@redhat.com>,
"robin.murphy@arm.com" <robin.murphy@arm.com>,
"cohuck@redhat.com" <cohuck@redhat.com>,
"eric.auger@redhat.com" <eric.auger@redhat.com>,
"nicolinc@nvidia.com" <nicolinc@nvidia.com>,
"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
"mjrosato@linux.ibm.com" <mjrosato@linux.ibm.com>,
"chao.p.peng@linux.intel.com" <chao.p.peng@linux.intel.com>,
"yi.y.sun@linux.intel.com" <yi.y.sun@linux.intel.com>,
"peterx@redhat.com" <peterx@redhat.com>,
"jasowang@redhat.com" <jasowang@redhat.com>,
"shameerali.kolothum.thodi@huawei.com"
<shameerali.kolothum.thodi@huawei.com>,
"lulu@redhat.com" <lulu@redhat.com>,
"suravee.suthikulpanit@amd.com" <suravee.suthikulpanit@amd.com>,
"iommu@lists.linux.dev" <iommu@lists.linux.dev>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-kselftest@vger.kernel.org"
<linux-kselftest@vger.kernel.org>,
"Duan, Zhenzhong" <zhenzhong.duan@intel.com>,
"joao.m.martins@oracle.com" <joao.m.martins@oracle.com>,
"Zeng, Xin" <xin.zeng@intel.com>,
"Zhao, Yan Y" <yan.y.zhao@intel.com>
Subject: Re: [PATCH 1/8] iommu: Introduce a replace API for device pasid
Date: Wed, 13 Mar 2024 11:13:23 +0800 [thread overview]
Message-ID: <87a2be0d-6a24-4ca8-be30-35287072dda4@linux.intel.com> (raw)
In-Reply-To: <585423de-9173-4c97-b596-71e1564d8b4e@intel.com>
On 2024/3/12 11:07, Yi Liu wrote:
> On 2024/3/11 17:26, Tian, Kevin wrote:
>>> From: Liu, Yi L <yi.l.liu@intel.com>
>>> Sent: Sunday, March 10, 2024 9:06 PM
>>>
>>> On 2024/1/16 01:19, Jason Gunthorpe wrote:
>>>> On Sun, Nov 26, 2023 at 10:34:21PM -0800, Yi Liu wrote:
>>>>> +int iommu_replace_device_pasid(struct iommu_domain *domain,
>>>>> + struct device *dev, ioasid_t pasid)
>>>>> +{
>>>>> + struct iommu_group *group = dev->iommu_group;
>>>>> + struct iommu_domain *old_domain;
>>>>> + int ret;
>>>>> +
>>>>> + if (!domain)
>>>>> + return -EINVAL;
>>>>> +
>>>>> + if (!group)
>>>>> + return -ENODEV;
>>>>> +
>>>>> + mutex_lock(&group->mutex);
>>>>> + __iommu_remove_group_pasid(group, pasid);
>>>>
>>>> It is not replace if you do remove first.
>>>>
>>>> Replace must just call set_dev_pasid and nothing much else..
>>>
>>> Seems uneasy to do it so far. The VT-d driver needs to get the old
>>> domain
>>> first in order to do replacement. However, VT-d driver does not track
>>> the
>>> attached domains of pasids. It gets domain of a pasid
>>> by iommu_get_domain_for_dev_pasid(). Like
>>> intel_iommu_remove_dev_pasid)
>>> in link [1]. While the iommu layer exchanges the domain in the
>>> group->pasid_array before calling into VT-d driver. So when calling into
>>> VT-d driver, the domain got by iommu_get_domain_for_dev_pasid() is
>>> already
>>> the new domain. To solve it, we may need to let VT-d driver have its
>>> own tracking on the domains. How about your thoughts? @Jason, @Kevin,
>>> @Baoplu?
>>>
>>> [1]
>>> https://github.com/torvalds/linux/blob/master/drivers/iommu/intel/iommu
>>> .c#L4621C19-L4621C20
>>>
>>
>> Jason's point was that the core helper should directly call set_dev_pasid
>> and underlying iommu driver decides whether atomic replacement
>> can be implemented inside the callback. If you first remove in the core
>> then one can never implement a replace semantics.
>
> yeah, I got Jason's point. I'm raising an open to make the set_dev_pasid
> callback to handle domain replacement. The existing intel iommu driver
> does not track attached domains for pasid. But it's needed to know the
> attached domain of a pasid and find the dev_pasid under the domain, hence
> be able to clean up the old attachment and do the new attachment. Existing
> code cannot work as I mentioned above. The group->pasid_xarray is updated
> before calling set_dev_pasid callback. This means the underlying iommu
> driver cannot get the old domain in the set_dev_pasid callback by the
> iommu_get_domain_for_dev_pasid() helper.
>
> As above, I'm considering the possibility to track attached domains for
> pasid by an xarray in the struct device_domain_info. Hence, intel iommu
> driver could store/retrieve attached domain for pasids. If it's
> replacement, the set_dev_pasid callback could find the attached domain and
> the dev_pasid instance in the domain. Then be able to do detach and clean
> up the tracking structures (e.g. dev_pasid).
Maintaining the same data structure in both core and individual iommu
drivers seems to be duplicate effort. It appears that what you want here
is just to get the currently used domain in the set_dev_pasid path. Is
it possible to adjust the core code so that the pasid array is updated
after the driver's set_dev_pasid callback returns success?
Best regards,
baolu
next prev parent reply other threads:[~2024-03-13 3:13 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-27 6:34 [PATCH 0/8] iommufd support pasid attach/replace Yi Liu
2023-11-27 6:34 ` [PATCH 1/8] iommu: Introduce a replace API for device pasid Yi Liu
2024-01-15 17:19 ` Jason Gunthorpe
2024-03-10 13:05 ` Yi Liu
2024-03-11 9:26 ` Tian, Kevin
2024-03-12 3:07 ` Yi Liu
2024-03-13 3:13 ` Baolu Lu [this message]
2024-03-13 8:11 ` Yi Liu
2024-03-18 16:52 ` Jason Gunthorpe
2024-03-19 7:29 ` Yi Liu
2024-03-20 12:38 ` Jason Gunthorpe
2024-03-21 6:16 ` Yi Liu
2024-03-21 11:26 ` Yi Liu
2024-03-21 12:20 ` Jason Gunthorpe
2024-03-21 13:58 ` Yi Liu
2023-11-27 6:34 ` [PATCH 2/8] iommufd: replace attach_fn with a structure Yi Liu
2023-11-27 6:34 ` [PATCH 3/8] iommufd: Support attach/replace hwpt per pasid Yi Liu
2024-01-15 17:24 ` Jason Gunthorpe
2024-01-16 1:18 ` Tian, Kevin
2024-01-16 12:57 ` Jason Gunthorpe
2024-01-17 4:17 ` Tian, Kevin
2024-01-17 8:24 ` Yi Liu
2024-01-17 12:56 ` Jason Gunthorpe
2024-01-18 9:28 ` Yi Liu
2024-01-18 13:38 ` Jason Gunthorpe
2024-01-19 10:15 ` Yi Liu
2023-11-27 6:34 ` [PATCH 4/8] iommufd/selftest: Add set_dev_pasid and remove_dev_pasid in mock iommu Yi Liu
2023-11-27 6:34 ` [PATCH 5/8] iommufd/selftest: Add a helper to get test device Yi Liu
2023-11-27 6:34 ` [PATCH 6/8] iommufd/selftest: Add test ops to test pasid attach/detach Yi Liu
2023-11-27 6:34 ` [PATCH 7/8] iommufd/selftest: Add coverage for iommufd " Yi Liu
2023-11-27 6:34 ` [PATCH 8/8] iommu/vt-d: Add set_dev_pasid callback for nested domain Yi Liu
2023-12-14 2:55 ` Yang, Weijiang
2023-12-14 13:33 ` Baolu Lu
2023-12-15 0:37 ` Yang, Weijiang
2024-01-15 17:22 ` Jason Gunthorpe
2024-01-17 8:20 ` Baolu Lu
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=87a2be0d-6a24-4ca8-be30-35287072dda4@linux.intel.com \
--to=baolu.lu@linux.intel.com \
--cc=alex.williamson@redhat.com \
--cc=chao.p.peng@linux.intel.com \
--cc=cohuck@redhat.com \
--cc=eric.auger@redhat.com \
--cc=iommu@lists.linux.dev \
--cc=jasowang@redhat.com \
--cc=jgg@nvidia.com \
--cc=joao.m.martins@oracle.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=lulu@redhat.com \
--cc=mjrosato@linux.ibm.com \
--cc=nicolinc@nvidia.com \
--cc=peterx@redhat.com \
--cc=robin.murphy@arm.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=suravee.suthikulpanit@amd.com \
--cc=xin.zeng@intel.com \
--cc=yan.y.zhao@intel.com \
--cc=yi.l.liu@intel.com \
--cc=yi.y.sun@linux.intel.com \
--cc=zhenzhong.duan@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
Powered by JetHome