On Wed, Feb 18, 2026 at 05:12:04PM +0530, Ani Sinha wrote: > For confidential guests, bios image must be reinitialized upon reset. This > is because bios memory is encrypted and hence once the old confidential > kvm context is destroyed, it cannot be decrypted. It needs to be reinitilized. > In order to do that, this change refactors x86_bios_rom_init() code so that > parts of it can be called during confidential guest reset. > > Signed-off-by: Ani Sinha <[email protected]>
just a refactor: Acked-by: Michael S. Tsirkin <[email protected]> > --- > hw/i386/x86-common.c | 50 ++++++++++++++++++++++++++++++++------------ > 1 file changed, 37 insertions(+), 13 deletions(-) > > diff --git a/hw/i386/x86-common.c b/hw/i386/x86-common.c > index de4cd7650a..c98abaf368 100644 > --- a/hw/i386/x86-common.c > +++ b/hw/i386/x86-common.c > @@ -1020,17 +1020,11 @@ void x86_isa_bios_init(MemoryRegion *isa_bios, > MemoryRegion *isa_memory, > memory_region_set_readonly(isa_bios, read_only); > } > > -void x86_bios_rom_init(X86MachineState *x86ms, const char *default_firmware, > - MemoryRegion *rom_memory, bool isapc_ram_fw) > +static int get_bios_size(X86MachineState *x86ms, > + const char *bios_name, char *filename) > { > - const char *bios_name; > - char *filename; > int bios_size; > - ssize_t ret; > > - /* BIOS load */ > - bios_name = MACHINE(x86ms)->firmware ?: default_firmware; > - filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); > if (filename) { > bios_size = get_image_size(filename, NULL); > } else { > @@ -1040,6 +1034,21 @@ void x86_bios_rom_init(X86MachineState *x86ms, const > char *default_firmware, > (bios_size % 65536) != 0) { > goto bios_error; > } > + > + return bios_size; > + > + bios_error: > + fprintf(stderr, "qemu: could not load PC BIOS '%s'\n", bios_name); > + exit(1); > +} > + > +static void load_bios_from_file(X86MachineState *x86ms, const char > *bios_name, > + char *filename, int bios_size, > + bool isapc_ram_fw) > +{ > + ssize_t ret; > + > + /* BIOS load */ > if (machine_require_guest_memfd(MACHINE(x86ms))) { > memory_region_init_ram_guest_memfd(&x86ms->bios, NULL, "pc.bios", > bios_size, &error_fatal); > @@ -1068,7 +1077,26 @@ void x86_bios_rom_init(X86MachineState *x86ms, const > char *default_firmware, > goto bios_error; > } > } > - g_free(filename); > + > + return; > + > + bios_error: > + fprintf(stderr, "qemu: could not load PC BIOS '%s'\n", bios_name); > + exit(1); > +} > + > +void x86_bios_rom_init(X86MachineState *x86ms, const char *default_firmware, > + MemoryRegion *rom_memory, bool isapc_ram_fw) > +{ > + int bios_size; > + const char *bios_name; > + g_autofree char *filename; > + > + bios_name = MACHINE(x86ms)->firmware ?: default_firmware; > + filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name); > + > + bios_size = get_bios_size(x86ms, bios_name, filename); > + load_bios_from_file(x86ms, bios_name, filename, bios_size, isapc_ram_fw); > > if (!machine_require_guest_memfd(MACHINE(x86ms))) { > /* map the last 128KB of the BIOS in ISA space */ > @@ -1081,8 +1109,4 @@ void x86_bios_rom_init(X86MachineState *x86ms, const > char *default_firmware, > (uint32_t)(-bios_size), > &x86ms->bios); > return; > - > -bios_error: > - fprintf(stderr, "qemu: could not load PC BIOS '%s'\n", bios_name); > - exit(1); > } > -- > 2.42.0
