[PATCH v4 0/3] hw/arm/virt: Remove the lower bound of HighMem IO Regions

Akihiko Odaki posted 3 patches 2 hours ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20260125-virt-v4-0-00d726b27224@rsg.ci.i.u-tokyo.ac.jp
Maintainers: Peter Maydell <peter.maydell@linaro.org>, "Michael S. Tsirkin" <mst@redhat.com>, Igor Mammedov <imammedo@redhat.com>, Ani Sinha <anisinha@redhat.com>, Fabiano Rosas <farosas@suse.de>, Laurent Vivier <lvivier@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>
include/hw/arm/virt.h                            |   1 +
hw/arm/virt.c                                    |  16 ++++++++++++----
tests/qtest/libqos/generic-pcihost.c             |   2 +-
tests/data/acpi/aarch64/virt/DSDT                | Bin 5337 -> 5333 bytes
tests/data/acpi/aarch64/virt/DSDT.acpihmatvirt   | Bin 5423 -> 5419 bytes
tests/data/acpi/aarch64/virt/DSDT.acpipcihp      | Bin 6246 -> 6242 bytes
tests/data/acpi/aarch64/virt/DSDT.hpoffacpiindex | Bin 5391 -> 5387 bytes
tests/data/acpi/aarch64/virt/DSDT.memhp          | Bin 6698 -> 6698 bytes
tests/data/acpi/aarch64/virt/DSDT.pxb            | Bin 7812 -> 7808 bytes
tests/data/acpi/aarch64/virt/DSDT.smmuv3-dev     | Bin 10274 -> 10270 bytes
tests/data/acpi/aarch64/virt/DSDT.smmuv3-legacy  | Bin 10274 -> 10270 bytes
tests/data/acpi/aarch64/virt/DSDT.topology       | Bin 5539 -> 5535 bytes
tests/data/acpi/aarch64/virt/DSDT.viot           | Bin 5354 -> 5350 bytes
tests/data/acpi/aarch64/virt/MCFG                | Bin 60 -> 60 bytes
tests/data/acpi/aarch64/virt/MCFG.memhp          | Bin 0 -> 60 bytes
15 files changed, 14 insertions(+), 5 deletions(-)
[PATCH v4 0/3] hw/arm/virt: Remove the lower bound of HighMem IO Regions
Posted by Akihiko Odaki 2 hours ago
Remove the lower bound of the Highmem IO Regions' addresses for the
latest machine version to increase the chance to fit the regions in the
PA space.

The lower bound was especially problematic when using virt-install on
Apple M2. virt-install 5.0.0 adds multiple pcie-root-port devices that
require sufficient space in the ECAM region. However, the Highmem ECAM
region did not fit in the limited PA space on the hardware, and the ECAM
region size was limited to 16 MiB. If virt-install had added more than
16 devices to the root bridge, the region overflowed, which prevented
edk2-stable202505 from scanning PCI devices, including the boot disk,
causing boot failures.

Ideally, a virtual machine with more than 16 devices added to the root
bridge should just work so that users and management layers do not have
to care whether they use constrained hardware.

