qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] vl: move rom_load_all after machine init done


From: Eric Auger
Subject: Re: [Qemu-devel] [PATCH] vl: move rom_load_all after machine init done
Date: Mon, 22 Jun 2015 11:26:04 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0

ping

Do you think that change is sensible? Since this takes place in vl.c I
am quite scared but with your experience you may know how much this can
be wrong.

Best Regards

Eric

On 06/16/2015 06:07 PM, Eric Auger wrote:
> On ARM, commit ac9d32e39664e060cd1b538ff190980d57ad69e4 postponed the
> memory preparation for boot until the machine init done notifier. This
> has for consequence to insert ROM at machine init done time.
> 
> However the rom_load_all function stayed called before the ROM are
> inserted. As a consequence the rom_load_all function does not do
> everything it is expected to do, on ARM.
> 
> It currently registers the ROM reset notifier but does not iterate through
> the registered ROM list. the isrom field is not set properly. This latter
> is used to report info in the monitor and also to decide whether the
> rom->data can be freed on ROM reset notifier.
> 
> To fix that regression the patch moves the rom_load_all call after
> machine init done. We also take the opportunity to rename the rom_load_all
> function into rom_check_and_resgister_reset() and integrate the
> rom_load_done in it.
> 
> Signed-off-by: Eric Auger <address@hidden>
> Reported-by: Peter Crosthwaite <address@hidden>
> ---
>  hw/core/loader.c    |  8 ++------
>  include/hw/loader.h |  3 +--
>  vl.c                | 11 ++++-------
>  3 files changed, 7 insertions(+), 15 deletions(-)
> 
> diff --git a/hw/core/loader.c b/hw/core/loader.c
> index 7ee675c..216eeeb 100644
> --- a/hw/core/loader.c
> +++ b/hw/core/loader.c
> @@ -933,7 +933,7 @@ static void rom_reset(void *unused)
>      }
>  }
>  
> -int rom_load_all(void)
> +int rom_check_and_register_reset(void)
>  {
>      hwaddr addr = 0;
>      MemoryRegionSection section;
> @@ -957,12 +957,8 @@ int rom_load_all(void)
>          memory_region_unref(section.mr);
>      }
>      qemu_register_reset(rom_reset, NULL);
> -    return 0;
> -}
> -
> -void rom_load_done(void)
> -{
>      roms_loaded = 1;
> +    return 0;
>  }
>  
>  void rom_set_fw(FWCfgState *f)
> diff --git a/include/hw/loader.h b/include/hw/loader.h
> index 485ff8f..f7b43ab 100644
> --- a/include/hw/loader.h
> +++ b/include/hw/loader.h
> @@ -75,8 +75,7 @@ MemoryRegion *rom_add_blob(const char *name, const void 
> *blob, size_t len,
>                             void *callback_opaque);
>  int rom_add_elf_program(const char *name, void *data, size_t datasize,
>                          size_t romsize, hwaddr addr);
> -int rom_load_all(void);
> -void rom_load_done(void);
> +int rom_check_and_register_reset(void);
>  void rom_set_fw(FWCfgState *f);
>  int rom_copy(uint8_t *dest, hwaddr addr, size_t size);
>  void *rom_ptr(hwaddr addr);
> diff --git a/vl.c b/vl.c
> index 9542095..4f12957 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -4419,18 +4419,15 @@ int main(int argc, char **argv, char **envp)
>  
>      qdev_machine_creation_done();
>  
> -    if (rom_load_all() != 0) {
> -        fprintf(stderr, "rom loading failed\n");
> -        exit(1);
> -    }
> -
>      /* TODO: once all bus devices are qdevified, this should be done
>       * when bus is created by qdev.c */
>      qemu_register_reset(qbus_reset_all_fn, sysbus_get_default());
>      qemu_run_machine_init_done_notifiers();
>  
> -    /* Done notifiers can load ROMs */
> -    rom_load_done();
> +    if (rom_check_and_register_reset() != 0) {
> +        fprintf(stderr, "rom check and register reset failed\n");
> +        exit(1);
> +    }
>  
>      qemu_system_reset(VMRESET_SILENT);
>      if (loadvm) {
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]