[PATCH v7 0/8] Introduce debugfs support in IOMMU

Dheeraj Kumar Srivastava posted 8 patches 3 months, 1 week ago
Documentation/ABI/testing/debugfs-amd-iommu | 114 ++++++
drivers/iommu/amd/amd_iommu.h               |   4 +-
drivers/iommu/amd/amd_iommu_types.h         |   9 +
drivers/iommu/amd/debugfs.c                 | 378 +++++++++++++++++++-
drivers/iommu/amd/init.c                    |   5 +-
drivers/iommu/amd/iommu.c                   |   7 -
6 files changed, 496 insertions(+), 21 deletions(-)
create mode 100644 Documentation/ABI/testing/debugfs-amd-iommu
[PATCH v7 0/8] Introduce debugfs support in IOMMU
Posted by Dheeraj Kumar Srivastava 3 months, 1 week ago
Introducing debugfs support in AMD/IOMMU driver that will allow
userspace to dump below IOMMU information
1) MMIO and Capability register per IOMMU
2) Command buffer
3) Device table entry
4) Interrupt remapping table entry

Analyzing contents of IOMMU data structures helps in understanding IOMMU
capabilities and behavior and debug issues faster.

1. MMIO and Capability registers - Add support to dump MMIO and Capability
   registers per IOMMU.

   Example:
   a. Write MMIO register offset to dump it
      $ echo 0x18 > /sys/kernel/debug/iommu/amd/iommu00/mmio
      $ cat /sys/kernel/debug/iommu/amd/iommu00/mmio

      Output:
      $ Offset:0x18 Value:0x000c22000003f48d

    b. Write capability register offset to dump it
       $ echo 0x10 > /sys/kernel/debug/iommu/amd/iommu00/capability
       $ cat /sys/kernel/debug/iommu/amd/iommu00/capability

       Output:
       $ Offset:0x10 Value:0x00203040

2. Command buffer - Add support to dump per IOMMU command buffer.

   Example:
   a. cat /sys/kernel/debug/iommu/amd/iommu00/cmdbuf

   Output:
   CMD Buffer Head Offset:339 Tail Offset:339
     0: 00835001 10000001 00009900 00000000
     1: 00000000 30000005 fffff003 7fffffff
     2: 00835001 10000001 00009901 00000000
     3: 00000000 30000005 fffff003 7fffffff
     4: 00835001 10000001 00009902 00000000
   ........................................
   ........................................
   ........................................

3. Device table - Add support to dump device table per IOMMU.

   Example:
   a. Write device id to dump device table entry for that device
      $ echo 0000:01:00.0 > /sys/kernel/debug/iommu/amd/devid
      $ cat /sys/kernel/debug/iommu/amd/devid

      Output:
      0000:01:00.0

      Dump the device table entry for the input given
      $ cat /sys/kernel/debug/iommu/amd/devtbl

      Output:
      DeviceId             QWORD[3]         QWORD[2]         QWORD[1]         QWORD[0] iommu
      0000:01:00.0 0000000000000000 20000001373b8013 0000000000000038 6000000114d7b603 iommu3

    b. Write device id to dump device table entry for that device
      $ echo 01:00.0 > /sys/kernel/debug/iommu/amd/devid
      $ cat /sys/kernel/debug/iommu/amd/devid

      Output:
      0000:01:00.0

      Dump the device table entry for the input given
      $ cat /sys/kernel/debug/iommu/amd/devtbl

      Output:
      DeviceId             QWORD[3]         QWORD[2]         QWORD[1]         QWORD[0] iommu
      0000:01:00.0 0000000000000000 20000001373b8013 0000000000000038 6000000114d7b603 iommu3

4. Interrupt remapping table - Add support to dump IRT table valid entries in
   "iommu_irqtbl" file. This supports user input to dump IRT entry for a
   specific pci device.

   Example:
   a. Write device id to dump device table entry for that device
      $ echo 0000:01:00.0 > /sys/kernel/debug/iommu/amd/devid
      $ cat /sys/kernel/debug/iommu/amd/devid

      Output:
      0000:01:00.0

      Dump the device table entry for the input given
      $ cat /sys/kernel/debug/iommu/amd/irtbl

      Output:
      DeviceId 0000:01:00.0
      IRT[0000] 0000000000000020 0000000000000241
      IRT[0001] 0000000000000020 0000000000000841
      IRT[0002] 0000000000000020 0000000000002041
      IRT[0003] 0000000000000020 0000000000008041
      IRT[0004] 0000000000000020 0000000000020041
      ..........................................
      ..........................................
      ..........................................

   b. Write device id to dump device table entry for that device
      $ echo 01:00.0 > /sys/kernel/debug/iommu/amd/devid
      $ cat /sys/kernel/debug/iommu/amd/devid

      Output:
      0000:01:00.0

      Dump the device table entry for the input given
      $ cat /sys/kernel/debug/iommu/amd/irttbl

      Output:
      Device 0000:01:00.0
      IRT[0000] 0000000000000020 0000000000000241
      IRT[0001] 0000000000000020 0000000000000841
      IRT[0002] 0000000000000020 0000000000002041
      IRT[0003] 0000000000000020 0000000000008041
      IRT[0004] 0000000000000020 0000000000020041
      ..........................................
      ..........................................
      ..........................................

