[SeaBIOS] [PATCH v2] qemu: fast boot when linuxboot optionrom is used
Stefano Garzarella
sgarzare at redhat.com
Wed Nov 28 12:30:42 CET 2018
On Wed, Nov 28, 2018 at 3:12 AM Kevin O'Connor <kevin at koconnor.net> wrote:
>
> 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").
I agree, it is cleaner. That was one of my doubt but, with an explicit
request, it works only with a new version of QEMU.
Do you think is acceptable?
Thanks,
Stefano
>
> Thanks,
> -Kevin
--
Stefano Garzarella
Red Hat
More information about the SeaBIOS
mailing list