Thread (13 messages) 13 messages, 6 authors, 2024-08-13

Re: [PATCH] iommu: Allow ATS to work on VFs when the PF uses IDENTITY

From: Yi Liu <hidden>
Date: 2024-08-13 23:18:22
Also in: kvm, linux-iommu, linux-patches, linux-pci

On 2024/8/13 20:30, Jason Gunthorpe wrote:
On Tue, Aug 13, 2024 at 11:11:01AM +0800, Yi Liu wrote:
quoted
quoted
The simplest solution is to have the iommu driver set the ATS STU when it
probes the device. This way the ATS STU is loaded immediately at boot time
to all PFs and there is no issue when a VF comes to use it.
This only sets STU without setting the ATS_CTRL.E bit. Is it possible that
VF considers the PF's STU field as valid only if PF's ATS_CTRL.E bit is
set?
That doesn't seem to be the case. Do you see something in the spec
that says so?
no, I didn't find any word that describe it. So it is highly possible this
is not defined and up to vendors. This means there is possibility for what
I typed in the above :( I'm not a hw guy, but it seems reasonable to treat
something valid only when the cap is enabled?
quoted
quoted
@@ -4091,6 +4091,7 @@ static struct iommu_device *intel_iommu_probe_device(struct device *dev)
   	dev_iommu_priv_set(dev, info);
   	if (pdev && pci_ats_supported(pdev)) {
+		pci_prepare_ats(pdev, VTD_PAGE_SHIFT);
perhaps just do it for PFs? :)
That check is inside pci_perpare_ats(), no reason to duplicate it in
all the callers.
got it.
quoted
quoted
+int pci_prepare_ats(struct pci_dev *dev, int ps)
+{
+	u16 ctrl;
+
+	if (!pci_ats_supported(dev))
+		return -EINVAL;
+
+	if (WARN_ON(dev->ats_enabled))
+		return -EBUSY;
+
+	if (ps < PCI_ATS_MIN_STU)
+		return -EINVAL;
+
+	if (dev->is_virtfn)
+		return 0;
+
+	dev->ats_stu = ps;
+	ctrl = PCI_ATS_CTRL_STU(dev->ats_stu - PCI_ATS_MIN_STU);
+	pci_write_config_word(dev, dev->ats_cap + PCI_ATS_CTRL, ctrl);
Is it valuable to have a flag to mark if STU is set or not? Such way can
avoid setting STU multiple times.
We don't because we only do it for the PF due to the is_virtfn check
ok. Doing it only for PF is enough.

-- 
Regards,
Yi Liu
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help