On Wed, Jun 19, 2024 at 11:21:14AM GMT, John Levon wrote:
> Older 32-bit Linux VMs (including Ubuntu 16.10) have issues with the
> 64-bit pci io window, failing during boot with errors like:

Well.  Why people would use *that* ubuntu version is not clear to me.
It's *loooooong* out of support.  Even the LTS version from that year
(16.04) is not supported any more.  But it is at least available for
download still,  so I gave it a spin.

Turns out it apparently can't deal with PCI bars mapped above 16TB (aka
44 phys-bits).  Test patch below.

take care,
  Gerd

diff --git a/src/fw/pciinit.c b/src/fw/pciinit.c
index bb44dc296047..a43876a931c9 100644
--- a/src/fw/pciinit.c
+++ b/src/fw/pciinit.c
@@ -1189,11 +1189,16 @@ pci_setup(void)
 
     if (CPUPhysBits) {
         pci_mem64_top = 1LL << CPUPhysBits;
-        if (CPUPhysBits > 46) {
-            // Old linux kernels have trouble dealing with more than 46
-            // phys-bits, so avoid that for now.  Seems to be a bug in the
-            // virtio-pci driver.  Reported: centos-7, ubuntu-18.04
-            pci_mem64_top = 1LL << 46;
+        if (CPUPhysBits > 44) {
+            // Old linux kernels have trouble dealing with more than 44/46
+            // phys-bits. Seems to be a bug in the virtio-pci driver.
+            //   46:  centos-7, ubuntu-18.04
+            //   44:  ubuntu-16.04
+            // Limit the used address space to mitigate the bug, except we are
+            // running in a guest with more than 1TB of memory installed.
+            if (RamSizeOver4G < (1LL << 40)) {
+                pci_mem64_top = 1LL << 44;
+            }
         }
     }
 

_______________________________________________
SeaBIOS mailing list -- seabios@seabios.org
To unsubscribe send an email to seabios-le...@seabios.org

Reply via email to