qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH for-1.5 0/2] virtio-net: fix netclient id and type.
@ 2013-05-15 12:12 fred.konrad
  2013-05-15 12:12 ` [Qemu-devel] [PATCH for-1.5 1/2] virtio-net: add virtio_net_set_netclient_name fred.konrad
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: fred.konrad @ 2013-05-15 12:12 UTC (permalink / raw)
  To: qemu-devel, aliguori
  Cc: peter.maydell, matrixs.zero, mark.burton, stefanha, cornelia.huck,
	akong, fred.konrad

From: KONRAD Frederic <fred.konrad@greensocs.com>

This fixes this bug: https://bugs.launchpad.net/qemu/+bug/1179357

The name, and the type is replaced by virtio-net-x's id and virtio-net-x's type
to restore the behaviour of "info network" command.

Thanks,
Fred

KONRAD Frederic (2):
  virtio-net: add virtio_net_set_netclient_name.
  virtio-net-x: forward the netclient name and type.

 hw/net/virtio-net.c            | 45 ++++++++++++++++++++++++++++++++++++++++--
 hw/s390x/s390-virtio-bus.c     |  3 +++
 hw/s390x/virtio-ccw.c          |  3 +++
 hw/virtio/virtio-pci.c         |  3 +++
 include/hw/virtio/virtio-net.h |  4 ++++
 5 files changed, 56 insertions(+), 2 deletions(-)

-- 
1.7.11.7

^ permalink raw reply	[flat|nested] 7+ messages in thread

* [Qemu-devel] [PATCH for-1.5 1/2] virtio-net: add virtio_net_set_netclient_name.
  2013-05-15 12:12 [Qemu-devel] [PATCH for-1.5 0/2] virtio-net: fix netclient id and type fred.konrad
@ 2013-05-15 12:12 ` fred.konrad
  2013-05-15 13:16   ` Stefan Hajnoczi
  2013-05-15 12:12 ` [Qemu-devel] [PATCH for-1.5 2/2] virtio-net-x: forward the netclient name and type fred.konrad
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 7+ messages in thread
From: fred.konrad @ 2013-05-15 12:12 UTC (permalink / raw)
  To: qemu-devel, aliguori
  Cc: peter.maydell, matrixs.zero, mark.burton, stefanha, cornelia.huck,
	akong, fred.konrad

From: KONRAD Frederic <fred.konrad@greensocs.com>

This adds virtio_net_set_netclient_name, which is used to set the
name and type shown in "info network" command.

Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
---
 hw/net/virtio-net.c            | 45 ++++++++++++++++++++++++++++++++++++++++--
 include/hw/virtio/virtio-net.h |  4 ++++
 2 files changed, 47 insertions(+), 2 deletions(-)

diff --git a/hw/net/virtio-net.c b/hw/net/virtio-net.c
index 9f18d6a..bed0822 100644
--- a/hw/net/virtio-net.c
+++ b/hw/net/virtio-net.c
@@ -1275,6 +1275,29 @@ void virtio_net_set_config_size(VirtIONet *n, uint32_t host_features)
     n->config_size = config_size;
 }
 
