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 <anisinha@redhat.com>
just a refactor:
Acked-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> 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