[SeaBIOS] [PATCH v2] qemu: fast boot when linuxboot optionrom is used

Kevin O'Connor kevin at koconnor.net
Wed Nov 28 03:12:04 CET 2018


On Mon, Nov 26, 2018 at 12:39:12PM +0100, Stefano Garzarella wrote:
> Speed up the boot phase when qemu uses "linuxboot" optionrom
> (qemu -kernel) and the boot-menu is not required.
> Under these conditions we can skip the setup of devices and VGA,
> because they will be initialized (if they are required) during
> the Linux boot phase.
> 
> Following the time measured between SeaBIOS entry point and
> "linuxboot" entry point:
> 
> * Before this patch
>   qemu -kernel  | qemu -vga none -kernel
>   --------------+-----------------------
>   53.5 msec     | 23.34 msec
> 
> * After this patch
>   qemu -kernel  | qemu -vga none -kernel
>   --------------+-----------------------
>   12.82 msec    | 10.89 msec
> 
> Note: For the measuring, we used the default configuration disabling
> debug messages (CONFIG_DEBUG_LEVEL=0) and applying Stephen's patch:
> "tpm: Check for TPM related ACPI tables before attempting hw"
> 
> Signed-off-by: Stefano Garzarella <sgarzare at redhat.com>
> ---
>  src/bootsplash.c  |  3 +++
>  src/fw/paravirt.c | 10 ++++++++++
>  src/fw/paravirt.h |  4 ++++
>  src/optionroms.c  |  3 ++-
>  src/post.c        |  3 +++
>  5 files changed, 22 insertions(+), 1 deletion(-)
> 
> diff --git a/src/bootsplash.c b/src/bootsplash.c
> index 165c98d..0eda7f2 100644
> --- a/src/bootsplash.c
> +++ b/src/bootsplash.c
> @@ -8,6 +8,7 @@
>  #include "bregs.h" // struct bregs
>  #include "config.h" // CONFIG_*
>  #include "farptr.h" // FLATPTR_TO_SEG
> +#include "fw/paravirt.h" // runningOnQEMUFastBoot
>  #include "malloc.h" // free
>  #include "output.h" // dprintf
>  #include "romfile.h" // romfile_loadfile
> @@ -39,6 +40,8 @@ call16_int10(struct bregs *br)
>  void
>  enable_vga_console(void)
>  {
> +    if(runningOnQEMUFastBoot())
> +        return;
>      dprintf(1, "Turning on vga text mode console\n");
>      struct bregs br;
>  
> diff --git a/src/fw/paravirt.c b/src/fw/paravirt.c
> index 0770c47..9e6e618 100644
> --- a/src/fw/paravirt.c
> +++ b/src/fw/paravirt.c
> @@ -621,4 +621,14 @@ void qemu_cfg_init(void)
>      if (nogfx && !romfile_find("etc/sercon-port")
>          && !romfile_find("vgaroms/sgabios.bin"))
>          const_romfile_add_int("etc/sercon-port", PORT_SERIAL1);
> +
> +    /*
> +     * Enable QEMU fast boot if there is "linuxboot" optionrom and
> +     * the boot menu is not required.
> +     */
> +    if ((romfile_find("genroms/linuxboot_dma.bin")
> +        || romfile_find("genroms/linuxboot.bin"))
> +        && !romfile_loadint("etc/show-boot-menu", 1)) {
> +        PlatformRunningOn |= PF_QEMU_FB;
> +    }

I don't think we should hardcode special meanings to the names of
bootable files.  If QEMU wants SeaBIOS to not perform some type of
hardware init, then I think QEMU should explicitly request that from
SeaBIOS (eg, a "etc/dont-run-hardware-init").

Thanks,
-Kevin



More information about the SeaBIOS mailing list