[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