"Calgary: Unable to locate Rio Grande table in EBDA" <- what does this mean?
When I boot my system, I get the following message:
[Sat Oct 26 20:34:25 2019] Calgary: detecting Calgary via BIOS EBDA area
[Sat Oct 26 20:34:25 2019] Calgary: Unable to locate Rio Grande table in EBDA - bailing!
- What is “Calgary”?
- What is the “Rio Grande table”?
- Why does it need to be located in EBDA, and given that it does – why is my kernel failing to do so?
- What are the consequences of this failure?
I’m running Devuan 3 (Beowulf) on an i5-7600K CPU on an MSI Z170 PRO GAMING motherboard.
It seems that Calgary is a family of IOMMUs, used in most IBM X-Series (i.e. X86_64) blades and motherboards – as of 2008 (see here). The Rio Grande table was/is an information table within the Extended BIOS Data Area that tells the operating system where to find the Calgary IOMMU(s) (thanks @telcoM).
As you, OP, are not using such a machine, you might consider trying to disable the search for it in the kernel compilation parameters. As @jmullee reminds us, here are the relevant Linux kernel configuration parameters:
you would change these from
these are the relevant kernel source config options
The search at boot for usb devices to connect and memory map will be disabled if you remove the option from a kernel config when recompiling.
So if you connect to other devices (usb drives, screens with memory network stacks etc) at boot with certain IBM motherboards like the one on my T500 laptop, it will not be mapped by the kernel and you will have to do it manually.
Could only be a security issue if you put some piece of malicious hardware on the usb or network connect by usb to a malicious network on it. Otherwise, leaving the kernel config at the current default is harmless.
The IBM Rio Grande and equivalent Windows kernel configuration feature has most likely already been used by bad actors on Windows, Linux kernel based distributions. Who knows?
- A HP Z640 Workstation, which uses an Intel Corporation C610/X99 series chipset
- Dual Intel(R) Xeon(R) CPU E5-2620 v3 processors
- Running Ubuntu 18.04.6 LTS with a
4.15.0-200-genericKernel. The Kernel configuration has:
$ grep CALGARY /boot/config-`uname -r` CONFIG_CALGARY_IOMMU=y CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT=y
Noticed that the following was appearing in
Dec 28 07:42:04 Haswell-Ubuntu kernel: [ 0.000000] Calgary: detecting Calgary via BIOS EBDA area
Dec 28 07:42:04 Haswell-Ubuntu kernel: [ 0.000000] Calgary: Unable to locate Rio Grande table in EBDA - bailing!
These messages are reported by the pci-calgary_64.c source file in the Kernel. From the structure of the
detect_calgary function the Calgary: detecting Calgary via BIOS EBDA area and Calgary: Unable to locate Rio Grande table in EBDA – bailing! messages are reported before the code has scanned the PCI bus for Calgary IOMMU devices, which have the vendor ID as
As a result, believe the messages are spurious and will occur in a PC which doesn’t have a BIOS which reports the BIOS EBDA area for a Calgary IOMMU. From the comments in the source file think the Calgary IOMMU is only used in IBM x3950 based systems.
Perhaps it would have been less confusing if
detect_calgary function first scanned the PCI bus for the Calgary IOMMU, and only then checked for the BIOS EBDA area.
As a side note, I only noticed the messages related to the Calgary IOMMU when enabling the Intel IOMMU in the PC. After the Intel IOMMU had been successfully enabled dmesg is still reporting the messages about the Calgary IOMMU, but as per the above analysis the messages are spurious and can be ignored.