From: Laszlo Ersek <lersek@redhat.com>
To: "Marc Marí" <markmb@redhat.com>, qemu-devel@nongnu.org
Cc: "Gabriel L. Somlo" <somlo@cmu.edu>,
Stefan Hajnoczi <stefanha@gmail.com>, Drew <drjones@redhat.com>,
Kevin O'Connor <kevin@koconnor.net>,
Gerd Hoffmann <kraxel@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v4 6/7] Make the kernel image in the fw_cfg DMA interface bootable
Date: Thu, 1 Oct 2015 17:25:11 +0200 [thread overview]
Message-ID: <560D5057.6010308@redhat.com> (raw)
In-Reply-To: <1443701819-13855-7-git-send-email-markmb@redhat.com>
On 10/01/15 14:16, Marc Marí wrote:
> Add an entry to the bootorder file with name "vmlinux".
> Give this entry more priority than the romfile.
>
> Signed-off-by: Marc Marí <markmb@redhat.com>
> ---
> hw/i386/pc.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 81d93b4..c4c51f7 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -1012,8 +1012,10 @@ static void load_linux(PCMachineState *pcms,
> fw_cfg_add_bytes(fw_cfg, FW_CFG_SETUP_DATA, setup, setup_size);
>
> option_rom[nb_option_roms].name = "linuxboot.bin";
> - option_rom[nb_option_roms].bootindex = 0;
> + option_rom[nb_option_roms].bootindex = 1;
> nb_option_roms++;
> +
> + add_boot_device_path(0, NULL, "vmlinux");
> }
>
> #define NE2000_NB_MAX 6
>
Where does this idea come from?
This will yet again break the invariant that the bootorder fw_cfg file
is a list of OpenFirmware device paths.
(The other annoying offender being "HALT", which caused me huge grief in
the OVMF OpenFirmware devpath parser parser, when libvirt decided that
"-boot strict=on" would become default.)
OVMF (and AAVMF) have been able to boot kernels directly from fw_cfg for
quite some time now, without the above change. They look at the fw_cfg
key 0x0008 (FW_CFG_KERNEL_SIZE). Direct kernel boot is being requested
iff the (little endian encoded) uint32 value is nonzero.
In QEMU, this role of FW_CFG_KERNEL_SIZE is true for:
- arm_load_kernel_notify() [hw/arm/boot.c], relied upon by AAVMF,
- load_multiboot() [hw/i386/multiboot.c] and
load_linux() [hw/i386/pc.c], relied upon by OVMF,
- "hw/ppc/mac_newworld.c", "hw/ppc/mac_oldworld.c", "hw/sparc/sun4m.c",
and "hw/sparc64/sun4u.c", relied upon by whatever boot firmware they
have.
Why is this necessary for SeaBIOS?
... I can see the function bootprio_find_vmlinux(), in SeaBIOS patch
[PATCH v4 2/2] Boot Linux using QEMU fw_cfg DMA interface
Given that direct kernel boot is always expected to take priority over
anything else (which is ensured by this QEMU patch too), can
bootprio_find_vmlinux() in SeaBIOS just look at the same fw_cfg key
(0x0008)?
I checked the QEMU_CFG_* macros in "src/fw/paravirt.c", and I think when
SeaBIOS boots an fw_cfg kernel *now*, it doesn't do it with its own
implementation; it probably launches the "linuxboot.bin" oprom (from
QEMU -- "pc-bios/optionrom/linuxboot.S").
I vaguely recall that this assembly code has been deemed unwieldy for
implementing the DMA interface (and I fully agree), which is why the
above-referenced SeaBIOS patch adds the capability to SeaBIOS itself. I
agree with that too.
But, instead of messing up the "bootorder" fw_cfg file, can
bootprio_find_vmlinux() look at the non-nullity of the
QEMU_CFG_KERNEL_SIZE key? Such as:
- read four bytes from under the fw_cfg selector QEMU_CFG_KERNEL_SIZE
(0x0008),
- if it is zero, return -1 --> no kernel boot requested,
- if it is nonzero, return 0 --> which means "top priority".
In other words, I agree with:
> - option_rom[nb_option_roms].bootindex = 0;
> + option_rom[nb_option_roms].bootindex = 1;
in this patch, but I disagree with:
> + add_boot_device_path(0, NULL, "vmlinux");
Thank you
Laszlo
next prev parent reply other threads:[~2015-10-01 15:25 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-01 12:14 QEMU fw_cfg DMA interface Marc Marí
2015-10-01 12:14 ` [Qemu-devel] " Marc Marí
2015-10-01 12:14 ` Marc Marí
[not found] ` <1443701677-13629-1-git-send-email-markmb-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-10-01 12:15 ` [PATCH v4] QEMU fw_cfg DMA interface documentation Marc Marí
2015-10-01 12:15 ` Marc Marí
[not found] ` <1443701732-13696-1-git-send-email-markmb-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-10-05 8:20 ` Stefan Hajnoczi
2015-10-05 8:20 ` Stefan Hajnoczi
2015-10-05 10:06 ` Marc Marí
2015-10-05 10:11 ` Stefan Hajnoczi
2015-10-05 10:11 ` Stefan Hajnoczi
2015-10-01 12:16 ` [Qemu-devel] [PATCH v4 0/7] fw_cfg DMA interface Marc Marí
2015-10-01 12:16 ` [Qemu-devel] [PATCH v4 1/7] fw_cfg: document fw_cfg_modify_iXX() update functions Marc Marí
2015-10-01 12:16 ` [Qemu-devel] [PATCH v4 2/7] fw_cfg DMA interface documentation Marc Marí
2015-10-01 14:41 ` Laszlo Ersek
2015-10-01 12:16 ` [Qemu-devel] [PATCH v4 3/7] Implement fw_cfg DMA interface Marc Marí
2015-10-01 14:36 ` Laszlo Ersek
2015-10-01 15:52 ` Marc Marí
2015-10-01 17:18 ` Peter Maydell
2015-10-01 19:20 ` Laszlo Ersek
2015-10-06 14:44 ` Stefan Hajnoczi
2015-10-06 14:53 ` Peter Maydell
2015-10-08 9:07 ` Stefan Hajnoczi
2015-10-08 10:01 ` Marc Marí
2015-10-06 14:54 ` Marc Marí
2015-10-01 12:16 ` [Qemu-devel] [PATCH v4 4/7] Enable fw_cfg DMA interface for ARM Marc Marí
2015-10-01 14:42 ` Laszlo Ersek
2015-10-01 12:16 ` [Qemu-devel] [PATCH v4 5/7] Enable fw_cfg DMA interface for x86 Marc Marí
2015-10-01 14:48 ` Laszlo Ersek
2015-10-01 12:16 ` [Qemu-devel] [PATCH v4 6/7] Make the kernel image in the fw_cfg DMA interface bootable Marc Marí
2015-10-01 15:25 ` Laszlo Ersek [this message]
2015-10-01 16:02 ` Kevin O'Connor
2015-10-01 16:10 ` Laszlo Ersek
2015-10-01 18:15 ` Marc Marí
2015-10-02 8:16 ` Gerd Hoffmann
2015-10-02 8:24 ` Marc Marí
2015-10-02 9:01 ` Gerd Hoffmann
2015-10-02 11:47 ` Laszlo Ersek
2015-10-02 12:07 ` Gerd Hoffmann
2015-10-02 13:25 ` Laszlo Ersek
2015-10-02 13:30 ` Laszlo Ersek
2015-10-03 0:05 ` Jordan Justen
2015-10-02 13:38 ` Kevin O'Connor
2015-10-05 9:18 ` Gerd Hoffmann
2015-10-02 8:09 ` Gerd Hoffmann
2015-10-02 13:40 ` Kevin O'Connor
2015-10-02 13:50 ` Laszlo Ersek
2015-10-02 15:24 ` Daniel P. Berrange
2015-10-05 9:26 ` Gerd Hoffmann
2015-10-01 12:16 ` [Qemu-devel] [PATCH v4 7/7] fw_cfg: Define a static signature to be returned on DMA port reads Marc Marí
2015-10-01 16:07 ` Laszlo Ersek
2015-10-01 17:02 ` Kevin O'Connor
2015-10-01 17:17 ` Laszlo Ersek
2015-10-01 13:19 ` [Qemu-devel] [PATCH v4 0/7] fw_cfg DMA interface Kevin O'Connor
2015-10-01 16:03 ` [Qemu-devel] QEMU " Eric Blake
[not found] ` <560D5945.5050700-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-10-01 16:11 ` Eric Blake
2015-10-01 16:11 ` Eric Blake
2015-10-01 16:19 ` Laszlo Ersek
2015-10-01 16:17 ` Laszlo Ersek
2015-10-01 16:17 ` Laszlo Ersek
[not found] ` <560D5C7E.8080900-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2015-10-01 16:21 ` Eric Blake
2015-10-01 16:21 ` Eric Blake
2015-10-01 16:34 ` Laszlo Ersek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=560D5057.6010308@redhat.com \
--to=lersek@redhat.com \
--cc=drjones@redhat.com \
--cc=kevin@koconnor.net \
--cc=kraxel@redhat.com \
--cc=markmb@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=somlo@cmu.edu \
--cc=stefanha@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.