From: Gonglei <arei.gong...@huawei.com> Introduce a del_boot_device_path() cleanup fw_cfg content when hot-unplugging devcie refer to bootindex.
Signed-off-by: Gonglei <arei.gong...@huawei.com> Signed-off-by: Chenliang <chenlian...@huawei.com> --- include/sysemu/sysemu.h | 1 + vl.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index e1b0659..7a79ff4 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -209,6 +209,7 @@ void usb_info(Monitor *mon, const QDict *qdict); void add_boot_device_path(int32_t bootindex, DeviceState *dev, const char *suffix); +void del_boot_device_path(DeviceState *dev); void modify_boot_device_path(int32_t bootindex, DeviceState *dev, const char *suffix); char *get_boot_devices_list(size_t *size, bool ignore_suffixes); diff --git a/vl.c b/vl.c index 3e42eaa..0cdadb4 100644 --- a/vl.c +++ b/vl.c @@ -1248,6 +1248,23 @@ void add_boot_device_path(int32_t bootindex, DeviceState *dev, QTAILQ_INSERT_TAIL(&fw_boot_order, node, link); } +void del_boot_device_path(DeviceState *dev) +{ + FWBootEntry *i; + + assert(dev != NULL); + + QTAILQ_FOREACH(i, &fw_boot_order, link) { + if (i->dev->id && dev->id && !strcmp(i->dev->id, dev->id)) { + /* remove all entries of the assigend dev */ + QTAILQ_REMOVE(&fw_boot_order, i, link); + g_free(i->suffix); + g_free(i); + break; + } + } +} + void modify_boot_device_path(int32_t bootindex, DeviceState *dev, const char *suffix) { -- 1.7.12.4