On 2025/8/28 00:28, Eric Auger wrote:
Hi Zhenzhong,
On 8/22/25 8:40 AM, Zhenzhong Duan wrote:
FORCE_RESET is different from GLOBAL_INV which updates pasid cache if
underlying pasid entry is still valid, it drops all the pasid caches.
FORCE_RESET isn't a VTD spec defined invalidation type for pasid cache,
only used internally in system level reset.
Signed-off-by: Yi Liu <yi.l....@intel.com>
Signed-off-by: Yi Sun <yi.y....@linux.intel.com>
Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com>
---
hw/i386/intel_iommu_internal.h | 9 +++++++++
hw/i386/intel_iommu.c | 25 +++++++++++++++++++++++++
hw/i386/trace-events | 1 +
3 files changed, 35 insertions(+)
diff --git a/hw/i386/intel_iommu_internal.h b/hw/i386/intel_iommu_internal.h
index fb2a919e87..c510b09d1a 100644
--- a/hw/i386/intel_iommu_internal.h
+++ b/hw/i386/intel_iommu_internal.h
@@ -569,6 +569,15 @@ typedef enum VTDPCInvType {
VTD_PASID_CACHE_DOMSI = VTD_INV_DESC_PASIDC_G_DSI,
VTD_PASID_CACHE_PASIDSI = VTD_INV_DESC_PASIDC_G_PASID_SI,
VTD_PASID_CACHE_GLOBAL_INV = VTD_INV_DESC_PASIDC_G_GLOBAL,
+
+ /*
+ * Internally used PASID cache invalidation type starts here,
+ * 0x10 is large enough as invalidation type in pc_inv_desc
+ * is 2bits in size.
+ */
+
+ /* Reset all PASID cache entries, used in system level reset */
+ VTD_PASID_CACHE_FORCE_RESET = 0x10,
I am not very keen on adding such an artifical enum value that does not
exist in the spec.
Why not simply introduce another function (instead of
vtd_flush_pasid_locked) that does the cleanup. To me it would be
cleaner. Thanks Eric
this makes sense. Just wrap the code after the remove tag into a helper.