Re: [PATCH v2 1/5] iommu/vt-d: Separate page request queue from SVM

From: Baolu Lu
Date: Wed Sep 18 2024 - 07:17:46 EST


On 2024/9/18 16:20, Tian, Kevin wrote:
From: Baolu Lu<baolu.lu@xxxxxxxxxxxxxxx>
Sent: Saturday, September 14, 2024 1:50 PM

On 2024/9/14 10:53, Tian, Kevin wrote:
From: Baolu Lu<baolu.lu@xxxxxxxxxxxxxxx>
Sent: Saturday, September 14, 2024 9:18 AM

On 9/14/24 8:52 AM, Tian, Kevin wrote:
From: Joel Granados via B4 Relay
<devnull+j.granados.samsung.com@xxxxxxxxxx>

From: Joel Granados<j.granados@xxxxxxxxxxx>

IO page faults are no longer dependent on
CONFIG_INTEL_IOMMU_SVM.
Move
all Page Request Queue (PRQ) functions that handle prq events to a
new
file in drivers/iommu/intel/prq.c. The page_req_des struct is now
declared in drivers/iommu/intel/prq.c.

No functional changes are intended. This is a preparation patch to
enable the use of IO page faults outside the SVM/PASID use cases.
Do we want to guard it under a new config option e.g.
CONFIG_INTEL_IOMMU_IOPF? it's unnecessary to allocate resources
for the majority usages which don't require IOPF.

Baolu?
The OS builder doesn't know if Linux will run on a platform with PRI-
capable devices. They'll probably always enable this option if we
provide it.
hmm then why do we need a SVM option? In reality I haven't seen
a platform which supports IOPF but no pasid/SVM. so the reason
for whether to have an option should be same between IOPF/SVM.

IMHO the point of options is to allow reducing footprint of the kernel
image and many options are probably always enabled in distributions...
To be honest, I would hope to remove the SVM option some day. It's
nothing special except listening to an external notification and
synchronize the caches when the page table is updated.
more than that... for each IOMMU the current code allocates 16 pages
and 1 hwirq. Those are unnecessary burdens in majority deployments
which don't support/require I/O page faults.

Yeah! I only focused on the kernel binary size but ignored these system
resources consumed by IOPF. Then, perhaps

diff --git a/drivers/iommu/intel/Kconfig b/drivers/iommu/intel/Kconfig
index f52fb39c968e..847a5c43c9dc 100644
--- a/drivers/iommu/intel/Kconfig
+++ b/drivers/iommu/intel/Kconfig
@@ -97,4 +97,7 @@ config INTEL_IOMMU_PERF_EVENTS
to aid performance tuning and debug. These are available on modern
processors which support Intel VT-d 4.0 and later.

+config INTEL_IOMMU_IOPF
+ depends on IOMMUFD || INTEL_IOMMU_SVM
+
endif # INTEL_IOMMU
diff --git a/drivers/iommu/intel/Makefile b/drivers/iommu/intel/Makefile
index c8beb0281559..c382307ae7aa 100644
--- a/drivers/iommu/intel/Makefile
+++ b/drivers/iommu/intel/Makefile
@@ -5,6 +5,7 @@ obj-$(CONFIG_DMAR_TABLE) += trace.o cap_audit.o
obj-$(CONFIG_DMAR_PERF) += perf.o
obj-$(CONFIG_INTEL_IOMMU_DEBUGFS) += debugfs.o
obj-$(CONFIG_INTEL_IOMMU_SVM) += svm.o
+obj-$(CONFIG_INTEL_IOMMU_IOPF) += prq.o
ifdef CONFIG_INTEL_IOMMU
obj-$(CONFIG_IRQ_REMAP) += irq_remapping.o
endif

?

Thanks,
baolu