Patchwork net: Fix hotplug with pci_add

login
register
mail settings
Submitter Amit Shah
Date June 8, 2010, 3:17 p.m.
Message ID <96e6e74c3b7adc90d57e1303cd09d272bc9f7e06.1276010252.git.amit.shah@redhat.com>
Download mbox | patch
Permalink /patch/54999/
State New
Headers show

Comments

Amit Shah - June 8, 2010, 3:17 p.m.
The correct model type wasn't getting added when hotplugging nics with
pci_add.

Testcase: start VM with default nic type. In the qemu_monitor:

(qemu) pci_add auto nic model=virtio

This results in a nic hot-plug of the same nic type as the default.

Signed-off-by: Amit Shah <amit.shah@redhat.com>
---
 net.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)
Gerd Hoffmann - June 8, 2010, 3:31 p.m.
On 06/08/10 17:17, Amit Shah wrote:
> The correct model type wasn't getting added when hotplugging nics with
> pci_add.
>
> Testcase: start VM with default nic type. In the qemu_monitor:
>
> (qemu) pci_add auto nic model=virtio
 >
> This results in a nic hot-plug of the same nic type as the default.

Same goes for mac address and vlan btw, most likely for the same reason. 
  I guess your patch handles this too?

cheers,
   Gerd
Amit Shah - June 8, 2010, 4:40 p.m.
On (Tue) Jun 08 2010 [17:31:04], Gerd Hoffmann wrote:
> On 06/08/10 17:17, Amit Shah wrote:
> >The correct model type wasn't getting added when hotplugging nics with
> >pci_add.
> >
> >Testcase: start VM with default nic type. In the qemu_monitor:
> >
> >(qemu) pci_add auto nic model=virtio
> >
> >This results in a nic hot-plug of the same nic type as the default.
> 
> Same goes for mac address and vlan btw, most likely for the same
> reason.  I guess your patch handles this too?

Yes, all the properties.

		Amit

Patch

diff --git a/net.c b/net.c
index efa8b3d..ca421ed 100644
--- a/net.c
+++ b/net.c
@@ -1106,6 +1106,7 @@  int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
     for (i = 0; net_client_types[i].type != NULL; i++) {
         if (!strcmp(net_client_types[i].type, type)) {
             VLANState *vlan = NULL;
+            int ret;
 
             if (qemu_opts_validate(opts, &net_client_types[i].desc[0]) == -1) {
                 return -1;
@@ -1119,13 +1120,14 @@  int net_client_init(Monitor *mon, QemuOpts *opts, int is_netdev)
             }
 
             if (net_client_types[i].init) {
-                if (net_client_types[i].init(opts, mon, name, vlan) < 0) {
+                ret = net_client_types[i].init(opts, mon, name, vlan);
+                if (ret < 0) {
                     /* TODO push error reporting into init() methods */
                     qerror_report(QERR_DEVICE_INIT_FAILED, type);
                     return -1;
                 }
             }
-            return 0;
+            return ret;
         }
     }