[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <5b360e8a-03bf-4886-8134-8e4ab5a9f485@amd.com>
Date: Sun, 29 Jun 2025 11:08:43 +0530
From: Vasant Hegde <vasant.hegde@....com>
To: Dheeraj Kumar Srivastava <dheerajkumar.srivastava@....com>,
joro@...tes.org, suravee.suthikulpanit@....com, will@...nel.org,
robin.murphy@....com, linux-kernel@...r.kernel.org, iommu@...ts.linux.dev
Subject: Re: [PATCH v6 6/8] iommu/amd: Add debugfs support to dump device
table
Dheeraj,
On 6/4/2025 10:06 PM, Dheeraj Kumar Srivastava wrote:
> IOMMU uses device table data structure to get per-device information for
> DMA remapping, interrupt remapping, and other functionalities. It's a
> valuable data structure to visualize for debugging issues related to
> IOMMU.
>
> eg.
> -> To dump device table entry for a particular device
> #echo 0000:c4:00.0 > /sys/kernel/debug/iommu/amd/devid
> #cat /sys/kernel/debug/iommu/amd/devtbl
>
> or
>
> #echo c4:00.0 > /sys/kernel/debug/iommu/amd/devid
> #cat /sys/kernel/debug/iommu/amd/devtbl
>
> Signed-off-by: Dheeraj Kumar Srivastava <dheerajkumar.srivastava@....com>
> ---
> drivers/iommu/amd/debugfs.c | 49 +++++++++++++++++++++++++++++++++++++
> 1 file changed, 49 insertions(+)
>
> diff --git a/drivers/iommu/amd/debugfs.c b/drivers/iommu/amd/debugfs.c
> index 8b57ab4ab809..38d3cab5fd8d 100644
> --- a/drivers/iommu/amd/debugfs.c
> +++ b/drivers/iommu/amd/debugfs.c
> @@ -207,6 +207,53 @@ static int devid_show(struct seq_file *m, void *unused)
> }
> DEFINE_SHOW_STORE_ATTRIBUTE(devid);
>
> +static void dump_dte(struct seq_file *m, struct amd_iommu_pci_seg *pci_seg, u16 devid)
> +{
> + struct dev_table_entry *dev_table;
> + struct amd_iommu *iommu;
> +
> + iommu = pci_seg->rlookup_table[devid];
> + if (!iommu)
> + return;
> +
> + dev_table = get_dev_table(iommu);
> + if (!dev_table) {
> + seq_puts(m, "Device table not found");
> + return;
> + }
> +
> + seq_printf(m, "%-12s %16s %16s %16s %16s iommu\n", "DeviceId",
> + "QWORD[3]", "QWORD[2]", "QWORD[1]", "QWORD[0]");
> + seq_printf(m, "%04x:%02x:%02x.%x ", pci_seg->id, PCI_BUS_NUM(devid),
> + PCI_SLOT(devid), PCI_FUNC(devid));
> + for (int i = 3; i >= 0; --i)
> + seq_printf(m, "%016llx ", dev_table[devid].data[i]);
> + seq_printf(m, "iommu%d\n", iommu->index);
> +}
> +
> +static int iommu_devtbl_show(struct seq_file *m, void *unused)
> +{
> + struct amd_iommu_pci_seg *pci_seg;
> + u16 seg, devid;
> +
> + if (sbdf < 0) {
> + seq_puts(m, "Please provide valid device id input\n");
Where? This should clearly indicate where to provide device id.
-Vasant
Powered by blists - more mailing lists