Changes since v6:
-> Patch 1/8 and 2/8: Use "dbg_iommu_offset" and "dbg_cap_offset" instead of "iommu_offset"
   and "cap_offset" respectively.
-> Patch 6/8, 7/8 and 8/8: Minor rephrases and grammar edits.

Changes since v5:
-> Patch 7/8: Use macros to fetch IRT table length for DTE.

Changes since v4:
-> Maintain per IOMMU variable for mmio_offset and capability_offset.
-> Get intrrupt table length from DTE instead of using MAX_IRQS_PER_TABLE.

Changes since v3:
-> Patch 2/8: Print 64 bits instead of 32 bits for MMIO registers dump. Since most of
   the MMIO registers are 64 bits.
-> Patch 5/8: Update commit message with the need to add support for device_id input.
-> Patch 3/8: Throw error message mentioning valid capability offset range if user capability
   offset's input is not in valid range and input fails.

Changes since v2:
-> Patch 2/8 and 3/8: Use single file mmio and capability for input and output registers
   offset and register's dump respctively.
-> Patch 8/8: Correct path for files "irqtbl" and "devtbl" in Documentation

Changes since v1:
-> Patch 2/8 and 3/8: Use kstrtou32_from_user() instead of memdup_user_nul() --> kstrtou32()
-> Patch 4/8: Dump command buffer head and tail offset instead of head and tail pointer registers.
-> Patch 8/8: Fix bot reported warning on v1 patch series.

Dheeraj Kumar Srivastava (8):
  iommu/amd: Refactor AMD IOMMU debugfs initial setup
  iommu/amd: Add debugfs support to dump IOMMU MMIO registers
  iommu/amd: Add debugfs support to dump IOMMU Capability registers
  iommu/amd: Add debugfs support to dump IOMMU command buffer
  iommu/amd: Add support for device id user input
  iommu/amd: Add debugfs support to dump device table
  iommu/amd: Add debugfs support to dump IRT Table
  iommu/amd: Add documentation for AMD IOMMU debugfs support

 Documentation/ABI/testing/debugfs-amd-iommu | 114 ++++++
 drivers/iommu/amd/amd_iommu.h               |   4 +-
 drivers/iommu/amd/amd_iommu_types.h         |   9 +
 drivers/iommu/amd/debugfs.c                 | 378 +++++++++++++++++++-
 drivers/iommu/amd/init.c                    |   5 +-
 drivers/iommu/amd/iommu.c                   |   7 -
 6 files changed, 496 insertions(+), 21 deletions(-)
 create mode 100644 Documentation/ABI/testing/debugfs-amd-iommu

-- 
2.25.1
Re: [PATCH v7 0/8] Introduce debugfs support in IOMMU
Posted by Will Deacon 2 months, 3 weeks ago
On Wed, Jul 02, 2025 at 03:07:56PM +0530, Dheeraj Kumar Srivastava wrote:
> Introducing debugfs support in AMD/IOMMU driver that will allow
> userspace to dump below IOMMU information
> 1) MMIO and Capability register per IOMMU
> 2) Command buffer
> 3) Device table entry
> 4) Interrupt remapping table entry

Suravee, Vasant -- are you happy with this series now? I'll be closing
the IOMMU tree for 6.17 shortly and it would be a shame for this to
miss the cut given that it's got to v7 and Dheeraj has been receptive to
all the feedback so far.

Of course, if it's not ready then it's not ready, but I wanted to make
sure you had a chance to look at it before I switch to fixes-only.

Cheers,

Will
Re: [PATCH v7 0/8] Introduce debugfs support in IOMMU
Posted by Vasant Hegde 2 months, 3 weeks ago
Hi Will,

On 7/14/2025 5:47 PM, Will Deacon wrote:
> On Wed, Jul 02, 2025 at 03:07:56PM +0530, Dheeraj Kumar Srivastava wrote:
>> Introducing debugfs support in AMD/IOMMU driver that will allow
>> userspace to dump below IOMMU information
>> 1) MMIO and Capability register per IOMMU
>> 2) Command buffer
>> 3) Device table entry
>> 4) Interrupt remapping table entry
> 
> Suravee, Vasant -- are you happy with this series now? I'll be closing
> the IOMMU tree for 6.17 shortly and it would be a shame for this to
> miss the cut given that it's got to v7 and Dheeraj has been receptive to
> all the feedback so far.