+void virtio_net_set_netclient_name(VirtIONet *n, const char *name,
+                                   const char *type)
+{
+    /*
+     * The name can be NULL, the netclient name will be type.x.
+     */
+    assert(type != NULL);
+
+    if (n->netclient_name) {
+        g_free(n->netclient_name);
+        n->netclient_name = NULL;
+    }
+    if (n->netclient_type) {
+        g_free(n->netclient_type);
+        n->netclient_type = NULL;
+    }
+
+    if (name != NULL) {
+        n->netclient_name = g_strdup(name);
+    }
+    n->netclient_type = g_strdup(type);
+}
+
 static int virtio_net_device_init(VirtIODevice *vdev)
 {
     int i;
@@ -1315,8 +1338,17 @@ static int virtio_net_device_init(VirtIODevice *vdev)
     memcpy(&n->mac[0], &n->nic_conf.macaddr, sizeof(n->mac));
     n->status = VIRTIO_NET_S_LINK_UP;
 
-    n->nic = qemu_new_nic(&net_virtio_info, &n->nic_conf,
-                          object_get_typename(OBJECT(qdev)), qdev->id, n);
+    if (n->netclient_type) {
+        /*
+         * Happen when virtio_net_set_netclient_name has been called.
+         */
+        n->nic = qemu_new_nic(&net_virtio_info, &n->nic_conf,
+                              n->netclient_type, n->netclient_name, n);
+    } else {
+        n->nic = qemu_new_nic(&net_virtio_info, &n->nic_conf,
+                              object_get_typename(OBJECT(qdev)), qdev->id, n);
+    }
+
     peer_test_vnet_hdr(n);
     if (peer_has_vnet_hdr(n)) {
         for (i = 0; i < n->max_queues; i++) {
@@ -1357,6 +1389,15 @@ static int virtio_net_device_exit(DeviceState *qdev)
 
     unregister_savevm(qdev, "virtio-net", n);
 
+    if (n->netclient_name) {
+        g_free(n->netclient_name);
+        n->netclient_name = NULL;
+    }
+    if (n->netclient_type) {
+        g_free(n->netclient_type);
+        n->netclient_type = NULL;
+    }
+
     g_free(n->mac_table.macs);
     g_free(n->vlans);
 
diff --git a/include/hw/virtio/virtio-net.h b/include/hw/virtio/virtio-net.h
index ce4ab50..beeead7 100644
--- a/include/hw/virtio/virtio-net.h
+++ b/include/hw/virtio/virtio-net.h
@@ -188,6 +188,8 @@ typedef struct VirtIONet {
     uint16_t max_queues;
     uint16_t curr_queues;
     size_t config_size;
+    char *netclient_name;
+    char *netclient_type;
 } VirtIONet;
 
 #define VIRTIO_NET_CTRL_MAC    1
@@ -255,5 +257,7 @@ struct virtio_net_ctrl_mq {
     DEFINE_PROP_STRING("tx", _state, _field.tx)
 
 void virtio_net_set_config_size(VirtIONet *n, uint32_t host_features);
+void virtio_net_set_netclient_name(VirtIONet *n, const char *name,
+                                   const char *type);
 
 #endif
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [Qemu-devel] [PATCH for-1.5 2/2] virtio-net-x: forward the netclient name and type.
  2013-05-15 12:12 [Qemu-devel] [PATCH for-1.5 0/2] virtio-net: fix netclient id and type fred.konrad
  2013-05-15 12:12 ` [Qemu-devel] [PATCH for-1.5 1/2] virtio-net: add virtio_net_set_netclient_name fred.konrad
@ 2013-05-15 12:12 ` fred.konrad
  2013-05-15 13:16 ` [Qemu-devel] [PATCH for-1.5 0/2] virtio-net: fix netclient id " Stefan Hajnoczi
  2013-05-16 12:50 ` Anthony Liguori
  3 siblings, 0 replies; 7+ messages in thread
From: fred.konrad @ 2013-05-15 12:12 UTC (permalink / raw)
  To: qemu-devel, aliguori
  Cc: peter.maydell, matrixs.zero, mark.burton, stefanha, cornelia.huck,
	akong, fred.konrad

From: KONRAD Frederic <fred.konrad@greensocs.com>

This forwards the name and the type of virtio-net-x to fix the bad
behaviour of "info network" command.

Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
---
 hw/s390x/s390-virtio-bus.c | 3 +++
 hw/s390x/virtio-ccw.c      | 3 +++
 hw/virtio/virtio-pci.c     | 3 +++
 3 files changed, 9 insertions(+)

diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c
index 5a3d97c..a1cdfb0 100644
--- a/hw/s390x/s390-virtio-bus.c
+++ b/hw/s390x/s390-virtio-bus.c
@@ -152,10 +152,13 @@ static int s390_virtio_device_init(VirtIOS390Device *dev, VirtIODevice *vdev)
 
 static int s390_virtio_net_init(VirtIOS390Device *s390_dev)
 {
+    DeviceState *qdev = DEVICE(s390_dev);
     VirtIONetS390 *dev = VIRTIO_NET_S390(s390_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
 
     virtio_net_set_config_size(&dev->vdev, s390_dev->host_features);
+    virtio_net_set_netclient_name(&dev->vdev, qdev->id,
+                                  object_get_typename(OBJECT(qdev)));
     qdev_set_parent_bus(vdev, BUS(&s390_dev->bus));
     if (qdev_init(vdev) < 0) {
         return -1;
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 76e6d32..5f5e267 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -550,10 +550,13 @@ static int virtio_ccw_exit(VirtioCcwDevice *dev)
 
 static int virtio_ccw_net_init(VirtioCcwDevice *ccw_dev)
 {
+    DeviceState *qdev = DEVICE(ccw_dev);
     VirtIONetCcw *dev = VIRTIO_NET_CCW(ccw_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
 
     virtio_net_set_config_size(&dev->vdev, ccw_dev->host_features[0]);
+    virtio_net_set_netclient_name(&dev->vdev, qdev->id,
+                                  object_get_typename(OBJECT(qdev)));
     qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
     if (qdev_init(vdev) < 0) {
         return -1;
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index 113fbd9..70d2c6b 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1398,10 +1398,13 @@ static Property virtio_net_properties[] = {
 
 static int virtio_net_pci_init(VirtIOPCIProxy *vpci_dev)
 {
+    DeviceState *qdev = DEVICE(vpci_dev);
     VirtIONetPCI *dev = VIRTIO_NET_PCI(vpci_dev);
     DeviceState *vdev = DEVICE(&dev->vdev);
 
     virtio_net_set_config_size(&dev->vdev, vpci_dev->host_features);
+    virtio_net_set_netclient_name(&dev->vdev, qdev->id,
+                                  object_get_typename(OBJECT(qdev)));
     qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
     if (qdev_init(vdev) < 0) {
         return -1;
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH for-1.5 1/2] virtio-net: add virtio_net_set_netclient_name.
  2013-05-15 12:12 ` [Qemu-devel] [PATCH for-1.5 1/2] virtio-net: add virtio_net_set_netclient_name fred.konrad
@ 2013-05-15 13:16   ` Stefan Hajnoczi
  2013-05-15 13:28     ` KONRAD Frédéric
  0 siblings, 1 reply; 7+ messages in thread
From: Stefan Hajnoczi @ 2013-05-15 13:16 UTC (permalink / raw)
  To: fred.konrad
  Cc: peter.maydell, aliguori, matrixs.zero, mark.burton, qemu-devel,
	cornelia.huck, akong

On Wed, May 15, 2013 at 02:12:49PM +0200, fred.konrad@greensocs.com wrote:
> @@ -1315,8 +1338,17 @@ static int virtio_net_device_init(VirtIODevice *vdev)
>      memcpy(&n->mac[0], &n->nic_conf.macaddr, sizeof(n->mac));
>      n->status = VIRTIO_NET_S_LINK_UP;
>  
> -    n->nic = qemu_new_nic(&net_virtio_info, &n->nic_conf,
> -                          object_get_typename(OBJECT(qdev)), qdev->id, n);
> +    if (n->netclient_type) {
> +        /*
> +         * Happen when virtio_net_set_netclient_name has been called.
> +         */
> +        n->nic = qemu_new_nic(&net_virtio_info, &n->nic_conf,
> +                              n->netclient_type, n->netclient_name, n);
> +    } else {
> +        n->nic = qemu_new_nic(&net_virtio_info, &n->nic_conf,
> +                              object_get_typename(OBJECT(qdev)), qdev->id, n);
> +    }

Does the 'else' case ever happen?  In the next patch you update all
callers to invoke virtio_net_set_netclient_name().

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH for-1.5 0/2] virtio-net: fix netclient id and type.
  2013-05-15 12:12 [Qemu-devel] [PATCH for-1.5 0/2] virtio-net: fix netclient id and type fred.konrad
  2013-05-15 12:12 ` [Qemu-devel] [PATCH for-1.5 1/2] virtio-net: add virtio_net_set_netclient_name fred.konrad
  2013-05-15 12:12 ` [Qemu-devel] [PATCH for-1.5 2/2] virtio-net-x: forward the netclient name and type fred.konrad
@ 2013-05-15 13:16 ` Stefan Hajnoczi
  2013-05-16 12:50 ` Anthony Liguori
  3 siblings, 0 replies; 7+ messages in thread
From: Stefan Hajnoczi @ 2013-05-15 13:16 UTC (permalink / raw)
  To: fred.konrad
  Cc: peter.maydell, aliguori, matrixs.zero, mark.burton, qemu-devel,
	cornelia.huck, akong

On Wed, May 15, 2013 at 02:12:48PM +0200, fred.konrad@greensocs.com wrote:
> From: KONRAD Frederic <fred.konrad@greensocs.com>
> 
> This fixes this bug: https://bugs.launchpad.net/qemu/+bug/1179357
> 
> The name, and the type is replaced by virtio-net-x's id and virtio-net-x's type
> to restore the behaviour of "info network" command.
> 
> Thanks,
> Fred
> 
> KONRAD Frederic (2):
>   virtio-net: add virtio_net_set_netclient_name.
>   virtio-net-x: forward the netclient name and type.
> 
>  hw/net/virtio-net.c            | 45 ++++++++++++++++++++++++++++++++++++++++--
>  hw/s390x/s390-virtio-bus.c     |  3 +++
>  hw/s390x/virtio-ccw.c          |  3 +++
>  hw/virtio/virtio-pci.c         |  3 +++
>  include/hw/virtio/virtio-net.h |  4 ++++
>  5 files changed, 56 insertions(+), 2 deletions(-)

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH for-1.5 1/2] virtio-net: add virtio_net_set_netclient_name.
  2013-05-15 13:16   ` Stefan Hajnoczi
@ 2013-05-15 13:28     ` KONRAD Frédéric
  0 siblings, 0 replies; 7+ messages in thread
From: KONRAD Frédéric @ 2013-05-15 13:28 UTC (permalink / raw)
  To: Stefan Hajnoczi
  Cc: peter.maydell, aliguori, matrixs.zero, mark.burton, qemu-devel,
	cornelia.huck, akong

On 15/05/2013 15:16, Stefan Hajnoczi wrote:
> On Wed, May 15, 2013 at 02:12:49PM +0200, fred.konrad@greensocs.com wrote:
>> @@ -1315,8 +1338,17 @@ static int virtio_net_device_init(VirtIODevice *vdev)
>>       memcpy(&n->mac[0], &n->nic_conf.macaddr, sizeof(n->mac));
>>       n->status = VIRTIO_NET_S_LINK_UP;
>>   
>> -    n->nic = qemu_new_nic(&net_virtio_info, &n->nic_conf,
>> -                          object_get_typename(OBJECT(qdev)), qdev->id, n);
>> +    if (n->netclient_type) {
>> +        /*
>> +         * Happen when virtio_net_set_netclient_name has been called.
>> +         */
>> +        n->nic = qemu_new_nic(&net_virtio_info, &n->nic_conf,
>> +                              n->netclient_type, n->netclient_name, n);
>> +    } else {
>> +        n->nic = qemu_new_nic(&net_virtio_info, &n->nic_conf,
>> +                              object_get_typename(OBJECT(qdev)), qdev->id, n);
>> +    }
> Does the 'else' case ever happen?  In the next patch you update all
> callers to invoke virtio_net_set_netclient_name().
>

Yes, we made virtio-bus hot-plugguable for virtio-mmio, which won't work 
like pci, s390 or CCW.
So virtio_net_set_netclient_name will not be called in that case.

Maybe worth to remove it and push it with virtio-mmio series? Peter?

Thanks,
Fred

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [Qemu-devel] [PATCH for-1.5 0/2] virtio-net: fix netclient id and type.
  2013-05-15 12:12 [Qemu-devel] [PATCH for-1.5 0/2] virtio-net: fix netclient id and type fred.konrad
                   ` (2 preceding siblings ...)
  2013-05-15 13:16 ` [Qemu-devel] [PATCH for-1.5 0/2] virtio-net: fix netclient id " Stefan Hajnoczi
@ 2013-05-16 12:50 ` Anthony Liguori
  3 siblings, 0 replies; 7+ messages in thread
From: Anthony Liguori @ 2013-05-16 12:50 UTC (permalink / raw)
  To: fred.konrad, qemu-devel, aliguori
  Cc: peter.maydell, matrixs.zero, mark.burton, stefanha, cornelia.huck,
	akong

Applied.  Thanks.

Regards,

Anthony Liguori

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2013-05-16 12:51 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-05-15 12:12 [Qemu-devel] [PATCH for-1.5 0/2] virtio-net: fix netclient id and type fred.konrad
2013-05-15 12:12 ` [Qemu-devel] [PATCH for-1.5 1/2] virtio-net: add virtio_net_set_netclient_name fred.konrad
2013-05-15 13:16   ` Stefan Hajnoczi
2013-05-15 13:28     ` KONRAD Frédéric
2013-05-15 12:12 ` [Qemu-devel] [PATCH for-1.5 2/2] virtio-net-x: forward the netclient name and type fred.konrad
2013-05-15 13:16 ` [Qemu-devel] [PATCH for-1.5 0/2] virtio-net: fix netclient id " Stefan Hajnoczi
2013-05-16 12:50 ` Anthony Liguori

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).