diff mbox

xen-platform: Cleanup network infrastructure when emulated NICs are unplugged

Message ID 20170619081945.30001-1-ross.lagerwall@citrix.com (mailing list archive)
State New, archived
Headers show

Commit Message

Ross Lagerwall June 19, 2017, 8:19 a.m. UTC
When the guest unplugs the emulated NICs, call net_cleanup() to cleanup
the network infrastructure in QEMU as it is not needed anymore. Most
importantly, this allows the tap interfaces which QEMU holds open to be
closed and removed.

Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
---
 hw/i386/xen/xen_platform.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Anthony PERARD June 20, 2017, 2:49 p.m. UTC | #1
On Mon, Jun 19, 2017 at 09:19:45AM +0100, Ross Lagerwall wrote:
> When the guest unplugs the emulated NICs, call net_cleanup() to cleanup
> the network infrastructure in QEMU as it is not needed anymore. Most
> importantly, this allows the tap interfaces which QEMU holds open to be
> closed and removed.
> 
> Signed-off-by: Ross Lagerwall <ross.lagerwall@citrix.com>
> ---
>  hw/i386/xen/xen_platform.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/hw/i386/xen/xen_platform.c b/hw/i386/xen/xen_platform.c
> index 1419fc9..180abc7 100644
> --- a/hw/i386/xen/xen_platform.c
> +++ b/hw/i386/xen/xen_platform.c
> @@ -105,6 +105,7 @@ static void unplug_nic(PCIBus *b, PCIDevice *d, void *o)
>  static void pci_unplug_nics(PCIBus *bus)
>  {
>      pci_for_each_device(bus, 0, unplug_nic, NULL);
> +    net_cleanup();

This makes QEMU segv when QEMU is shutting down. When net_cleanup() is
called a second time, qemu crash. That probably not a good sign, even if
the guest continue to live after a reboot or a migration.
diff mbox

Patch

diff --git a/hw/i386/xen/xen_platform.c b/hw/i386/xen/xen_platform.c
index 1419fc9..180abc7 100644
--- a/hw/i386/xen/xen_platform.c
+++ b/hw/i386/xen/xen_platform.c
@@ -105,6 +105,7 @@  static void unplug_nic(PCIBus *b, PCIDevice *d, void *o)
 static void pci_unplug_nics(PCIBus *bus)
 {
     pci_for_each_device(bus, 0, unplug_nic, NULL);
+    net_cleanup();
 }
 
 static void unplug_disks(PCIBus *b, PCIDevice *d, void *opaque)