For better compatibility with old linux kernels, see source code comment.
Related (same problem in ovmf): https://github.com/tianocore/edk2/commit/c1e853769046
Cc: Claudio Fontana cfontana@suse.de Signed-off-by: Gerd Hoffmann kraxel@redhat.com --- src/fw/paravirt.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/src/fw/paravirt.c b/src/fw/paravirt.c index e5d4eca0cb5a..a2c9c64d5e78 100644 --- a/src/fw/paravirt.c +++ b/src/fw/paravirt.c @@ -182,6 +182,14 @@ static void physbits(int qemu_quirk) __func__, signature, pae ? "yes" : "no", CPULongMode ? "yes" : "no", physbits, valid ? "yes" : "no");
+ if (valid && physbits > 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 + dprintf(1, "%s: using phys-bits=46 (old linux kernel compatibility)\n", __func__); + physbits = 46; + } + if (valid) CPUPhysBits = physbits; }