Ack. This is mostly ready. Give me a day. I will review/test this series.

-Vasant


> 
> Of course, if it's not ready then it's not ready, but I wanted to make
> sure you had a chance to look at it before I switch to fixes-only.
> 
> Cheers,
> 
> Will
Re: [PATCH v7 0/8] Introduce debugfs support in IOMMU
Posted by Vasant Hegde 2 months, 3 weeks ago
Hi Will,

On 7/14/2025 6:24 PM, Vasant Hegde wrote:
> Hi Will,
> 
> On 7/14/2025 5:47 PM, Will Deacon wrote:
>> On Wed, Jul 02, 2025 at 03:07:56PM +0530, Dheeraj Kumar Srivastava wrote:
>>> Introducing debugfs support in AMD/IOMMU driver that will allow
>>> userspace to dump below IOMMU information
>>> 1) MMIO and Capability register per IOMMU
>>> 2) Command buffer
>>> 3) Device table entry
>>> 4) Interrupt remapping table entry
>>
>> Suravee, Vasant -- are you happy with this series now? I'll be closing
>> the IOMMU tree for 6.17 shortly and it would be a shame for this to
>> miss the cut given that it's got to v7 and Dheeraj has been receptive to
>> all the feedback so far.
> 
> Ack. This is mostly ready. Give me a day. I will review/test this series.

I have reviewed/tested this series. It looks good to me. Can you please pick
this series?

For entire series :

Reviewed-by: Vasant Hegde <vasant.hegde@amd.com>

-Vasant
Re: [PATCH v7 0/8] Introduce debugfs support in IOMMU
Posted by Will Deacon 2 months, 3 weeks ago
On Mon, Jul 14, 2025 at 06:24:06PM +0530, Vasant Hegde wrote:
> On 7/14/2025 5:47 PM, Will Deacon wrote:
> > On Wed, Jul 02, 2025 at 03:07:56PM +0530, Dheeraj Kumar Srivastava wrote:
> >> Introducing debugfs support in AMD/IOMMU driver that will allow
> >> userspace to dump below IOMMU information
> >> 1) MMIO and Capability register per IOMMU
> >> 2) Command buffer
> >> 3) Device table entry
> >> 4) Interrupt remapping table entry
> > 
> > Suravee, Vasant -- are you happy with this series now? I'll be closing
> > the IOMMU tree for 6.17 shortly and it would be a shame for this to
> > miss the cut given that it's got to v7 and Dheeraj has been receptive to
> > all the feedback so far.
> 
> Ack. This is mostly ready. Give me a day. I will review/test this series.

Thank you, Vasant!

Will
Re: [PATCH v7 0/8] Introduce debugfs support in IOMMU
Posted by Will Deacon 2 months, 3 weeks ago
On Wed, 02 Jul 2025 15:07:56 +0530, Dheeraj Kumar Srivastava wrote:
> Introducing debugfs support in AMD/IOMMU driver that will allow
> userspace to dump below IOMMU information
> 1) MMIO and Capability register per IOMMU
> 2) Command buffer
> 3) Device table entry
> 4) Interrupt remapping table entry
> 
> [...]

Applied to iommu (amd/amd-vi), thanks!

[1/8] iommu/amd: Refactor AMD IOMMU debugfs initial setup
      https://git.kernel.org/iommu/c/ad48b1dd14fb
[2/8] iommu/amd: Add debugfs support to dump IOMMU MMIO registers
      https://git.kernel.org/iommu/c/7a4ee419e8c1
[3/8] iommu/amd: Add debugfs support to dump IOMMU Capability registers
      https://git.kernel.org/iommu/c/4d9c5d5a1dc9
[4/8] iommu/amd: Add debugfs support to dump IOMMU command buffer
      https://git.kernel.org/iommu/c/fb3af1f4fefb
[5/8] iommu/amd: Add support for device id user input
      https://git.kernel.org/iommu/c/2e98940f123d
[6/8] iommu/amd: Add debugfs support to dump device table
      https://git.kernel.org/iommu/c/b48457782445
[7/8] iommu/amd: Add debugfs support to dump IRT Table
      https://git.kernel.org/iommu/c/349ad6d5263a
[8/8] iommu/amd: Add documentation for AMD IOMMU debugfs support
      https://git.kernel.org/iommu/c/39215bb3b0d9

Cheers,
-- 
Will

https://fixes.arm64.dev
https://next.arm64.dev
https://will.arm64.dev