ACPI MADT advertises GITS even when disabled
Host environment
-
Operating system: Linux
-
OS/kernel version: Slackware (Linux 6.14.0)
-
Architecture: Host:x86 Guest:Arm
-
QEMU flavor: qemu-system-aarch64
-
QEMU version: 9.2.3
-
QEMU command line:
./qemu-system-aarch64 -cpu max -M virt,virtualization=on,secure=off,gic-version=max,its=off,iommu=smmuv3
Emulated/Virtualized environment
- Operating system: Custom OS
- OS/kernel version: Custom Version
- Architecture: Arm (aarch64)
Description of problem
As per the command line given above, QEMU shall emulate a GICv4 without GIC Interrupt Translation Service (GITS).
The following happens:
- ACPI incorrectly lists a GITS (type 0xf) structure in the MADT with GITS MMIO Base = 0x8080000
- The OS reads that structure and interprets it to mean a GITS is present at the given MMIO address
- Subsequent access to GITS MMIO causes a data abort (0x25) because QEMU doesn't emulate a GITS (as requested)
The bug is thus that QEMU wrongly advertises GITS as present (via the MADT) when it is in fact absent.
Steps to reproduce
- Disable GITS emulation by passing
its=offon the QEMU command line - Check if a GITS structure is listed in the ACPI MADT (must be present in ACPI MADT only if GITS is enabled and absent otherwise)
Additional information
When booting with its=on (default), everything works as expected.