Add remove_boot_device_path() function for hot-unplug device
PATCH v4 1/1 Add remove_boot_device_path() function for hot-unplug device
Add remove_boot_device_path() function to remove bootindex when hot-unplug a device.
Signed-off-by Jun Li <[email protected]>
--- hw/block/virtio-blk.c | 1 + hw/i386/kvm/pci-assign.c | 1 + hw/misc/vfio.c | 1 + hw/net/e1000.c | 1 + hw/net/eepro100.c | 1 + hw/net/ne2000.c | 1 + hw/net/rtl8139.c | 1 + hw/net/spapr_llan.c | 2 ++ hw/net/virtio-net.c | 1 + hw/net/vmxnet3.c | 2 ++ hw/scsi/scsi-disk.c | 1 + hw/scsi/scsi-generic.c | 1 + hw/usb/dev-network.c | 1 + hw/usb/host-libusb.c | 1 + hw/usb/redirect.c | 1 + include/sysemu/sysemu.h | 1 + vl.c | 16 ++++++++++++++++ 17 files changed, 34 insertions(+)
hw/block/virtio-blk.c +1 -0
@@ -752,6 +752,7 @@ static void virtio_blk_device_unrealize(DeviceState *dev, Error **errp)unregister_savevm (dev,"virtio-blk" , s);blockdev_mark_auto_del (s->bs);virtio_cleanup (vdev); +remove_boot_device_path (s->conf->bootindex); }static Property virtio_blk_properties[] = {
hw/i386/kvm/pci-assign.c +1 -0
@@ -1855,6 +1855,7 @@ static void assigned_exitfn(struct PCIDevice *pci_dev)deassign_device (dev);free_assigned_device (dev); +remove_boot_device_path (dev->bootindex); }static Property assigned_dev_properties[] = {
hw/misc/vfio.c +1 -0
@@ -3900,6 +3900,7 @@ static void vfio_exitfn(PCIDevice *pdev)g_free (vdev->rom);vfio_put_device (vdev);vfio_put_group (group); +remove_boot_device_path (vdev->bootindex); }static void vfio_pci_reset (DeviceState *dev)
hw/net/e1000.c +1 -0
@@ -1491,6 +1491,7 @@ pci_e1000_uninit(PCIDevice *dev)memory_region_destroy (&d->mmio);memory_region_destroy (&d->io);qemu_del_nic (d->nic); +remove_boot_device_path (d->conf.bootindex); }static NetClientInfo net_e1000_info = {
hw/net/eepro100.c +1 -0
@@ -1850,6 +1850,7 @@ static void pci_nic_uninit(PCIDevice *pci_dev)vmstate_unregister (&pci_dev->qdev, s->vmstate, s);eeprom93xx_free (&pci_dev->qdev, s->eeprom);qemu_del_nic (s->nic); +remove_boot_device_path (s->conf.bootindex); }static NetClientInfo net_eepro100_info = {
hw/net/ne2000.c +1 -0
@@ -753,6 +753,7 @@ static void pci_ne2000_exit(PCIDevice *pci_dev)memory_region_destroy (&s->io);qemu_del_nic (s->nic);qemu_free_irq (s->irq); +remove_boot_device_path (s->c.bootindex); }static Property ne2000_properties[] = {
hw/net/rtl8139.c +1 -0
@@ -3474,6 +3474,7 @@ static void pci_rtl8139_uninit(PCIDevice *dev)timer_del (s->timer);timer_free (s->timer);qemu_del_nic (s->nic); +remove_boot_device_path (s->conf.bootindex); }static void rtl8139_set_link_status (NetClientState *nc)
hw/net/spapr_llan.c +2 -0
@@ -185,6 +185,8 @@ static void spapr_vlan_cleanup(NetClientState *nc)VIOsPAPRVLANDevice *dev =qemu_get_nic_opaque (nc); dev->nic =NULL ; + +remove_boot_device_path (dev->nicconf.bootindex); }static NetClientInfo net_spapr_vlan_info = {
hw/net/virtio-net.c +1 -0
@@ -1645,6 +1645,7 @@ static void virtio_net_device_unrealize(DeviceState *dev, Error **errp)g_free (n->vqs);qemu_del_nic (n->nic);virtio_cleanup (vdev); +remove_boot_device_path (n->nic_conf.bootindex); }static void virtio_net_instance_init (Object *obj)
hw/net/vmxnet3.c +2 -0
@@ -2186,6 +2186,8 @@ static void vmxnet3_pci_uninit(PCIDevice *pci_dev)memory_region_destroy (&s->bar0);memory_region_destroy (&s->bar1);memory_region_destroy (&s->msix_bar); + +remove_boot_device_path (s->conf.bootindex); }static void vmxnet3_qdev_reset (DeviceState *dev)
hw/scsi/scsi-disk.c +1 -0
@@ -2156,6 +2156,7 @@ static void scsi_destroy(SCSIDevice *dev)scsi_device_purge_requests (&s->qdev,SENSE_CODE (NO_SENSE ));blockdev_mark_auto_del (s->qdev.conf.bs); +remove_boot_device_path (s->qdev.conf.bootindex); }static void scsi_disk_resize_cb (void *opaque)
hw/scsi/scsi-generic.c +1 -0
@@ -390,6 +390,7 @@ static void scsi_destroy(SCSIDevice *s) {scsi_device_purge_requests (s,SENSE_CODE (NO_SENSE ));blockdev_mark_auto_del (s->conf.bs); +remove_boot_device_path (s->conf.bootindex); }static int scsi_generic_initfn (SCSIDevice *s)
hw/usb/dev-network.c +1 -0
@@ -1331,6 +1331,7 @@ static void usb_net_handle_destroy(USBDevice *dev)/* TODO: remove the nd_table[] entry */ rndis_clear_responsequeue (s);qemu_del_nic (s->nic); +remove_boot_device_path (s->conf.bootindex); }static NetClientInfo net_usbnet_info = {
hw/usb/host-libusb.c +1 -0
@@ -920,6 +920,7 @@ static void usb_host_handle_destroy(USBDevice *udev)qemu_remove_exit_notifier (&s->exit);QTAILQ_REMOVE (&hostdevs, s, next);usb_host_close (s); +remove_boot_device_path (s->bootindex); }static void usb_host_cancel_packet (USBDevice *udev,USBPacket *p)
hw/usb/redirect.c +1 -0
@@ -1351,6 +1351,7 @@ static void usbredir_handle_destroy(USBDevice *udev) }free (dev->filter_rules); +remove_boot_device_path (dev->bootindex); }static int usbredir_check_filter (USBRedirDevice *dev)
include/sysemu/sysemu.h +1 -0
@@ -193,6 +193,7 @@ void rtc_change_mon_event(struct tm *tm);void add_boot_device_path (int32_t bootindex,DeviceState *dev,const char *suffix); +void remove_boot_device_path (int32_t bootindex);char *get_boot_devices_list (size_t *size,bool ignore_suffixes);DeviceState *get_boot_device (uint32_t position);
vl.c +16 -0
@@ -1189,6 +1189,22 @@ void add_boot_device_path(int32_t bootindex, DeviceState *dev,QTAILQ_INSERT_TAIL (&fw_boot_order, node, link); } +void remove_boot_device_path (int32_t bootindex) +{ +FWBootEntry *node, *next_node; + +if (bootindex ==-1 ) { +return ; + } + + QTAILQ_FOREACH_SAFE(node, &fw_boot_order, link, next_node) { +if (node->bootindex == bootindex) { +QTAILQ_REMOVE (&fw_boot_order, node, link); +return ; + } + } +} +DeviceState *get_boot_device (uint32_t position) {uint32_t counter =0 ;
Signature · 1 line
1.9.0