qemu/tests/qtest
Ani Sinha cf0386509e hw/i386/pc: improve physical address space bound check for 32-bit x86 systems
32-bit x86 systems do not have a reserved memory for hole64. On those 32-bit
systems without PSE36 or PAE CPU features, hotplugging memory devices are not
supported by QEMU as QEMU always places hotplugged memory above 4 GiB boundary
which is beyond the physical address space of the processor. Linux guests also
does not support memory hotplug on those systems. Please see Linux
kernel commit b59d02ed08690 ("mm/memory_hotplug: disable the functionality
for 32b") for more details.

Therefore, the maximum limit of the guest physical address in the absence of
additional memory devices effectively coincides with the end of
"above 4G memory space" region for 32-bit x86 without PAE/PSE36. When users
configure additional memory devices, after properly accounting for the
additional device memory region to find the maximum value of the guest
physical address, the address will be outside the range of the processor's
physical address space.

This change adds improvements to take above into consideration.

For example, previously this was allowed:

$ ./qemu-system-x86_64 -cpu pentium -m size=10G

With this change now it is no longer allowed:

$ ./qemu-system-x86_64 -cpu pentium -m size=10G
qemu-system-x86_64: Address space limit 0xffffffff < 0x2bfffffff phys-bits too low (32)

However, the following are allowed since on both cases physical address
space of the processor is 36 bits:

$ ./qemu-system-x86_64 -cpu pentium2 -m size=10G
$ ./qemu-system-x86_64 -cpu pentium,pse36=on -m size=10G

For 32-bit, without PAE/PSE36, hotplugging additional memory is no longer allowed.

$ ./qemu-system-i386 -m size=1G,maxmem=3G,slots=2
qemu-system-i386: Address space limit 0xffffffff < 0x1ffffffff phys-bits too low (32)
$ ./qemu-system-i386 -machine q35 -m size=1G,maxmem=3G,slots=2
qemu-system-i386: Address space limit 0xffffffff < 0x1ffffffff phys-bits too low (32)

A new compatibility flag is introduced to make sure pc_max_used_gpa() keeps
returning the old value for machines 8.1 and older.
Therefore, the above is still allowed for older machine types in order to support
compatibility. Hence, the following still works:

$ ./qemu-system-i386 -machine pc-i440fx-8.1 -m size=1G,maxmem=3G,slots=2
$ ./qemu-system-i386 -machine pc-q35-8.1 -m size=1G,maxmem=3G,slots=2

Further, following is also allowed as with PSE36, the processor has 36-bit
address space:

$ ./qemu-system-i386 -cpu 486,pse36=on -m size=1G,maxmem=3G,slots=2

After calling CPUID with EAX=0x80000001, all AMD64 compliant processors
have the longmode-capable-bit turned on in the extended feature flags (bit 29)
in EDX. The absence of CPUID longmode can be used to differentiate between
32-bit and 64-bit processors and is the recommended approach. QEMU takes this
approach elsewhere (for example, please see x86_cpu_realizefn()), With
this change, pc_max_used_gpa() also uses the same method to detect 32-bit
processors.

Unit tests are modified to not run 32-bit x86 tests that use memory hotplug.

Suggested-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Ani Sinha <anisinha@redhat.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Message-Id: <20230922160413.165702-1-anisinha@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2023-10-04 18:15:06 -04:00
..
fuzz tests/qtest: Specify audiodev= and -audiodev 2023-09-22 16:30:08 +02:00
libqos igb: RX payload guest writting refactoring 2023-09-18 14:36:13 +08:00
ac97-test.c tests/qtest/ac97-test: add up-/downsampling tests 2023-05-26 09:10:49 +02:00
acpi-utils.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
acpi-utils.h tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
adm1272-test.c tests/qtest: add tests for ADM1272 device model 2021-07-08 14:41:59 -05:00
ahci-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
am53c974-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
arm-cpu-features.c target/arm: Implement FEAT_PACQARMA3 2023-09-08 12:50:44 +01:00
aspeed_gpio-test.c hw/gpio/aspeed: Don't let guests modify input pins 2022-07-14 16:24:38 +02:00
aspeed_hace-test.c Misc cleanups 2022-05-03 09:13:17 -07:00
aspeed_smc-test.c tests/qtest: aspeed_smc-test: Avoid using hardcoded /tmp 2022-09-27 20:51:20 +02:00
bcm2835-dma-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
bios-tables-test-allowed-diff.h tests/acpi/bios-tables-test: update acpi blob q35/DSDT.noacpihp 2023-07-10 18:59:32 -04:00
bios-tables-test.c hw/i386/pc: improve physical address space bound check for 32-bit x86 systems 2023-10-04 18:15:06 -04:00
boot-order-test.c tests/qtest: replace qmp_discard_response with qtest_qmp_assert_success 2023-05-16 09:14:18 +02:00
boot-sector.c tests: boot_sector_test(): make it multi-shot 2023-01-28 06:21:29 -05:00
boot-sector.h tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
boot-serial-test.c tests/qtest: Fix tests when no KVM or TCG are present 2023-05-02 10:54:32 +01:00
cdrom-test.c tests/qtest: Check for virtio-blk before using -cdrom with the arm virt machine 2023-05-26 09:10:49 +02:00
cmsdk-apb-dualtimer-test.c tests: Add a simple test of the CMSDK APB dual timer 2021-01-29 15:54:42 +00:00
cmsdk-apb-timer-test.c tests: Add a simple test of the CMSDK APB timer 2021-01-29 15:54:42 +00:00
cmsdk-apb-watchdog-test.c tests/qtest/cmsdk-apb-watchdog-test: Test clock changes 2021-01-29 15:54:44 +00:00
cpu-plug-test.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
cxl-test.c tests/qtest/cxl-test: Clean up temporary directories after testing 2023-06-26 09:01:33 +02:00
dbus-display-test.c tests: make dbus-display-test work on win32 2023-06-27 17:08:56 +02:00
dbus-vmstate-test.c tests/qtest: Use EXIT_FAILURE instead of magic number 2022-10-28 14:31:49 +02:00
device-introspect-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
device-plug-test.c target/ppc: Add POWER9 DD2.2 model 2023-05-28 13:25:11 -03:00
display-vga-test.c tests/qtest/display-vga-test: Add proper checks if a device is available 2023-01-31 09:05:26 +01:00
drive_del-test.c tests/qtest: drive_del-test: Skip tests that require missing devices 2023-02-14 09:11:27 +01:00
ds1338-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
e1000-test.c tests: Fix error strings 2022-09-20 11:23:02 +02:00
e1000e-test.c tests/qtest/e1000e-test: Fabricate ethernet header 2023-03-10 17:26:47 +08:00
eepro100-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
emc141x-test.c sensor: Move hardware sensors from misc to a sensor directory 2021-06-17 07:10:32 -05:00
endianness-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
erst-test.c tests: add G_GNUC_PRINTF for various functions 2023-01-11 10:44:34 +01:00
es1370-test.c tests/qtest: Specify audiodev= and -audiodev 2023-09-22 16:30:08 +02:00
fdc-test.c tests/qtest: replace qmp_discard_response with qtest_qmp_assert_success 2023-05-16 09:14:18 +02:00
fuzz-e1000e-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
fuzz-lsi53c895a-test.c hw/scsi/lsi53c895a: Fix reentrancy issues in the LSI controller (CVE-2023-0330) 2023-05-26 09:37:04 +02:00
fuzz-megasas-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fuzz-sb16-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fuzz-sdcard-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fuzz-virtio-scsi-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fuzz-xlnx-dp-test.c qtest: "-display none" is set in qtest_init() 2022-10-11 12:36:15 +02:00
fw_cfg-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
hd-geo-test.c tests/qtest/hd-geo-test: fix incorrect pcie-root-port usage and simplify test 2023-07-10 18:59:32 -04:00
hexloader-test.c cleanup: Tweak and re-run return_directly.cocci 2022-12-14 16:19:35 +01:00
i440fx-test.c tests/qtest: i440fx-test: Rewrite create_blob_file() to be portable 2022-09-27 20:51:20 +02:00
i82801b11-test.c
ide-test.c tests/qtest: replace qmp_discard_response with qtest_qmp_assert_success 2023-05-16 09:14:18 +02:00
igb-test.c igb: Introduce qtest for igb device 2023-03-10 17:26:47 +08:00
intel-hda-test.c tests/qtest: Specify audiodev= and -audiodev 2023-09-22 16:30:08 +02:00
ioh3420-test.c
ipmi-bt-test.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
ipmi-kcs-test.c tests: Avoid side effects inside g_assert() arguments 2021-05-14 12:28:01 +02:00
ipoctal232-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
isl_pmbus_vr-test.c hw/sensor: add Renesas raa228000 device 2022-03-08 18:46:48 +01:00
ivshmem-test.c tests: add G_GNUC_PRINTF for various functions 2023-01-11 10:44:34 +01:00
libqmp.c tests: add G_GNUC_PRINTF for various functions 2023-01-11 10:44:34 +01:00
libqmp.h tests: make libqmp buildable for win32 2022-05-28 11:42:56 +02:00
libqtest-single.h tests/qtest: libqtest: Adapt global_qtest declaration for win32 2022-09-27 20:51:21 +02:00
libqtest.c qtest: kill orphaned qtest QEMU processes on FreeBSD 2023-09-20 15:06:33 +01:00
libqtest.h qtest: implement named interception of out-GPIO 2023-08-22 17:31:00 +01:00
lpc-ich9-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
lsm303dlhc-mag-test.c hw/sensor: Add lsm303dlhc magnetometer device 2022-02-08 10:56:29 +00:00
m48t59-test.c tests/qtest/m48t59-test: Silence compiler warning with -Wshadow 2023-09-25 07:54:35 +02:00
machine-none-test.c tests/qtest: machine-none-test: Use double quotes to pass the cpu option 2022-08-29 15:28:51 +02:00
max34451-test.c tests/qtest: add tests for MAX34451 device model 2021-07-08 14:42:00 -05:00
megasas-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
meson.build tests/qtest: Introduce tests for UFS 2023-09-07 14:01:29 -04:00
microbit-test.c microbit: add missing qtest_quit() call 2023-09-20 15:06:33 +01:00
migration-helpers.c tests/qtest: capture RESUME events during migration 2023-06-02 11:46:19 +02:00
migration-helpers.h tests/qtest: capture RESUME events during migration 2023-06-02 11:46:19 +02:00
migration-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
modules-test.c blkio: add libblkio block driver 2022-10-26 14:56:42 -04:00
ne2000-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
netdev-socket.c tests/qtest/netdev-socket: Do not test multicast on Darwin 2023-09-25 07:55:57 +02:00
npcm7xx_adc-test.c hw/adc: Fix CONV bit in NPCM7XX ADC CON register 2022-07-18 13:20:14 +01:00
npcm7xx_emc-test.c tests/qtest: npcm7xx-emc-test: Skip checking MAC 2022-09-19 15:12:28 +02:00
npcm7xx_gpio-test.c hw/gpio: Add GPIO model for Nuvoton NPCM7xx 2020-10-27 11:10:32 +00:00
npcm7xx_pwm-test.c tests/qtest/npcm7xx_pwm-test: Be less verbose unless V=2 2023-02-14 09:02:42 +01:00
npcm7xx_rng-test.c include: move C/util-related declarations to cutils.h 2022-04-06 14:31:43 +02:00
npcm7xx_sdhci-test.c tests/qtest: Reduce npcm7xx_sdhci test image size 2022-06-10 14:32:35 +01:00
npcm7xx_smbus-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
npcm7xx_timer-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
npcm7xx_watchdog_timer-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
numa-test.c hw/i386/pc: improve physical address space bound check for 32-bit x86 systems 2023-10-04 18:15:06 -04:00
nvme-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
pca9552-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
pci-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
pcnet-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
pflash-cfi02-test.c tests/qtest/pflash: Clean up local variable shadowing 2023-09-12 12:07:31 +02:00
pnv-xscom-test.c tests/qtest: Add xscom tests for powernv10 machine 2023-07-07 04:49:06 -03:00
prom-env-test.c tests/qtest: prom-env-test: Use double quotes to pass the prom-env option 2022-08-29 15:28:51 +02:00
pvpanic-pci-test.c cleanup: Tweak and re-run return_directly.cocci 2022-12-14 16:19:35 +01:00
pvpanic-test.c cleanup: Tweak and re-run return_directly.cocci 2022-12-14 16:19:35 +01:00
pxe-test.c tests/qtest: Fix tests when no KVM or TCG are present 2023-05-02 10:54:32 +01:00
q35-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
qmp-cmd-test.c accel/tcg: remove CONFIG_PROFILER 2023-06-26 17:33:00 +02:00
qmp-test.c tests/qtest: qmp-test: Avoid using hardcoded /tmp 2022-09-27 20:51:21 +02:00
qom-test.c tests/qtest/qom-test: Stop spamming the test log 2023-01-26 13:25:07 +01:00
qos-test.c tests/qtest: use qos_printf instead of g_test_message 2022-10-07 09:41:51 -04:00
qtest_aspeed.c qtest: Add functions for accessing devices on Aspeed I2C controller 2023-04-20 11:25:32 +02:00
qtest_aspeed.h qtest: Add functions for accessing devices on Aspeed I2C controller 2023-04-20 11:25:32 +02:00
readconfig-test.c tests/qtest/readconfig: Test the docs/config/q35-*.cfg files 2023-07-10 15:34:57 +02:00
rtas-test.c tests: add G_GNUC_PRINTF for various functions 2023-01-11 10:44:34 +01:00
rtc-test.c tests/qtest: Adapt {m48t59,rtc}-test cases for win32 2022-08-25 15:24:09 +02:00
rtl8139-test.c tests/qtest/rtl8139-test: Check whether the rtl8139 device is available 2023-05-26 09:10:49 +02:00
sdhci-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
sifive-e-aon-watchdog-test.c tests/qtest: sifive-e-aon-watchdog-test.c: Add QTest of watchdog of sifive_e 2023-07-10 22:29:15 +10:00
spapr-phb-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
sse-timer-test.c tests/qtest/sse-timer-test: Test counter scaling changes 2021-03-08 17:20:03 +00:00
tco-test.c hw: Move ich9.h to southbridge/ 2023-02-27 22:29:01 +01:00
test-arm-mptimer.c
test-filter-mirror.c tests/qtest: replace qmp_discard_response with qtest_qmp_assert_success 2023-05-16 09:14:18 +02:00
test-filter-redirector.c tests/qtest: replace qmp_discard_response with qtest_qmp_assert_success 2023-05-16 09:14:18 +02:00
test-hmp.c tests/qtest/test-hmp: Fix migrate_set_parameter xbzrle-cache-size test 2023-09-08 13:08:52 +03:00
test-netfilter.c tests/qtest: Make the filter tests independent from a specific NIC 2021-12-22 08:13:05 +01:00
test-x86-cpuid-compat.c Remove qemu-common.h include from most units 2022-04-06 14:31:55 +02:00
tmp105-test.c sensor: Move hardware sensors from misc to a sensor directory 2021-06-17 07:10:32 -05:00
tpm-crb-swtpm-test.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-crb-test.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-emu.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-emu.h tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
tpm-tests.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-tests.h tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-tis-device-swtpm-test.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-tis-device-test.c tests: Add tpm_version field to TPMTestState and fill it 2021-08-31 17:33:11 -04:00
tpm-tis-i2c-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-tis-swtpm-test.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-tis-test.c tests: Add tpm_version field to TPMTestState and fill it 2021-08-31 17:33:11 -04:00
tpm-tis-util.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
tpm-tis-util.h qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-util.c qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tpm-util.h qtest: Move tpm_util_tis_transmit() into tpm-tis-utils.c and rename it 2023-04-20 11:25:32 +02:00
tulip-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
ufs-test.c tests/qtest: Introduce tests for UFS 2023-09-07 14:01:29 -04:00
usb-hcd-ehci-test.c tests/qtest/usb-hcd-ehci-test: Check for EHCI and UHCI HCDs before using them 2023-05-26 09:10:49 +02:00
usb-hcd-ohci-test.c
usb-hcd-uhci-test.c tests/qtest/usb-hcd: Remove the empty "init" tests 2023-09-08 13:08:52 +03:00
usb-hcd-xhci-test.c tests/qtest/usb-hcd: Remove the empty "init" tests 2023-09-08 13:08:52 +03:00
vhost-user-blk-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
vhost-user-test.c tests/qtest: enable tests for virtio-scmi 2023-07-10 16:17:08 -04:00
virtio-9p-test.c tests/9p: merge v9fs_tunlinkat() and do_unlinkat() 2022-10-24 12:24:32 +02:00
virtio-blk-test.c tests/qtest: replace qmp_discard_response with qtest_qmp_assert_success 2023-05-16 09:14:18 +02:00
virtio-ccw-test.c tests/qtest: Check for the availability of virtio-ccw devices before using them 2023-05-22 09:44:48 +02:00
virtio-iommu-test.c tests/qtest/virtio-iommu-test: Check bypass config 2022-03-06 05:08:23 -05:00
virtio-net-failover.c tests/qtest: virtio-net-failover: Disable migration tests for win32 2022-09-27 20:51:21 +02:00
virtio-net-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
virtio-rng-test.c tests/qtest/libqos: Skip hotplug tests if pci root bus is not hotpluggable 2022-05-12 12:07:06 +02:00
virtio-scsi-test.c tests/qtest: virtio-scsi-test: Avoid using hardcoded /tmp 2022-09-27 20:51:20 +02:00
virtio-serial-test.c
virtio-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
vmgenid-test.c tests/: spelling fixes 2023-09-08 13:08:52 +03:00
vmxnet3-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
vnc-display-test.c qtest: enable vnc-display test on win32 2023-03-13 15:41:32 +04:00
wdt_ib700-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
xlnx-can-test.c tests: move libqtest.h back under qtest/ 2022-05-03 15:16:51 +04:00
xlnx-canfd-test.c tests/qtest: xlnx-canfd-test: Fix code coverity issues 2023-07-06 13:26:43 +01:00