Messages in this thread | | | From | Jingqi Liu <> | Subject | [PATH v3 0/3] iommu/vt-d: debugfs: Enhancements to IOMMU debugfs | Date | Wed, 27 Sep 2023 23:15:33 +0800 |
| |
The original debugfs only dumps all IOMMU page tables without pasid supported. It traverses all devices on the pci bus, then dumps all page tables based on device domains. This traversal is from software perspective.
This series dumps page tables whose mappings are created and destroyed by the iommu_map/unmap() interfaces, by traversing root tables, context tables, pasid directories and pasid tables from hardware perspective. It supports dumping a specified page table in legacy mode or scalable mode with or without a specified pasid.
It adds a debugfs directory per pair of {device, pasid} when attaching device with or without pasid, i.e. /sys/kernel/debug/iommu/intel/<device source id>/<pasid>. And create a debugfs file in the directory for users to dump the page table corresponding to {device, pasid}. e.g. /sys/kernel/debug/iommu/intel/0000:00:02.0/0/domain_translation_struct. Each device has a PASID#0, i.e. RID_PASID. Remove the corresponding debugfs directory and file when detaching or releasing a device.
For legacy mode, according to bus number and DEVFN, traverse the root table and context table to get the pointer of page table in the context table entry, then dump the specified page table.
For scalable mode, according to bus number, DEVFN and pasid, traverse the root table, context table, pasid directory and pasid table to get the pointer of page table in the pasid table entry, then dump the specified page table.
Examples are as follows: 1) Dump the page table of device "0000:00:01.0" that only supports legacy mode. $ sudo cat /sys/kernel/debug/iommu/intel/0000:00:01.0/0/domain_translation_struct
2) Dump the page table of device "0000:00:02.0" with PASID "1" that supports scalable mode. $ sudo cat /sys/kernel/debug/iommu/intel/0000:00:0a.0/1/domain_translation_struct
Change log:
v3: - Add domain as a parameter for creating debugfs pasid directory per Baolu's review. - dput() the dentry after debugfs_lookup() per Baolu's review. - debugfs device and pasid directory are managed separately per Baolu's review.
v2: https://lore.kernel.org/linux-iommu/20230922151636.77139-1-Jingqi.liu@intel.com - Add a debugfs directory per {dev, pasid} as suggested by Kevin. - Create the debugfs directory when attaching device as suggested by Baolu. - Only dump the page tables whose mappings are created and destroyed by the iommu_map/unmap() interfaces per Baolu's review. - Rename the helpers for creating/removing debugfs directory/file and merge patch 2,3,4,5 to one patch per Baolu's review.
v1: https://lore.kernel.org/linux-iommu/20230625150442.42197-1-Jingqi.liu@intel.com
Jingqi Liu (3): iommu/vt-d: debugfs: Dump entry pointing to huge page iommu/vt-d: debugfs: Create/remove debugfs file per {device, pasid} iommu/vt-d: debugfs: Support dumping a specified page table
drivers/iommu/intel/debugfs.c | 307 ++++++++++++++++++++++++++++------ drivers/iommu/intel/iommu.c | 29 ++++ drivers/iommu/intel/iommu.h | 12 ++ 3 files changed, 298 insertions(+), 50 deletions(-)
-- 2.21.3
| |