From: Baolu Lu <baolu.lu@linux.intel.com>
To: "Tian, Kevin" <kevin.tian@intel.com>,
Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org>,
Robin Murphy <robin.murphy@arm.com>,
Jason Gunthorpe <jgg@ziepe.ca>
Cc: "Jiang, Dave" <dave.jiang@intel.com>,
Vinod Koul <vkoul@kernel.org>, Fenghua Yu <fenghuay@nvidia.com>,
Zhangfei Gao <zhangfei.gao@linaro.org>,
Zhou Wang <wangzhou1@hisilicon.com>,
"iommu@lists.linux.dev" <iommu@lists.linux.dev>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v2 04/12] iommu/vt-d: Move scalable mode ATS enablement to probe path
Date: Wed, 26 Feb 2025 10:21:17 +0800 [thread overview]
Message-ID: <6a418974-d06e-46e3-879f-ab4c84a95231@linux.intel.com> (raw)
In-Reply-To: <BN9PR11MB5276066807236213BCFDD2538CC32@BN9PR11MB5276.namprd11.prod.outlook.com>
On 2/25/25 15:28, Tian, Kevin wrote:
>> From: Lu Baolu <baolu.lu@linux.intel.com>
>> Sent: Monday, February 24, 2025 1:16 PM
>>
>> Device ATS is currently enabled when a domain is attached to the device
>> and disabled when the domain is detached. This creates a limitation:
>> when the IOMMU is operating in scalable mode and IOPF is enabled, the
>> device's domain cannot be changed.
>
> I got what this patch does, but not this description. Can you elaborate
> about the limitation?
Okay, sure.
The previous code enables ATS when a domain is set to a device's RID and
disables it during RID domain switch. So, if a PASID is set with a
domain requiring PRI, ATS should remain enabled until the domain is
removed. During the PASID domain's lifecycle, if the RID's domain
changes, PRI will be disrupted because it depends on ATS, which is
disabled when the blocking domain is set for the device's RID.
>
>> @@ -1556,12 +1528,22 @@ domain_context_mapping(struct dmar_domain
>> *domain, struct device *dev)
>> struct device_domain_info *info = dev_iommu_priv_get(dev);
>> struct intel_iommu *iommu = info->iommu;
>> u8 bus = info->bus, devfn = info->devfn;
>> + struct pci_dev *pdev;
>> + int ret;
>>
>> if (!dev_is_pci(dev))
>> return domain_context_mapping_one(domain, iommu, bus,
>> devfn);
>>
>> - return pci_for_each_dma_alias(to_pci_dev(dev),
>> - domain_context_mapping_cb, domain);
>> + pdev = to_pci_dev(dev);
>> + ret = pci_for_each_dma_alias(pdev, domain_context_mapping_cb,
>> domain);
>> + if (ret)
>> + return ret;
>> +
>> + if (info->ats_supported && pci_ats_page_aligned(pdev) &&
>> + !pci_enable_ats(pdev, VTD_PAGE_SHIFT))
>> + info->ats_enabled = 1;
>> +
>> + return 0;
>> }
>
> It'd be good to add a note here for why legacy mode still requires
> dynamic toggle at attach/detach time. It's not obvious w/o knowing
> the story about legacy + identity.
"legacy + identity" is part of the reason. Additionally, in legacy mode,
the ATS control bit is defined as a translation type and should be set
together with the page table pointer in the context entry. Separating
ATS enablement and the translation page table into different places
would make the code more complex and fragile.
> btw the same enabling logic occurs in multiple places. Probably
> you can still make a helper for that.
Yes, I will make a helper like this,
+static void device_enable_pci_ats(struct pci_dev *pdev)
+{
+ struct device_domain_info *info = dev_iommu_priv_get(&pdev->dev);
+
+ if (!info->ats_supported)
+ return;
+
+ if (!pci_ats_page_aligned(pdev))
+ return;
+
+ if(!pci_enable_ats(pdev, VTD_PAGE_SHIFT))
+ info->ats_enabled = 1;
+}
> Otherwise,
>
> Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Thanks,
baolu
next prev parent reply other threads:[~2025-02-26 2:24 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-24 5:16 [PATCH v2 00/12] iommu: Remove IOMMU_DEV_FEAT_SVA/_IOPF Lu Baolu
2025-02-24 5:16 ` [PATCH v2 01/12] iommu/arm-smmu-v3: Put iopf enablement in the domain attach path Lu Baolu
2025-02-24 5:16 ` [PATCH v2 02/12] iommu/vt-d: Check if SVA is supported when attaching the SVA domain Lu Baolu
2025-02-25 7:23 ` Tian, Kevin
2025-03-04 7:44 ` Yi Liu
2025-02-24 5:16 ` [PATCH v2 03/12] iommu: Remove IOMMU_DEV_FEAT_SVA Lu Baolu
2025-02-25 7:24 ` Tian, Kevin
2025-03-04 7:50 ` Yi Liu
2025-02-24 5:16 ` [PATCH v2 04/12] iommu/vt-d: Move scalable mode ATS enablement to probe path Lu Baolu
2025-02-25 7:28 ` Tian, Kevin
2025-02-26 2:21 ` Baolu Lu [this message]
2025-03-04 7:55 ` Yi Liu
2025-02-24 5:16 ` [PATCH v2 05/12] iommu/vt-d: Move PRI enablement in " Lu Baolu
2025-02-25 7:37 ` Tian, Kevin
2025-02-26 3:53 ` Baolu Lu
2025-02-24 5:16 ` [PATCH v2 06/12] iommu/vt-d: Cleanup intel_context_flush_present() Lu Baolu
2025-02-25 7:43 ` Tian, Kevin
2025-02-26 3:57 ` Baolu Lu
2025-02-26 5:17 ` Tian, Kevin
2025-03-04 8:43 ` Yi Liu
2025-03-05 2:21 ` Baolu Lu
2025-03-05 3:34 ` Yi Liu
2025-03-05 5:36 ` Baolu Lu
2025-02-24 5:16 ` [PATCH v2 07/12] iommu/vt-d: Put iopf enablement in domain attach path Lu Baolu
2025-02-25 8:02 ` Tian, Kevin
2025-02-24 5:16 ` [PATCH v2 08/12] iommufd/selftest: " Lu Baolu
2025-02-25 8:16 ` Tian, Kevin
2025-02-26 4:06 ` Baolu Lu
2025-02-24 5:16 ` [PATCH v2 09/12] dmaengine: idxd: Remove unnecessary IOMMU_DEV_FEAT_IOPF Lu Baolu
2025-02-25 8:16 ` Tian, Kevin
2025-02-24 5:16 ` [PATCH v2 10/12] uacce: " Lu Baolu
2025-02-24 10:00 ` Zhangfei Gao
2025-02-25 8:17 ` Tian, Kevin
2025-02-24 5:16 ` [PATCH v2 11/12] iommufd: " Lu Baolu
2025-02-25 8:18 ` Tian, Kevin
2025-02-24 5:16 ` [PATCH v2 12/12] iommu: Remove iommu_dev_enable/disable_feature() Lu Baolu
2025-02-25 8:18 ` Tian, Kevin
2025-02-24 9:58 ` [PATCH v2 00/12] iommu: Remove IOMMU_DEV_FEAT_SVA/_IOPF Zhangfei Gao
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=6a418974-d06e-46e3-879f-ab4c84a95231@linux.intel.com \
--to=baolu.lu@linux.intel.com \
--cc=dave.jiang@intel.com \
--cc=fenghuay@nvidia.com \
--cc=iommu@lists.linux.dev \
--cc=jgg@ziepe.ca \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=robin.murphy@arm.com \
--cc=vkoul@kernel.org \
--cc=wangzhou1@hisilicon.com \
--cc=will@kernel.org \
--cc=zhangfei.gao@linaro.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox