From: Gonglei <arei.gong...@huawei.com> Add the function of updating bootindex about fw_boot_order list in add_boot_device_path(). We should delete the old one if a device has existed in global fw_boot_order list.
Signed-off-by: Gonglei <arei.gong...@huawei.com> --- bootdevice.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/bootdevice.c b/bootdevice.c index 89aca7f..6f430ec 100644 --- a/bootdevice.c +++ b/bootdevice.c @@ -72,6 +72,34 @@ void del_boot_device_path(DeviceState *dev) } } +static void del_original_boot_device(DeviceState *dev, const char *suffix) +{ + FWBootEntry *i; + + if (dev == NULL) { + return; + } + + QTAILQ_FOREACH(i, &fw_boot_order, link) { + if (suffix) { + if (i->dev == dev && !strcmp(i->suffix, suffix)) { + QTAILQ_REMOVE(&fw_boot_order, i, link); + g_free(i->suffix); + g_free(i); + + break; + } + } else { /* host-usb and scsi devices do not have a suffix */ + if (i->dev == dev) { + QTAILQ_REMOVE(&fw_boot_order, i, link); + g_free(i); + + break; + } + } + } +} + void add_boot_device_path(int32_t bootindex, DeviceState *dev, const char *suffix) { @@ -83,6 +111,8 @@ void add_boot_device_path(int32_t bootindex, DeviceState *dev, assert(dev != NULL || suffix != NULL); + del_original_boot_device(dev, suffix); + node = g_malloc0(sizeof(FWBootEntry)); node->bootindex = bootindex; node->suffix = g_strdup(suffix); -- 1.7.12.4