iommu/vt-d: Populate debugfs if IOMMUs are detected
[ Upstream commit5.4-rM2-2.2.x-imx-squashed1da8347d85
] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
parent
cb17ed60ec
commit
72a0cfeb51
|
@ -281,9 +281,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');
|
||||||
}
|
}
|
||||||
|
@ -353,6 +360,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) {
|
||||||
|
@ -362,7 +370,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);
|
||||||
|
|
|
@ -4961,6 +4961,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
|
||||||
|
@ -5056,7 +5059,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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue