iommu/vt-d: Populate debugfs if IOMMUs are detected

Currently, the intel iommu debugfs directory(/sys/kernel/debug/iommu/intel)
gets populated only when DMA remapping is enabled (dmar_disabled = 0)
irrespective of whether interrupt remapping is enabled or not.

Instead, populate the intel iommu debugfs directory if any IOMMUs are
detected.

Cc: Dan Carpenter <dan.carpenter@oracle.com>
Fixes: ee2636b867 ("iommu/vt-d: Enable base Intel IOMMU debugfs support")
Signed-off-by: Megha Dey <megha.dey@linux.intel.com>
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
Megha Dey 2020-03-14 11:39:59 +08:00 committed by Joerg Roedel
parent 730ad0ede1
commit 1da8347d85
2 changed files with 13 additions and 2 deletions

View File

@ -282,9 +282,16 @@ static int dmar_translation_struct_show(struct seq_file *m, void *unused)
{ {
struct dmar_drhd_unit *drhd; struct dmar_drhd_unit *drhd;
struct intel_iommu *iommu; struct intel_iommu *iommu;
u32 sts;
rcu_read_lock(); rcu_read_lock();
for_each_active_iommu(iommu, drhd) { for_each_active_iommu(iommu, drhd) {
sts = dmar_readl(iommu->reg + DMAR_GSTS_REG);
if (!(sts & DMA_GSTS_TES)) {
seq_printf(m, "DMA Remapping is not enabled on %s\n",
iommu->name);
continue;
}
root_tbl_walk(m, iommu); root_tbl_walk(m, iommu);
seq_putc(m, '\n'); seq_putc(m, '\n');
} }
@ -425,6 +432,7 @@ static int ir_translation_struct_show(struct seq_file *m, void *unused)
struct dmar_drhd_unit *drhd; struct dmar_drhd_unit *drhd;
struct intel_iommu *iommu; struct intel_iommu *iommu;
u64 irta; u64 irta;
u32 sts;
rcu_read_lock(); rcu_read_lock();
for_each_active_iommu(iommu, drhd) { for_each_active_iommu(iommu, drhd) {
@ -434,7 +442,8 @@ static int ir_translation_struct_show(struct seq_file *m, void *unused)
seq_printf(m, "Remapped Interrupt supported on IOMMU: %s\n", seq_printf(m, "Remapped Interrupt supported on IOMMU: %s\n",
iommu->name); iommu->name);
if (iommu->ir_table) { sts = dmar_readl(iommu->reg + DMAR_GSTS_REG);
if (iommu->ir_table && (sts & DMA_GSTS_IRES)) {
irta = virt_to_phys(iommu->ir_table->base); irta = virt_to_phys(iommu->ir_table->base);
seq_printf(m, " IR table address:%llx\n", irta); seq_printf(m, " IR table address:%llx\n", irta);
ir_tbl_remap_entry_show(m, iommu); ir_tbl_remap_entry_show(m, iommu);

View File

@ -5133,6 +5133,9 @@ int __init intel_iommu_init(void)
down_write(&dmar_global_lock); down_write(&dmar_global_lock);
if (!no_iommu)
intel_iommu_debugfs_init();
if (no_iommu || dmar_disabled) { if (no_iommu || dmar_disabled) {
/* /*
* We exit the function here to ensure IOMMU's remapping and * We exit the function here to ensure IOMMU's remapping and
@ -5228,7 +5231,6 @@ int __init intel_iommu_init(void)
pr_info("Intel(R) Virtualization Technology for Directed I/O\n"); pr_info("Intel(R) Virtualization Technology for Directed I/O\n");
intel_iommu_enabled = 1; intel_iommu_enabled = 1;
intel_iommu_debugfs_init();
return 0; return 0;