i386/tdx: Don't initialize pc.rom for TDX VMs

For TDX, the address below 1MB are entirely general RAM. No need to
initialize pc.rom memory region for TDs.

Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
Link: https://lore.kernel.org/r/20250508150002.689633-20-xiaoyao.li@intel.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Xiaoyao Li 2025-05-08 10:59:25 -04:00 committed by Paolo Bonzini
parent cb5d65a854
commit 49b1f0f812

View file

@ -44,6 +44,7 @@
#include "system/xen.h" #include "system/xen.h"
#include "system/reset.h" #include "system/reset.h"
#include "kvm/kvm_i386.h" #include "kvm/kvm_i386.h"
#include "kvm/tdx.h"
#include "hw/xen/xen.h" #include "hw/xen/xen.h"
#include "qobject/qlist.h" #include "qobject/qlist.h"
#include "qemu/error-report.h" #include "qemu/error-report.h"
@ -976,21 +977,23 @@ void pc_memory_init(PCMachineState *pcms,
/* Initialize PC system firmware */ /* Initialize PC system firmware */
pc_system_firmware_init(pcms, rom_memory); pc_system_firmware_init(pcms, rom_memory);
option_rom_mr = g_malloc(sizeof(*option_rom_mr)); if (!is_tdx_vm()) {
if (machine_require_guest_memfd(machine)) { option_rom_mr = g_malloc(sizeof(*option_rom_mr));
memory_region_init_ram_guest_memfd(option_rom_mr, NULL, "pc.rom", if (machine_require_guest_memfd(machine)) {
PC_ROM_SIZE, &error_fatal); memory_region_init_ram_guest_memfd(option_rom_mr, NULL, "pc.rom",
} else { PC_ROM_SIZE, &error_fatal);
memory_region_init_ram(option_rom_mr, NULL, "pc.rom", PC_ROM_SIZE, } else {
&error_fatal); memory_region_init_ram(option_rom_mr, NULL, "pc.rom", PC_ROM_SIZE,
if (pcmc->pci_enabled) { &error_fatal);
memory_region_set_readonly(option_rom_mr, true); if (pcmc->pci_enabled) {
memory_region_set_readonly(option_rom_mr, true);
}
} }
memory_region_add_subregion_overlap(rom_memory,
PC_ROM_MIN_VGA,
option_rom_mr,
1);
} }
memory_region_add_subregion_overlap(rom_memory,
PC_ROM_MIN_VGA,
option_rom_mr,
1);
fw_cfg = fw_cfg_arch_create(machine, fw_cfg = fw_cfg_arch_create(machine,
x86ms->boot_cpus, x86ms->apic_id_limit); x86ms->boot_cpus, x86ms->apic_id_limit);