On Mon, 17 Jun 2024 16:04:29 +0200 Gerd Hoffmann kraxel@redhat.com wrote:
Hi,
While it's possible to tweak MMIO windows size on QEMU CLI, it's inconvenient and that cascades over to upper layers (libvirt, whatnot on top of that) eventually ending up at end-user somewhere if that config change supported.
So this patch would 'break' pci hotplug on modern linux guest which could or couldn't be fixed by enduser (depending on used sw stack).
Is there any other way to fix old 32 linux guest issues while keeping modern ones happy as well?
Well, the fundamental issue is that seabios simply doesn't know whenever it is booting a 32-bit or 64-bit os. So we are doing heuristics for the default configuration, trying to make things work well without manual invention in as many cases as possible. Because any kind of manual configuration has the drawbacks you've just outlined above.
One hint seabios takes is long mode support. Booting 32-bit guests with 'qemu -cpu $model,lm=off' will disable the 64-bit mmio window even in case there is alot of memory present. But that is manual configuration too ...
another manual way to boot such guest could be to force pci realloc on kernel CLI.
or use some older SeaBIOS version where it doesn't assign huge 64-bit MMIO windows.
Maybe fix guest kernel (commit message isn't clear on what exactly fails on guest side)
I'm open to ideas, but it's a hard problem unfortunately.
I don't have any (it is not the issue that qemu/seabios can reasonably deal with, it's more like upper layers problem to properly configure VM according to installed OS).
Regardless of which way is chosen some users will suffer one way or another. My vote would be to keep current behavior so 'modern' guests would work without issues.
old 32-bit PAE ones can still use workaround(s) to deal with the problem.
take care, Gerd