IOAPIC[0] not in IVRS table

I have a fresh Ubuntu install from USB. When I boot the PC it takes me straight to GNU Grub, when I select Ubuntu I get the following messages.

[Firmware Bug]: AMD-Vi: IOAPIC[0] not in IVRS table
[Firmware Bug]: AMD-Vi: No southbridge IOAPIC found in IVRS table
AMD-Vi: Disabling interrupt remapping

I can get to the Ubuntu desktop via "Advanced options for Ubuntu" > "Ubuntu, with Linux 4.2.0-30-generic (recovery mode)" > "resume" but the CPU runs at nearly 100% and is not sustinable.

PC Specs:

  • AMD A6-6400K

  • MSI A68HI ​Mini ITX F​M2+ Mother​board


The reason the CPU is all the time 100% used I think it is different than the message you are seeing.

About the error message

Now about AMD-Vi: IOAPIC[0] not in IVRS table and AMD-Vi: No southbridge IOAPIC found in IVRS tableerrors. Those messages mean that your CMOS/BIOS setup is configured to enable IOMMU, but BIOS lacks IVRS table that is describing which is the address of IOMMU and SMBus Controller. IVRS = I/O Virtualization Reporting Structure. See also: http://support.amd.com/TechDocs/48882_IOMMU.pdf

What is IOMMU?

IOMMU is a hardware unit that today is part of CPU. It allows to map device-visible virtual addresses to physical addresses.

Why IOMMU?

  1. IOMMU allows to have better security and protect your computer from some attacks from someone having access to some busses like PCIe and firewire.
  2. you can expose a physical PCIe device to a VM (PCI passthrough).
  3. it is required for SR-IOV (VNF)

Fixing "AMD-Vi: IOAPIC[0] not in IVRS table"

  1. Update motherboard firmware

The proper fix should come from hardware manufacturer of the motherboard. So if you have a BIOS/firmware update for your motherboard, install it as this might fix the problem. Unfortunately for my motherboard (Asus Crosshair V Formula) the IVRS is broken even in the latest BIOS/firmware update (version 1703, Release Date: 10/17/2012).

  1. Linux workarround

If the manufacturer of the MB is not offering a fix, you can fix this in Linux by specifying in the kernel startup parameters where those devices are located using ivrs_ioapic option.

Here are the steps to do it. For more details see: https://ubuntuforums.org/showthread.php?t=2254677

Boot your kernel by adding amd_iommu_dump=1 to the kernel options. You can do this via grub menu during boot.

In the kernel log, you will see some lines like:

$ dmesg |grep 'DEV_SPECIAL(IOAPIC\|not in IVRS table'
[    0.133756] AMD-Vi:   DEV_SPECIAL(IOAPIC[0])     devid: 00:14.0
[    0.133995] AMD-Vi:   DEV_SPECIAL(IOAPIC[255])       devid: 00:00.1
[    0.134116] [Firmware Bug]: AMD-Vi: IOAPIC[5] not in IVRS table
[    0.134235] [Firmware Bug]: AMD-Vi: IOAPIC[6] not in IVRS table
$ 

Write down the indexes from IOAPIC. In this case those are 5 and 6. Note the devid, where 00:14.0 is ok and 00:00.1 is incorrect.

Search for the bus address for those devices and write down the addresses (00:00.2 and 00:14.0)

$ lspci -nn | egrep "SMBus | IOMMU"
00:00.2 IOMMU [0806]: Advanced Micro Devices, Inc. [AMD/ATI] RD890S/RD990 I/O Memory Management Unit (IOMMU) [1002:5a23]
00:14.0 SMBus [0c05]: Advanced Micro Devices, Inc. [AMD/ATI] SBx00 SMBus Controller [1002:4385] (rev 42)
$ 

Now add as kernel parameters: ivrs_ioapic[5]=00:14.0 ivrs_ioapic[6]=00:00.2 where index 5 and 6 were found in dmesg output and the values are from lspci output. You can make this permanent by editing /etc/default/grub file, then running grub2-mkconfig -o /boot/grub2/grub.cfg.

  1. Disable IOMMU in UEFI/BIOS configuration

Disabling IOMMU has a small performance benefit. But it is undesirable to disable it for security and stability of the system. IOMMU is required for certain virtualization setups (PCI pass-through, SR-IOV) and disabling it is not an option.


I updated the firmware of my motherboard and this has appeared to have fixed it.