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


Reply via email to