On 26.04.2013, at 14:12, Dominik Dingel wrote: > Currently only devices with a positive boot index will be pushed in the > fw_boot_order queue, so if no boot index at all will be specified, > the queue ends up empty. > > Instead we push exactly as docs/bootindex.txt says the devices with > the lowest possible boot priority at the tail of the queue, > because we give them the highest available boot index. > > Signed-off-by: Dominik Dingel <din...@linux.vnet.ibm.com>
Anthony, I'd like to have an ack/nack from you on this one. Alex > > diff --git a/vl.c b/vl.c > index 6caa5f4..84d7031 100644 > --- a/vl.c > +++ b/vl.c > @@ -248,7 +248,7 @@ struct FWBootEntry { > char *suffix; > }; > > -static QTAILQ_HEAD(, FWBootEntry) fw_boot_order = > +static QTAILQ_HEAD(FWBootOrder, FWBootEntry) fw_boot_order = > QTAILQ_HEAD_INITIALIZER(fw_boot_order); > > int nb_numa_nodes; > @@ -1213,10 +1213,21 @@ void add_boot_device_path(int32_t bootindex, > DeviceState *dev, > FWBootEntry *node, *i; > > if (bootindex < 0) { > - return; > + bootindex = INT32_MAX; > + if (!QTAILQ_EMPTY(&fw_boot_order) && > + (QTAILQ_LAST(&fw_boot_order, FWBootOrder)->bootindex == > INT32_MAX)) { > + /* there is a device at the end of the queue, so we need to walk > + the queue reverse to get the next free bootindex */ > + QTAILQ_FOREACH_REVERSE(i, &fw_boot_order, FWBootOrder, link) { > + if (i->bootindex != bootindex) { > + break; > + } > + bootindex--; > + } > + } > } > > - assert(dev != NULL || suffix != NULL); > + assert(dev != NULL || suffix != NULL || bootindex >= 0); > > node = g_malloc0(sizeof(FWBootEntry)); > node->bootindex = bootindex; > -- > 1.7.9.5 >