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.
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.
The exact request should be "only boot from selected devices".
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.
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@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);