[REGRESSION] iommu/amd: "Fix premature break in init_iommu_one()" causes early boot hang

Andreas Juch <[email protected]>
Newsgroups dev.linux.lists.regressions,dev.linux.lists.iommu,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
Hello,

I noticed that one of my NixOS sytems failed to boot with kernel 
6.18.40. The
older 6.18.39 booted fine. A full git bisect of v6.18.39..v6.18.40 
identified
the following commit as the first bad commit:

   dc266f6c4e2628576ab33042b6b2a12480220026
   iommu/amd: Fix premature break in init_iommu_one()

The visible symptom is a black screen immediately after systemd-boot. The
machine also remains unreachable over SSH and leaves no persistent 
journal entry
for the failed boot. A reset or power cycle is required.

I reverted that single commit, built the kernel again and the machine 
booted, so
I'm quite sure that I found the right commit.

System information:

ASRockRack B550D4-4L
BIOS P1.10 (06/28/2021)

I'm no expert at all, but my research found that the following 
information might
be relevant:

   journalctl -W -b -k --no-pager | rg -i 'AMD-Vi|AMD IOMMU|IOMMU|IVRS|IVHD'
   Aug 21 22:24:17 kernel: ACPI: IVRS 0x00000000BB062000 0000D0 (v02 
AMD    AmdTable 00000001 AMD  00000001)
   Aug 21 22:24:17 kernel: ACPI: Reserving IVRS table memory at [mem 
0xbb062000-0xbb0620cf]
   Aug 21 22:24:17 kernel: AMD-Vi: Using global IVHD EFR:0x0, EFR2:0x0
   Aug 21 22:24:17 kernel: iommu: Default domain type: Translated
   Aug 21 22:24:17 kernel: iommu: DMA domain TLB invalidation policy: 
lazy mode
   Aug 21 22:24:17 kernel: pci 0000:00:01.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:00:01.2: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:00:02.0: Adding to iommu group 1
   Aug 21 22:24:17 kernel: pci 0000:00:03.0: Adding to iommu group 2
   Aug 21 22:24:17 kernel: pci 0000:00:04.0: Adding to iommu group 3
   Aug 21 22:24:17 kernel: pci 0000:00:05.0: Adding to iommu group 4
   Aug 21 22:24:17 kernel: pci 0000:00:07.0: Adding to iommu group 5
   Aug 21 22:24:17 kernel: pci 0000:00:07.1: Adding to iommu group 6
   Aug 21 22:24:17 kernel: pci 0000:00:08.0: Adding to iommu group 7
   Aug 21 22:24:17 kernel: pci 0000:00:08.1: Adding to iommu group 8
   Aug 21 22:24:17 kernel: pci 0000:00:14.0: Adding to iommu group 9
   Aug 21 22:24:17 kernel: pci 0000:00:14.3: Adding to iommu group 9
   Aug 21 22:24:17 kernel: pci 0000:00:18.0: Adding to iommu group 10
   Aug 21 22:24:17 kernel: pci 0000:00:18.1: Adding to iommu group 10
   Aug 21 22:24:17 kernel: pci 0000:00:18.2: Adding to iommu group 10
   Aug 21 22:24:17 kernel: pci 0000:00:18.3: Adding to iommu group 10
   Aug 21 22:24:17 kernel: pci 0000:00:18.4: Adding to iommu group 10
   Aug 21 22:24:17 kernel: pci 0000:00:18.5: Adding to iommu group 10
   Aug 21 22:24:17 kernel: pci 0000:00:18.6: Adding to iommu group 10
   Aug 21 22:24:17 kernel: pci 0000:00:18.7: Adding to iommu group 10
   Aug 21 22:24:17 kernel: pci 0000:02:00.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:02:00.1: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:02:00.2: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:20:00.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:20:01.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:20:02.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:20:03.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:20:04.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:20:08.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:20:09.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:21:00.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:22:00.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:23:00.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:24:00.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:25:00.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:29:00.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:2a:00.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:2b:00.0: Adding to iommu group 0
   Aug 21 22:24:17 kernel: pci 0000:2c:00.0: Adding to iommu group 11
   Aug 21 22:24:17 kernel: pci 0000:2d:00.0: Adding to iommu group 12
   Aug 21 22:24:17 kernel: pci 0000:2d:00.1: Adding to iommu group 13
   Aug 21 22:24:17 kernel: pci 0000:2d:00.3: Adding to iommu group 14
   Aug 21 22:24:17 kernel: pci 0000:2d:00.4: Adding to iommu group 15
   Aug 21 22:24:17 kernel: AMD-Vi: Extended features (0x58f77e022294881, 
0x0): PreF GA GA_vAPIC
   Aug 21 22:24:17 kernel: AMD-Vi: Interrupt remapping enabled

And the output of the decoded IVRS table, captured by `acpidump -n IVRS -b`:

   00000000  49 56 52 53 d0 00 00 00  02 e2 41 4d 44 20 20 00 
|IVRS......AMD  .|
   00000010  41 6d 64 54 61 62 6c 65  01 00 00 00 41 4d 44 20 
|AmdTable....AMD |
   00000020  01 00 00 00 41 30 20 00  00 00 00 00 00 00 00 00 |....A0 
.........|
   00000030  10 b0 48 00 02 00 40 00  00 00 50 fd 00 00 00 00 
|[email protected].....|
   00000040  00 00 00 00 2e 8f 04 80  03 08 00 00 04 fe ff 00 
|................|
   00000050  43 00 ff 00 00 a5 00 00  04 ff ff 00 00 00 00 00 
|C...............|
   00000060  48 00 00 00 00 a0 00 02  48 00 00 d7 0d a0 00 01 
|H.......H.......|
   00000070  48 00 00 00 0e 01 00 01  11 b0 58 00 02 00 40 00 
|H.........X...@.|
   00000080  00 00 50 fd 00 00 00 00  00 00 00 00 00 02 04 00 
|..P.............|
   00000090  5a 4a 29 22 ef 77 8f 05  00 00 00 00 00 00 00 00 
|ZJ)".w..........|
   000000a0  03 08 00 00 04 fe ff 00  43 00 ff 00 00 a5 00 00 
|........C.......|
   000000b0  04 ff ff 00 00 00 00 00  48 00 00 00 00 a0 00 02 
|........H.......|
   000000c0  48 00 00 d7 0d a0 00 01  48 00 00 00 0e 01 00 01 
|H.......H.......|
   000000d0

The relevant part (after decoding with `iasl -d ivrs.dat`):

   [090h 0144 008h]                   EFR Image : 058F77EF22294A5A

I'll provide any required details and test patches!

Thanks for your work, it's very appreciated!

Andreas
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.