The base address of the Highmem IO Regions was fixed when commit
f90747c4e8fb ("hw/arm/virt: GICv3 DT node with one or two redistributor
regions") added the first Highmem IO Region. Later, commit 957e32cffa57
("hw/arm/virt: Dynamic memory map depending on RAM requirements")
allowed moving the Highmem IO Regions to higher addresses to accommodate
RAM more than 255 GiB, but the lower bound remained to keep the legacy
memory map.

Remove the lower bound for the latest machine version to accommodate
more devices with the root bridge. Keeping the lower bound for the old
machine versions ensures the compatibility is still maintained.

The hardcoded memory map in tests/qtest/libqos/generic-pcihost.c is also
updated.

Signed-off-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
---
Changes in v4:
- Rebased.
- Edited the patch message to avoid confusing git am.
- Link to v3: https://lore.kernel.org/qemu-devel/20251027-virt-v3-0-fa2a2f37e32d@rsg.ci.i.u-tokyo.ac.jp

Changes in v3:
- Fixed test failures reported by Peter Maydell.
- Link to v2: https://lore.kernel.org/qemu-devel/20250901-virt-v2-1-ac2379402c80@rsg.ci.i.u-tokyo.ac.jp

Changes in v2:
- Rebased.
- Link to v1: https://lore.kernel.org/qemu-devel/20250728-virt-v1-1-0ab9682262c8@rsg.ci.i.u-tokyo.ac.jp

---
Akihiko Odaki (3):
      test/acpi: aarch64/virt: Allow DSDT and MCFG changes
      hw/arm/virt: Remove the lower bound of HighMem IO Regions
      test/acpi: aarch64/virt: Update golden masters for DSDT and MCFG

 include/hw/arm/virt.h                            |   1 +
 hw/arm/virt.c                                    |  16 ++++++++++++----
 tests/qtest/libqos/generic-pcihost.c             |   2 +-
 tests/data/acpi/aarch64/virt/DSDT                | Bin 5337 -> 5333 bytes
 tests/data/acpi/aarch64/virt/DSDT.acpihmatvirt   | Bin 5423 -> 5419 bytes
 tests/data/acpi/aarch64/virt/DSDT.acpipcihp      | Bin 6246 -> 6242 bytes
 tests/data/acpi/aarch64/virt/DSDT.hpoffacpiindex | Bin 5391 -> 5387 bytes
 tests/data/acpi/aarch64/virt/DSDT.memhp          | Bin 6698 -> 6698 bytes
 tests/data/acpi/aarch64/virt/DSDT.pxb            | Bin 7812 -> 7808 bytes
 tests/data/acpi/aarch64/virt/DSDT.smmuv3-dev     | Bin 10274 -> 10270 bytes
 tests/data/acpi/aarch64/virt/DSDT.smmuv3-legacy  | Bin 10274 -> 10270 bytes
 tests/data/acpi/aarch64/virt/DSDT.topology       | Bin 5539 -> 5535 bytes
 tests/data/acpi/aarch64/virt/DSDT.viot           | Bin 5354 -> 5350 bytes
 tests/data/acpi/aarch64/virt/MCFG                | Bin 60 -> 60 bytes
 tests/data/acpi/aarch64/virt/MCFG.memhp          | Bin 0 -> 60 bytes
 15 files changed, 14 insertions(+), 5 deletions(-)
---
base-commit: d03c3e522eb0696dcfc9c2cf643431eaaf51ca0f
change-id: 20250728-virt-833dafa6c11b

Best regards,
--  
Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
Re: [PATCH v4 0/3] hw/arm/virt: Remove the lower bound of HighMem IO Regions
Posted by Mohamed Mediouni an hour ago

> On 25. Jan 2026, at 06:46, Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp> wrote:
> 
> Remove the lower bound of the Highmem IO Regions' addresses for the
> latest machine version to increase the chance to fit the regions in the
> PA space.
> 
> The lower bound was especially problematic when using virt-install on
> Apple M2. virt-install 5.0.0 adds multiple pcie-root-port devices that
> require sufficient space in the ECAM region. However, the Highmem ECAM
> region did not fit in the limited PA space on the hardware, and the ECAM
> region size was limited to 16 MiB. If virt-install had added more than
> 16 devices to the root bridge, the region overflowed, which prevented
> edk2-stable202505 from scanning PCI devices, including the boot disk,
> causing boot failures.
> 
> Ideally, a virtual machine with more than 16 devices added to the root
> bridge should just work so that users and management layers do not have
> to care whether they use constrained hardware.
> 
> The base address of the Highmem IO Regions was fixed when commit
> f90747c4e8fb ("hw/arm/virt: GICv3 DT node with one or two redistributor
> regions") added the first Highmem IO Region. Later, commit 957e32cffa57
> ("hw/arm/virt: Dynamic memory map depending on RAM requirements")
> allowed moving the Highmem IO Regions to higher addresses to accommodate
> RAM more than 255 GiB, but the lower bound remained to keep the legacy
> memory map.
> 
> Remove the lower bound for the latest machine version to accommodate
> more devices with the root bridge. Keeping the lower bound for the old
> machine versions ensures the compatibility is still maintained.
> 
> The hardcoded memory map in tests/qtest/libqos/generic-pcihost.c is also
> updated.
> 
> Signed-off-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
> ---
> Changes in v4:
> - Rebased.
> - Edited the patch message to avoid confusing git am.
> - Link to v3: https://lore.kernel.org/qemu-devel/20251027-virt-v3-0-fa2a2f37e32d@rsg.ci.i.u-tokyo.ac.jp
> 
> Changes in v3:
> - Fixed test failures reported by Peter Maydell.
> - Link to v2: https://lore.kernel.org/qemu-devel/20250901-virt-v2-1-ac2379402c80@rsg.ci.i.u-tokyo.ac.jp
> 
> Changes in v2:
> - Rebased.
> - Link to v1: https://lore.kernel.org/qemu-devel/20250728-virt-v1-1-0ab9682262c8@rsg.ci.i.u-tokyo.ac.jp
> 
> ---
> Akihiko Odaki (3):
>      test/acpi: aarch64/virt: Allow DSDT and MCFG changes
>      hw/arm/virt: Remove the lower bound of HighMem IO Regions
>      test/acpi: aarch64/virt: Update golden masters for DSDT and MCFG
Hi,

Would it be a good idea to have a new test configuration that keeps the old memory map? To make sure that older machine versions don’t regress

Thank you,
-Mohamed
> 
> include/hw/arm/virt.h                            |   1 +
> hw/arm/virt.c                                    |  16 ++++++++++++----
> tests/qtest/libqos/generic-pcihost.c             |   2 +-
> tests/data/acpi/aarch64/virt/DSDT                | Bin 5337 -> 5333 bytes
> tests/data/acpi/aarch64/virt/DSDT.acpihmatvirt   | Bin 5423 -> 5419 bytes
> tests/data/acpi/aarch64/virt/DSDT.acpipcihp      | Bin 6246 -> 6242 bytes
> tests/data/acpi/aarch64/virt/DSDT.hpoffacpiindex | Bin 5391 -> 5387 bytes
> tests/data/acpi/aarch64/virt/DSDT.memhp          | Bin 6698 -> 6698 bytes
> tests/data/acpi/aarch64/virt/DSDT.pxb            | Bin 7812 -> 7808 bytes
> tests/data/acpi/aarch64/virt/DSDT.smmuv3-dev     | Bin 10274 -> 10270 bytes
> tests/data/acpi/aarch64/virt/DSDT.smmuv3-legacy  | Bin 10274 -> 10270 bytes
> tests/data/acpi/aarch64/virt/DSDT.topology       | Bin 5539 -> 5535 bytes
> tests/data/acpi/aarch64/virt/DSDT.viot           | Bin 5354 -> 5350 bytes
> tests/data/acpi/aarch64/virt/MCFG                | Bin 60 -> 60 bytes
> tests/data/acpi/aarch64/virt/MCFG.memhp          | Bin 0 -> 60 bytes
> 15 files changed, 14 insertions(+), 5 deletions(-)
> ---
> base-commit: d03c3e522eb0696dcfc9c2cf643431eaaf51ca0f
> change-id: 20250728-virt-833dafa6c11b
> 
> Best regards,
> --  
> Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
> 
> 
Re: [PATCH v4 0/3] hw/arm/virt: Remove the lower bound of HighMem IO Regions
Posted by Akihiko Odaki 54 minutes ago
On 2026/01/25 16:23, Mohamed Mediouni wrote:
> 
> 
>> On 25. Jan 2026, at 06:46, Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp> wrote:
>>
>> Remove the lower bound of the Highmem IO Regions' addresses for the
>> latest machine version to increase the chance to fit the regions in the
>> PA space.
>>
>> The lower bound was especially problematic when using virt-install on
>> Apple M2. virt-install 5.0.0 adds multiple pcie-root-port devices that
>> require sufficient space in the ECAM region. However, the Highmem ECAM
>> region did not fit in the limited PA space on the hardware, and the ECAM
>> region size was limited to 16 MiB. If virt-install had added more than
>> 16 devices to the root bridge, the region overflowed, which prevented
>> edk2-stable202505 from scanning PCI devices, including the boot disk,
>> causing boot failures.
>>
>> Ideally, a virtual machine with more than 16 devices added to the root
>> bridge should just work so that users and management layers do not have
>> to care whether they use constrained hardware.
>>
>> The base address of the Highmem IO Regions was fixed when commit
>> f90747c4e8fb ("hw/arm/virt: GICv3 DT node with one or two redistributor
>> regions") added the first Highmem IO Region. Later, commit 957e32cffa57
>> ("hw/arm/virt: Dynamic memory map depending on RAM requirements")
>> allowed moving the Highmem IO Regions to higher addresses to accommodate
>> RAM more than 255 GiB, but the lower bound remained to keep the legacy
>> memory map.
>>
>> Remove the lower bound for the latest machine version to accommodate
>> more devices with the root bridge. Keeping the lower bound for the old
>> machine versions ensures the compatibility is still maintained.
>>
>> The hardcoded memory map in tests/qtest/libqos/generic-pcihost.c is also
>> updated.
>>
>> Signed-off-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
>> ---
>> Changes in v4:
>> - Rebased.
>> - Edited the patch message to avoid confusing git am.
>> - Link to v3: https://lore.kernel.org/qemu-devel/20251027-virt-v3-0-fa2a2f37e32d@rsg.ci.i.u-tokyo.ac.jp
>>
>> Changes in v3:
>> - Fixed test failures reported by Peter Maydell.
>> - Link to v2: https://lore.kernel.org/qemu-devel/20250901-virt-v2-1-ac2379402c80@rsg.ci.i.u-tokyo.ac.jp
>>
>> Changes in v2:
>> - Rebased.
>> - Link to v1: https://lore.kernel.org/qemu-devel/20250728-virt-v1-1-0ab9682262c8@rsg.ci.i.u-tokyo.ac.jp
>>
>> ---
>> Akihiko Odaki (3):
>>       test/acpi: aarch64/virt: Allow DSDT and MCFG changes
>>       hw/arm/virt: Remove the lower bound of HighMem IO Regions
>>       test/acpi: aarch64/virt: Update golden masters for DSDT and MCFG
> Hi,
> 
> Would it be a good idea to have a new test configuration that keeps the old memory map? To make sure that older machine versions don’t regress

It is a nice suggestion. I will add one with the next version.

Regards,
Akihiko Odaki