[SeaBIOS] [Resend][Seabios PATCH] don't boot from un-selected devices
Gleb Natapov
gleb at redhat.com
Tue Dec 25 07:37:07 CET 2012
On Tue, Dec 25, 2012 at 11:58:08AM +0800, Amos Kong wrote:
> On Wed, Dec 19, 2012 at 11:32:08AM +0200, Gleb Natapov wrote:
> > On Wed, Dec 19, 2012 at 03:24:45PM +0800, Amos Kong wrote:
> > > Current seabios will try to boot from selected devices first,
> > > if they are all failed, seabios will also try to boot from
> > > un-selected devices.
> > >
> > > For example:
> > > @ qemu-kvm -boot order=n,menu=on ...
> > >
> > > Guest will boot from network first, if it's failed, guest will try to
> > > boot from other un-selected devices (floppy, cdrom, disk) one by one.
> > >
> > > Sometimes, user don't want to boot from some devices. This patch changes
>
> Hi Gleb,
>
> > And sometimes he want. The patch changes behaviour unconditionally. New
> > behaviour should be user selectable. Something line -boot order=strict
> > on qemu command line.
>
> Sometimes, user don't know which devices are in boot list of seabios,
> so they could not disable them through qemu cmdline.
>
This is not what I suggested though. And currently we do not have a way
to remove one device from the boot process. This is separate issue and
requires separate patch.
> I didn't describe the purpose clearly. Currently we can assign boot
> order by "-boot order=...", if fails to boot from all devices in order
> parameters, other devices in seabios's boot table will also be tried.
order= is an old style. Use bootindex instead.
>
> The exact request should be "only boot from selected devices".
You described the purpose clearly first time. This is how I understood
it :)
>
> I agree to make it configurable.
> eg: qemu -boot order=nd,strict=on,menu=on
> strick: on (only boot from selected devices)
> strick: off (will try to boot from all devices in seabios' boot table)
> default strick should be 'off' as current behavior.
>
Yes, this is my suggestion.
> Thanks, Amos
>
> > > seabios to boot only from selected devices.
> > >
> > > If user choose first boot device from menu, then seabios will try all
> > > the devices, even some of them are not selected.
> > >
> > > Signed-off-by: Amos Kong <akong at redhat.com>
> > > ---
> > > Resend for CCing seabios maillist.
> > > ---
> > > src/boot.c | 13 ++++++++-----
> > > 1 files changed, 8 insertions(+), 5 deletions(-)
> > >
> > > diff --git a/src/boot.c b/src/boot.c
> > > index 3ca7960..ee810ac 100644
> > > --- a/src/boot.c
> > > +++ b/src/boot.c
> > > @@ -424,6 +424,10 @@ interactive_bootmenu(void)
> > > maxmenu++;
> > > printf("%d. %s\n", maxmenu
> > > , strtcpy(desc, pos->description, ARRAY_SIZE(desc)));
> > > + /* If user chooses first boot device from menu, we will treat
> > > + all the devices as selected. */
> > > + if (pos->priority == DEFAULT_PRIO)
> > > + pos->priority = DEFAULT_PRIO - 1;
> > > pos = pos->next;
> > > }
> > >
> > > @@ -490,7 +494,10 @@ boot_prep(void)
> > >
> > > // Map drives and populate BEV list
> > > struct bootentry_s *pos = BootList;
> > > - while (pos) {
> > > +
> > > + /* The priority of un-selected device is not changed,
> > > + we only boot from user selected devices. */
> > > + while (pos && pos->priority != DEFAULT_PRIO) {
> > > switch (pos->type) {
> > > case IPL_TYPE_BCV:
> > > call_bcv(pos->vector.seg, pos->vector.offset);
> > > @@ -513,10 +520,6 @@ boot_prep(void)
> > > }
> > > pos = pos->next;
> > > }
> > > -
> > > - // If nothing added a floppy/hd boot - add it manually.
> > > - add_bev(IPL_TYPE_FLOPPY, 0);
> > > - add_bev(IPL_TYPE_HARDDISK, 0);
--
Gleb.
More information about the SeaBIOS
mailing list