Browse Source

hw/i386: export a new function x86_bios_rom_reload

Confidential guest smust reload their bios rom upon reset. This is because
bios memory is encrypted and upon reset, the contents of the old bios memory
is lost and cannot be re-used. To this end, export a new x86 function
x86_bios_rom_reload() to reload the bios again. This function will be used in
the subsequent patches.

Reviewed-by: Bernhard Beschow <shentey@gmail.com>
Signed-off-by: Ani Sinha <anisinha@redhat.com>
Link: https://lore.kernel.org/r/20260225035000.385950-14-anisinha@redhat.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
master
Ani Sinha 1 month ago
committed by Paolo Bonzini
parent
commit
40c015e969
  1. 21
      hw/i386/x86-common.c
  2. 1
      include/hw/i386/x86.h

21
hw/i386/x86-common.c

@ -1085,6 +1085,27 @@ static void load_bios_from_file(X86MachineState *x86ms, const char *bios_name,
exit(1);
}
void x86_bios_rom_reload(X86MachineState *x86ms)
{
int bios_size;
const char *bios_name;
char *filename;
if (memory_region_size(&x86ms->bios) == 0) {
/* if -bios is not used */
return;
}
bios_name = MACHINE(x86ms)->firmware ?: "bios.bin";
filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
bios_size = get_bios_size(x86ms, bios_name, filename);
void *ptr = memory_region_get_ram_ptr(&x86ms->bios);
load_image_size(filename, ptr, bios_size);
x86_firmware_configure(0x100000000ULL - bios_size, ptr, bios_size);
}
void x86_bios_rom_init(X86MachineState *x86ms, const char *default_firmware,
MemoryRegion *rom_memory, bool isapc_ram_fw)
{

1
include/hw/i386/x86.h

@ -125,6 +125,7 @@ void x86_isa_bios_init(MemoryRegion *isa_bios, MemoryRegion *isa_memory,
MemoryRegion *bios, bool read_only);
void x86_bios_rom_init(X86MachineState *x86ms, const char *default_firmware,
MemoryRegion *rom_memory, bool isapc_ram_fw);
void x86_bios_rom_reload(X86MachineState *x86ms);
void x86_load_linux(X86MachineState *x86ms,
FWCfgState *fw_cfg,

Loading…
Cancel
Save