qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] virtio: set virtio-net/virtio-mmio host features
       [not found] <52FD328A.40605@samsung.com>
@ 2014-02-13 21:13 ` Mario Smarduch
  2014-02-14 23:49   ` Peter Maydell
  0 siblings, 1 reply; 11+ messages in thread
From: Mario Smarduch @ 2014-02-13 21:13 UTC (permalink / raw)
  To: qemu-devel; +Cc: peter.maydell, m.smarduch, patches

virtio: set virtio-net/virtio-mmio host features

Patch sets 'virtio-net/virtio-mmio' host features to enable network
features based on peer capabilities. Currently host features turn
of all features by default.

Signed-off-by: Mario Smarduch <m.smarduch@samsung.com>
---
 hw/virtio/virtio-mmio.c |   29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c
index 8829eb0..1d940b7 100644
--- a/hw/virtio/virtio-mmio.c
+++ b/hw/virtio/virtio-mmio.c
@@ -23,6 +23,7 @@
 #include "hw/virtio/virtio.h"
 #include "qemu/host-utils.h"
 #include "hw/virtio/virtio-bus.h"
+#include "hw/virtio/virtio-net.h"

 /* #define DEBUG_VIRTIO_MMIO */

@@ -92,6 +93,12 @@ typedef struct {
 static void virtio_mmio_bus_new(VirtioBusState *bus, size_t bus_size,
                                 VirtIOMMIOProxy *dev);

+/* all possible virtio-net features supported */
+static Property virtio_mmio_net_properties[] = {
+    DEFINE_VIRTIO_NET_FEATURES(VirtIOMMIOProxy, host_features),
+    DEFINE_PROP_END_OF_LIST(),
+};
+
 static uint64_t virtio_mmio_read(void *opaque, hwaddr offset, unsigned size)
 {
     VirtIOMMIOProxy *proxy = (VirtIOMMIOProxy *)opaque;
@@ -347,11 +354,33 @@ static void virtio_mmio_reset(DeviceState *d)

 /* virtio-mmio device */

+/* Walk virtio-net possible supported features and set host_features, this
+ * should be done earlier when the object is instantiated but at that point
+ * you don't know what type of device will be plugged in.
+ */
+static void virtio_mmio_set_net_features(Property *prop, uint32_t *features)
+{
+    for (; prop && prop->name; prop++) {
+        if (prop->defval == true) {
+            *features |= (1 << prop->bitnr);
+        }  else  {
+            *features &= ~(1 << prop->bitnr);
+        }
+    }
+}
+
 /* This is called by virtio-bus just after the device is plugged. */
 static void virtio_mmio_device_plugged(DeviceState *opaque)
 {
     VirtIOMMIOProxy *proxy = VIRTIO_MMIO(opaque);
+    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
+    Object *obj = OBJECT(vdev);

+    /* set host features only for virtio-net */
+    if (object_dynamic_cast(obj, TYPE_VIRTIO_NET)) {
+        virtio_mmio_set_net_features(virtio_mmio_net_properties,
+                                                        &proxy->host_features);
+    }
     proxy->host_features |= (0x1 << VIRTIO_F_NOTIFY_ON_EMPTY);
     proxy->host_features = virtio_bus_get_vdev_features(&proxy->bus,
                                                         proxy->host_features);
-- 
1.7.9.5

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

* Re: [Qemu-devel] [PATCH] virtio: set virtio-net/virtio-mmio host features
  2014-02-13 21:13 ` [Qemu-devel] [PATCH] virtio: set virtio-net/virtio-mmio host features Mario Smarduch
@ 2014-02-14 23:49   ` Peter Maydell
  2014-02-20 18:12     ` Mario Smarduch
  0 siblings, 1 reply; 11+ messages in thread
From: Peter Maydell @ 2014-02-14 23:49 UTC (permalink / raw)
  To: Mario Smarduch
  Cc: KONRAD Frédéric, Michael S. Tsirkin, QEMU Developers,
	Anthony Liguori, Patch Tracking

CCing the virtio maintainers.

thanks
-- PMM

On 13 February 2014 21:13, Mario Smarduch <m.smarduch@samsung.com> wrote:
> virtio: set virtio-net/virtio-mmio host features
>
> Patch sets 'virtio-net/virtio-mmio' host features to enable network
> features based on peer capabilities. Currently host features turn
> of all features by default.
>
> Signed-off-by: Mario Smarduch <m.smarduch@samsung.com>
> ---
>  hw/virtio/virtio-mmio.c |   29 +++++++++++++++++++++++++++++
>  1 file changed, 29 insertions(+)
>
> diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c
> index 8829eb0..1d940b7 100644
> --- a/hw/virtio/virtio-mmio.c
> +++ b/hw/virtio/virtio-mmio.c
> @@ -23,6 +23,7 @@
>  #include "hw/virtio/virtio.h"
>  #include "qemu/host-utils.h"
>  #include "hw/virtio/virtio-bus.h"
> +#include "hw/virtio/virtio-net.h"
>
>  /* #define DEBUG_VIRTIO_MMIO */
>
> @@ -92,6 +93,12 @@ typedef struct {
>  static void virtio_mmio_bus_new(VirtioBusState *bus, size_t bus_size,
>                                  VirtIOMMIOProxy *dev);
>
> +/* all possible virtio-net features supported */
> +static Property virtio_mmio_net_properties[] = {
> +    DEFINE_VIRTIO_NET_FEATURES(VirtIOMMIOProxy, host_features),
> +    DEFINE_PROP_END_OF_LIST(),
> +};
> +
>  static uint64_t virtio_mmio_read(void *opaque, hwaddr offset, unsigned size)
>  {
>      VirtIOMMIOProxy *proxy = (VirtIOMMIOProxy *)opaque;
> @@ -347,11 +354,33 @@ static void virtio_mmio_reset(DeviceState *d)
>
>  /* virtio-mmio device */
>
> +/* Walk virtio-net possible supported features and set host_features, this
> + * should be done earlier when the object is instantiated but at that point
> + * you don't know what type of device will be plugged in.
> + */
> +static void virtio_mmio_set_net_features(Property *prop, uint32_t *features)
> +{
> +    for (; prop && prop->name; prop++) {
> +        if (prop->defval == true) {
> +            *features |= (1 << prop->bitnr);
> +        }  else  {
> +            *features &= ~(1 << prop->bitnr);
> +        }
> +    }
> +}
> +
>  /* This is called by virtio-bus just after the device is plugged. */
>  static void virtio_mmio_device_plugged(DeviceState *opaque)
>  {
>      VirtIOMMIOProxy *proxy = VIRTIO_MMIO(opaque);
> +    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
> +    Object *obj = OBJECT(vdev);
>
> +    /* set host features only for virtio-net */
> +    if (object_dynamic_cast(obj, TYPE_VIRTIO_NET)) {
> +        virtio_mmio_set_net_features(virtio_mmio_net_properties,
> +                                                        &proxy->host_features);
> +    }
>      proxy->host_features |= (0x1 << VIRTIO_F_NOTIFY_ON_EMPTY);
>      proxy->host_features = virtio_bus_get_vdev_features(&proxy->bus,
>                                                          proxy->host_features);
> --
> 1.7.9.5
>

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

* Re: [Qemu-devel] [PATCH] virtio: set virtio-net/virtio-mmio host features
  2014-02-14 23:49   ` Peter Maydell
@ 2014-02-20 18:12     ` Mario Smarduch
  2014-02-20 18:30       ` Peter Maydell
  0 siblings, 1 reply; 11+ messages in thread
From: Mario Smarduch @ 2014-02-20 18:12 UTC (permalink / raw)
  To: Peter Maydell
  Cc: KONRAD Frédéric, Michael S. Tsirkin, QEMU Developers,
	Anthony Liguori, Patch Tracking


Hello,

any feedback on this patch, after a brief email exchange Anthony deferred to
Peter. 

Lack of improper host features handling lowers 1g & 10g performance 
substantially on arm-kvm compared to xeon. 

We would like to have this fixed so we don't have to patch every new release
of qemu, especially virtio stuff.

- Mario

On 02/14/2014 03:49 PM, Peter Maydell wrote:
> CCing the virtio maintainers.
> 
> thanks
> -- PMM
> 
> On 13 February 2014 21:13, Mario Smarduch <m.smarduch@samsung.com> wrote:
>> virtio: set virtio-net/virtio-mmio host features
>>
>> Patch sets 'virtio-net/virtio-mmio' host features to enable network
>> features based on peer capabilities. Currently host features turn
>> of all features by default.
>>
>> Signed-off-by: Mario Smarduch <m.smarduch@samsung.com>
>> ---
>>  hw/virtio/virtio-mmio.c |   29 +++++++++++++++++++++++++++++
>>  1 file changed, 29 insertions(+)
>>
>> diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c
>> index 8829eb0..1d940b7 100644
>> --- a/hw/virtio/virtio-mmio.c
>> +++ b/hw/virtio/virtio-mmio.c
>> @@ -23,6 +23,7 @@
>>  #include "hw/virtio/virtio.h"
>>  #include "qemu/host-utils.h"
>>  #include "hw/virtio/virtio-bus.h"
>> +#include "hw/virtio/virtio-net.h"
>>
>>  /* #define DEBUG_VIRTIO_MMIO */
>>
>> @@ -92,6 +93,12 @@ typedef struct {
>>  static void virtio_mmio_bus_new(VirtioBusState *bus, size_t bus_size,
>>                                  VirtIOMMIOProxy *dev);
>>
>> +/* all possible virtio-net features supported */
>> +static Property virtio_mmio_net_properties[] = {
>> +    DEFINE_VIRTIO_NET_FEATURES(VirtIOMMIOProxy, host_features),
>> +    DEFINE_PROP_END_OF_LIST(),
>> +};
>> +
>>  static uint64_t virtio_mmio_read(void *opaque, hwaddr offset, unsigned size)
>>  {
>>      VirtIOMMIOProxy *proxy = (VirtIOMMIOProxy *)opaque;
>> @@ -347,11 +354,33 @@ static void virtio_mmio_reset(DeviceState *d)
>>
>>  /* virtio-mmio device */
>>
>> +/* Walk virtio-net possible supported features and set host_features, this
>> + * should be done earlier when the object is instantiated but at that point
>> + * you don't know what type of device will be plugged in.
>> + */
>> +static void virtio_mmio_set_net_features(Property *prop, uint32_t *features)
>> +{
>> +    for (; prop && prop->name; prop++) {
>> +        if (prop->defval == true) {
>> +            *features |= (1 << prop->bitnr);
>> +        }  else  {
>> +            *features &= ~(1 << prop->bitnr);
>> +        }
>> +    }
>> +}
>> +
>>  /* This is called by virtio-bus just after the device is plugged. */
>>  static void virtio_mmio_device_plugged(DeviceState *opaque)
>>  {
>>      VirtIOMMIOProxy *proxy = VIRTIO_MMIO(opaque);
>> +    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
>> +    Object *obj = OBJECT(vdev);
>>
>> +    /* set host features only for virtio-net */
>> +    if (object_dynamic_cast(obj, TYPE_VIRTIO_NET)) {
>> +        virtio_mmio_set_net_features(virtio_mmio_net_properties,
>> +                                                        &proxy->host_features);
>> +    }
>>      proxy->host_features |= (0x1 << VIRTIO_F_NOTIFY_ON_EMPTY);
>>      proxy->host_features = virtio_bus_get_vdev_features(&proxy->bus,
>>                                                          proxy->host_features);
>> --
>> 1.7.9.5
>>

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

* Re: [Qemu-devel] [PATCH] virtio: set virtio-net/virtio-mmio host features
  2014-02-20 18:12     ` Mario Smarduch
@ 2014-02-20 18:30       ` Peter Maydell
  2014-02-20 19:09         ` Mario Smarduch
  0 siblings, 1 reply; 11+ messages in thread
From: Peter Maydell @ 2014-02-20 18:30 UTC (permalink / raw)
  To: Mario Smarduch
  Cc: KONRAD Frédéric, Michael S. Tsirkin, QEMU Developers,
	Anthony Liguori, Patch Tracking

On 20 February 2014 18:12, Mario Smarduch <m.smarduch@samsung.com> wrote:
>
> Hello,
>
> any feedback on this patch, after a brief email exchange Anthony deferred to
> Peter.
>
> Lack of improper host features handling lowers 1g & 10g performance
> substantially on arm-kvm compared to xeon.
>
> We would like to have this fixed so we don't have to patch every new release
> of qemu, especially virtio stuff.

I don't know enough about virtio to review, really, but
I'll have a go:

>> On 13 February 2014 21:13, Mario Smarduch <m.smarduch@samsung.com> wrote:
>>> virtio: set virtio-net/virtio-mmio host features
>>>
>>> Patch sets 'virtio-net/virtio-mmio' host features to enable network
>>> features based on peer capabilities. Currently host features turn
>>> of all features by default.
>>>
>>> Signed-off-by: Mario Smarduch <m.smarduch@samsung.com>
>>> ---
>>>  hw/virtio/virtio-mmio.c |   29 +++++++++++++++++++++++++++++
>>>  1 file changed, 29 insertions(+)
>>>
>>> diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c
>>> index 8829eb0..1d940b7 100644
>>> --- a/hw/virtio/virtio-mmio.c
>>> +++ b/hw/virtio/virtio-mmio.c
>>> @@ -23,6 +23,7 @@
>>>  #include "hw/virtio/virtio.h"
>>>  #include "qemu/host-utils.h"
>>>  #include "hw/virtio/virtio-bus.h"
>>> +#include "hw/virtio/virtio-net.h"
>>>
>>>  /* #define DEBUG_VIRTIO_MMIO */
>>>
>>> @@ -92,6 +93,12 @@ typedef struct {
>>>  static void virtio_mmio_bus_new(VirtioBusState *bus, size_t bus_size,
>>>                                  VirtIOMMIOProxy *dev);
>>>
>>> +/* all possible virtio-net features supported */
>>> +static Property virtio_mmio_net_properties[] = {
>>> +    DEFINE_VIRTIO_NET_FEATURES(VirtIOMMIOProxy, host_features),
>>> +    DEFINE_PROP_END_OF_LIST(),
>>> +};
>>> +
>>>  static uint64_t virtio_mmio_read(void *opaque, hwaddr offset, unsigned size)
>>>  {
>>>      VirtIOMMIOProxy *proxy = (VirtIOMMIOProxy *)opaque;
>>> @@ -347,11 +354,33 @@ static void virtio_mmio_reset(DeviceState *d)
>>>
>>>  /* virtio-mmio device */
>>>
>>> +/* Walk virtio-net possible supported features and set host_features, this
>>> + * should be done earlier when the object is instantiated but at that point
>>> + * you don't know what type of device will be plugged in.
>>> + */
>>> +static void virtio_mmio_set_net_features(Property *prop, uint32_t *features)
>>> +{
>>> +    for (; prop && prop->name; prop++) {
>>> +        if (prop->defval == true) {
>>> +            *features |= (1 << prop->bitnr);
>>> +        }  else  {
>>> +            *features &= ~(1 << prop->bitnr);
>>> +        }
>>> +    }
>>> +}
>>> +
>>>  /* This is called by virtio-bus just after the device is plugged. */
>>>  static void virtio_mmio_device_plugged(DeviceState *opaque)
>>>  {
>>>      VirtIOMMIOProxy *proxy = VIRTIO_MMIO(opaque);
>>> +    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
>>> +    Object *obj = OBJECT(vdev);
>>>
>>> +    /* set host features only for virtio-net */
>>> +    if (object_dynamic_cast(obj, TYPE_VIRTIO_NET)) {
>>> +        virtio_mmio_set_net_features(virtio_mmio_net_properties,
>>> +                                                        &proxy->host_features);
>>> +    }

This looks weird. We already have a mechanism for saying
"hey the thing we just plugged in gets to tell us about
feature bits":

>>>      proxy->host_features |= (0x1 << VIRTIO_F_NOTIFY_ON_EMPTY);
>>>      proxy->host_features = virtio_bus_get_vdev_features(&proxy->bus,
>>>                                                          proxy->host_features);

...this is making an indirect call to the backend device's
get_features method, which for virtio-net is
virtio_net_get_features(). Why should the transport
need special case code for virtio-net backends?

thanks
-- PMM

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

* Re: [Qemu-devel] [PATCH] virtio: set virtio-net/virtio-mmio host features
  2014-02-20 18:30       ` Peter Maydell
@ 2014-02-20 19:09         ` Mario Smarduch
  2014-02-20 19:35           ` Peter Maydell
  0 siblings, 1 reply; 11+ messages in thread
From: Mario Smarduch @ 2014-02-20 19:09 UTC (permalink / raw)
  To: Peter Maydell
  Cc: KONRAD Frédéric, Michael S. Tsirkin, QEMU Developers,
	Anthony Liguori, Patch Tracking

Peter thanks.

Questionable in this patch - is cutting through several layers to set
proxy properties. They should be set from "device" instance init
before it's realized. The problem though is that unlike PCI
that sets proxy and virtio-net properties via its virtio_net_properites[],
the virtio-mmio version instantiates the proxy in the machine model,
so it doesn't appear to be good place to set virtio-net
host features since you don't know what virtio device will be plugged
in later. It's virtio_net_properties[] can only set virtio-net
properites when it's instantiated. I think the proper way would
be to refactor virtio-mmio to similar structure PCI version uses then
one virtio_net_properties[] can be used selecting PCI or virtio-mmio at
compile time. But right now it's unclear to me how pci and virtio-mmio
versions intend to co-exist. I'm fairly new to qemu community.

- Mario

On 02/20/2014 10:30 AM, Peter Maydell wrote:
> On 20 February 2014 18:12, Mario Smarduch <m.smarduch@samsung.com> wrote:
>>
>> Hello,
>>
>> any feedback on this patch, after a brief email exchange Anthony deferred to
>> Peter.
>>
>> Lack of improper host features handling lowers 1g & 10g performance
>> substantially on arm-kvm compared to xeon.
>>
>> We would like to have this fixed so we don't have to patch every new release
>> of qemu, especially virtio stuff.
> 
> I don't know enough about virtio to review, really, but
> I'll have a go:
> 
>>> On 13 February 2014 21:13, Mario Smarduch <m.smarduch@samsung.com> wrote:
>>>> virtio: set virtio-net/virtio-mmio host features
>>>>
>>>> Patch sets 'virtio-net/virtio-mmio' host features to enable network
>>>> features based on peer capabilities. Currently host features turn
>>>> of all features by default.
>>>>
>>>> Signed-off-by: Mario Smarduch <m.smarduch@samsung.com>
>>>> ---
>>>>  hw/virtio/virtio-mmio.c |   29 +++++++++++++++++++++++++++++
>>>>  1 file changed, 29 insertions(+)
>>>>
>>>> diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c
>>>> index 8829eb0..1d940b7 100644
>>>> --- a/hw/virtio/virtio-mmio.c
>>>> +++ b/hw/virtio/virtio-mmio.c
>>>> @@ -23,6 +23,7 @@
>>>>  #include "hw/virtio/virtio.h"
>>>>  #include "qemu/host-utils.h"
>>>>  #include "hw/virtio/virtio-bus.h"
>>>> +#include "hw/virtio/virtio-net.h"
>>>>
>>>>  /* #define DEBUG_VIRTIO_MMIO */
>>>>
>>>> @@ -92,6 +93,12 @@ typedef struct {
>>>>  static void virtio_mmio_bus_new(VirtioBusState *bus, size_t bus_size,
>>>>                                  VirtIOMMIOProxy *dev);
>>>>
>>>> +/* all possible virtio-net features supported */
>>>> +static Property virtio_mmio_net_properties[] = {
>>>> +    DEFINE_VIRTIO_NET_FEATURES(VirtIOMMIOProxy, host_features),
>>>> +    DEFINE_PROP_END_OF_LIST(),
>>>> +};
>>>> +
>>>>  static uint64_t virtio_mmio_read(void *opaque, hwaddr offset, unsigned size)
>>>>  {
>>>>      VirtIOMMIOProxy *proxy = (VirtIOMMIOProxy *)opaque;
>>>> @@ -347,11 +354,33 @@ static void virtio_mmio_reset(DeviceState *d)
>>>>
>>>>  /* virtio-mmio device */
>>>>
>>>> +/* Walk virtio-net possible supported features and set host_features, this
>>>> + * should be done earlier when the object is instantiated but at that point
>>>> + * you don't know what type of device will be plugged in.
>>>> + */
>>>> +static void virtio_mmio_set_net_features(Property *prop, uint32_t *features)
>>>> +{
>>>> +    for (; prop && prop->name; prop++) {
>>>> +        if (prop->defval == true) {
>>>> +            *features |= (1 << prop->bitnr);
>>>> +        }  else  {
>>>> +            *features &= ~(1 << prop->bitnr);
>>>> +        }
>>>> +    }
>>>> +}
>>>> +
>>>>  /* This is called by virtio-bus just after the device is plugged. */
>>>>  static void virtio_mmio_device_plugged(DeviceState *opaque)
>>>>  {
>>>>      VirtIOMMIOProxy *proxy = VIRTIO_MMIO(opaque);
>>>> +    VirtIODevice *vdev = virtio_bus_get_device(&proxy->bus);
>>>> +    Object *obj = OBJECT(vdev);
>>>>
>>>> +    /* set host features only for virtio-net */
>>>> +    if (object_dynamic_cast(obj, TYPE_VIRTIO_NET)) {
>>>> +        virtio_mmio_set_net_features(virtio_mmio_net_properties,
>>>> +                                                        &proxy->host_features);
>>>> +    }
> 
> This looks weird. We already have a mechanism for saying
> "hey the thing we just plugged in gets to tell us about
> feature bits":
> 
>>>>      proxy->host_features |= (0x1 << VIRTIO_F_NOTIFY_ON_EMPTY);
>>>>      proxy->host_features = virtio_bus_get_vdev_features(&proxy->bus,
>>>>                                                          proxy->host_features);
> 
> ...this is making an indirect call to the backend device's
> get_features method, which for virtio-net is
> virtio_net_get_features(). Why should the transport
> need special case code for virtio-net backends?
> 
> thanks
> -- PMM
> 

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

* Re: [Qemu-devel] [PATCH] virtio: set virtio-net/virtio-mmio host features
  2014-02-20 19:09         ` Mario Smarduch
@ 2014-02-20 19:35           ` Peter Maydell
  2014-02-20 21:59             ` Mario Smarduch
  0 siblings, 1 reply; 11+ messages in thread
From: Peter Maydell @ 2014-02-20 19:35 UTC (permalink / raw)
  To: Mario Smarduch
  Cc: KONRAD Frédéric, Michael S. Tsirkin, QEMU Developers,
	Anthony Liguori, Patch Tracking

On 20 February 2014 19:09, Mario Smarduch <m.smarduch@samsung.com> wrote:
> Questionable in this patch - is cutting through several layers to set
> proxy properties. They should be set from "device" instance init
> before it's realized. The problem though is that unlike PCI
> that sets proxy and virtio-net properties via its virtio_net_properites[],
> the virtio-mmio version instantiates the proxy in the machine model,
> so it doesn't appear to be good place to set virtio-net
> host features since you don't know what virtio device will be plugged
> in later.

I think this function is the right place to set these properties,
yes. What I'm saying is that I don't see why you're doing it
this way rather than using the existing per-backend hook.
Maybe there's a reason not to use that hook, but you don't say.

> It's virtio_net_properties[] can only set virtio-net
> properites when it's instantiated. I think the proper way would
> be to refactor virtio-mmio to similar structure PCI version uses then
> one virtio_net_properties[] can be used selecting PCI or virtio-mmio at
> compile time. But right now it's unclear to me how pci and virtio-mmio
> versions intend to co-exist.

This is the result of a refactoring last year to allow virtio-mmio.
Basically the underlying structure now is:

 [some virtio transport device] <- virtio bus -> [virtio backend]

where the transport could be mmio, PCI, CCW, etc, and the
backend is net, blk, balloon, etc. We also provide devices
which are "virtio PCI transport plus a specific backend"
for (a) user convenience and (b) backwards compatibility, since
the pre-refactoring structure put the transport and backend
all in one lump. The all-in-one-lump arrangement is legacy:
we shouldn't break it, but it's not the model for virtio-mmio
to follow either.

The transport shouldn't know anything specific about the
backend it's plugged into (or vice-versa), but it's fine
for there to be hook functions so the transport and backend
can call each other at the appropriate times.

thanks
-- PMM

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

* Re: [Qemu-devel] [PATCH] virtio: set virtio-net/virtio-mmio host features
  2014-02-20 19:35           ` Peter Maydell
@ 2014-02-20 21:59             ` Mario Smarduch
  2014-02-20 22:10               ` Peter Maydell
  0 siblings, 1 reply; 11+ messages in thread
From: Mario Smarduch @ 2014-02-20 21:59 UTC (permalink / raw)
  To: Peter Maydell
  Cc: KONRAD Frédéric, Michael S. Tsirkin, QEMU Developers,
	Anthony Liguori, Patch Tracking

On 02/20/2014 11:35 AM, Peter Maydell wrote:
> On 20 February 2014 19:09, Mario Smarduch <m.smarduch@samsung.com> wrote:
>> host features since you don't know what virtio device will be plugged
>> in later.
> 
> I think this function is the right place to set these properties,
> yes. What I'm saying is that I don't see why you're doing it
> this way rather than using the existing per-backend hook.
> Maybe there's a reason not to use that hook, but you don't say.
> 

Appears virtio-net beckend hooks are common to several transports, 
and would require virtio-mmio exception to set the host_features. 
If I'm missing something please recommend.

>> It's virtio_net_properties[] can only set virtio-net
>> properites when it's instantiated. I think the proper way would
>> be to refactor virtio-mmio to similar structure PCI version uses then
>> one virtio_net_properties[] can be used selecting PCI or virtio-mmio at
>> compile time. But right now it's unclear to me how pci and virtio-mmio
>> versions intend to co-exist.

> 
> This is the result of a refactoring last year to allow virtio-mmio.
> Basically the underlying structure now is:
> 
>  [some virtio transport device] <- virtio bus -> [virtio backend]
> 
> where the transport could be mmio, PCI, CCW, etc, and the
> backend is net, blk, balloon, etc. We also provide devices
> which are "virtio PCI transport plus a specific backend"
> for (a) user convenience and (b) backwards compatibility, since
> the pre-refactoring structure put the transport and backend
> all in one lump. The all-in-one-lump arrangement is legacy:
> we shouldn't break it, but it's not the model for virtio-mmio
> to follow either.
> 
> The transport shouldn't know anything specific about the
> backend it's plugged into (or vice-versa), but it's fine
> for there to be hook functions so the transport and backend
> can call each other at the appropriate times.
> 
> thanks
> -- PMM
> 

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

* Re: [Qemu-devel] [PATCH] virtio: set virtio-net/virtio-mmio host features
  2014-02-20 21:59             ` Mario Smarduch
@ 2014-02-20 22:10               ` Peter Maydell
  2014-02-20 22:36                 ` Mario Smarduch
  0 siblings, 1 reply; 11+ messages in thread
From: Peter Maydell @ 2014-02-20 22:10 UTC (permalink / raw)
  To: Mario Smarduch
  Cc: KONRAD Frédéric, Michael S. Tsirkin, QEMU Developers,
	Anthony Liguori, Patch Tracking

On 20 February 2014 21:59, Mario Smarduch <m.smarduch@samsung.com> wrote:
> On 02/20/2014 11:35 AM, Peter Maydell wrote:
>> On 20 February 2014 19:09, Mario Smarduch <m.smarduch@samsung.com> wrote:
>>> host features since you don't know what virtio device will be plugged
>>> in later.
>>
>> I think this function is the right place to set these properties,
>> yes. What I'm saying is that I don't see why you're doing it
>> this way rather than using the existing per-backend hook.
>> Maybe there's a reason not to use that hook, but you don't say.
>>
>
> Appears virtio-net beckend hooks are common to several transports,
> and would require virtio-mmio exception to set the host_features.
> If I'm missing something please recommend.

Yes, they're supposed to be common across transports, because
the backend isn't supposed to care about which transport in
particular. If there's a condition where the backend needs to
do something which only happens for one transport, maybe we
need a new hook.

thanks
-- PMM

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

* Re: [Qemu-devel] [PATCH] virtio: set virtio-net/virtio-mmio host features
  2014-02-20 22:10               ` Peter Maydell
@ 2014-02-20 22:36                 ` Mario Smarduch
  2014-02-20 22:47                   ` Peter Maydell
  0 siblings, 1 reply; 11+ messages in thread
From: Mario Smarduch @ 2014-02-20 22:36 UTC (permalink / raw)
  To: Peter Maydell
  Cc: KONRAD Frédéric, Michael S. Tsirkin, QEMU Developers,
	Anthony Liguori, Patch Tracking

On 02/20/2014 02:10 PM, Peter Maydell wrote:
> On 20 February 2014 21:59, Mario Smarduch <m.smarduch@samsung.com> wrote:
>> On 02/20/2014 11:35 AM, Peter Maydell wrote:
>>> On 20 February 2014 19:09, Mario Smarduch <m.smarduch@samsung.com> wrote:
>>>> host features since you don't know what virtio device will be plugged
>>>> in later.
>>>
>>> I think this function is the right place to set these properties,
>>> yes. What I'm saying is that I don't see why you're doing it
>>> this way rather than using the existing per-backend hook.
>>> Maybe there's a reason not to use that hook, but you don't say.
>>>
>>
>> Appears virtio-net beckend hooks are common to several transports,
>> and would require virtio-mmio exception to set the host_features.
>> If I'm missing something please recommend.
> 
> Yes, they're supposed to be common across transports, because
> the backend isn't supposed to care about which transport in
> particular. If there's a condition where the backend needs to
> do something which only happens for one transport, maybe we
> need a new hook.

So something like set_transport_features(...) in VirtiIODeviceClass,
and call it from the realize hook where you can access
the virtio-mmio transport class instance.

> 
> thanks
> -- PMM
> 

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

* Re: [Qemu-devel] [PATCH] virtio: set virtio-net/virtio-mmio host features
  2014-02-20 22:36                 ` Mario Smarduch
@ 2014-02-20 22:47                   ` Peter Maydell
  2014-02-20 23:17                     ` Mario Smarduch
  0 siblings, 1 reply; 11+ messages in thread
From: Peter Maydell @ 2014-02-20 22:47 UTC (permalink / raw)
  To: Mario Smarduch
  Cc: KONRAD Frédéric, Michael S. Tsirkin, QEMU Developers,
	Anthony Liguori, Patch Tracking

On 20 February 2014 22:36, Mario Smarduch <m.smarduch@samsung.com> wrote:
> On 02/20/2014 02:10 PM, Peter Maydell wrote:
>> On 20 February 2014 21:59, Mario Smarduch <m.smarduch@samsung.com> wrote:
>>> On 02/20/2014 11:35 AM, Peter Maydell wrote:
>>>> On 20 February 2014 19:09, Mario Smarduch <m.smarduch@samsung.com> wrote:
>>>>> host features since you don't know what virtio device will be plugged
>>>>> in later.
>>>>
>>>> I think this function is the right place to set these properties,
>>>> yes. What I'm saying is that I don't see why you're doing it
>>>> this way rather than using the existing per-backend hook.
>>>> Maybe there's a reason not to use that hook, but you don't say.
>>>>
>>>
>>> Appears virtio-net beckend hooks are common to several transports,
>>> and would require virtio-mmio exception to set the host_features.
>>> If I'm missing something please recommend.
>>
>> Yes, they're supposed to be common across transports, because
>> the backend isn't supposed to care about which transport in
>> particular. If there's a condition where the backend needs to
>> do something which only happens for one transport, maybe we
>> need a new hook.
>
> So something like set_transport_features(...) in VirtiIODeviceClass,
> and call it from the realize hook where you can access
> the virtio-mmio transport class instance.

Not sure. You should probably also look at whether connecting
a virtio-pci transport to a virtio-net backend gets these feature
bits wrong (that's different from instantiating a single virtio-net-pci
device). I suspect they both get this wrong and this isn't particularly
virtio-mmio specific.

thanks
-- PMM

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

* Re: [Qemu-devel] [PATCH] virtio: set virtio-net/virtio-mmio host features
  2014-02-20 22:47                   ` Peter Maydell
@ 2014-02-20 23:17                     ` Mario Smarduch
  0 siblings, 0 replies; 11+ messages in thread
From: Mario Smarduch @ 2014-02-20 23:17 UTC (permalink / raw)
  To: Peter Maydell
  Cc: KONRAD Frédéric, Michael S. Tsirkin, QEMU Developers,
	Anthony Liguori, Patch Tracking

On 02/20/2014 02:47 PM, Peter Maydell wrote:
> On 20 February 2014 22:36, Mario Smarduch <m.smarduch@samsung.com> wrote:
>> On 02/20/2014 02:10 PM, Peter Maydell wrote:
>>> On 20 February 2014 21:59, Mario Smarduch <m.smarduch@samsung.com> wrote:
>>>> On 02/20/2014 11:35 AM, Peter Maydell wrote:
>>>>> On 20 February 2014 19:09, Mario Smarduch <m.smarduch@samsung.com> wrote:
>>>>>> host features since you don't know what virtio device will be plugged
>>>>>> in later.
>>>>>
>>>>> I think this function is the right place to set these properties,
>>>>> yes. What I'm saying is that I don't see why you're doing it
>>>>> this way rather than using the existing per-backend hook.
>>>>> Maybe there's a reason not to use that hook, but you don't say.
>>>>>
>>>>
>>>> Appears virtio-net beckend hooks are common to several transports,
>>>> and would require virtio-mmio exception to set the host_features.
>>>> If I'm missing something please recommend.
>>>
>>> Yes, they're supposed to be common across transports, because
>>> the backend isn't supposed to care about which transport in
>>> particular. If there's a condition where the backend needs to
>>> do something which only happens for one transport, maybe we
>>> need a new hook.
>>
>> So something like set_transport_features(...) in VirtiIODeviceClass,
>> and call it from the realize hook where you can access
>> the virtio-mmio transport class instance.
> 
> Not sure. You should probably also look at whether connecting
> a virtio-pci transport to a virtio-net backend gets these feature
> bits wrong (that's different from instantiating a single virtio-net-pci
> device). I suspect they both get this wrong and this isn't particularly
> virtio-mmio specific.
> 
> thanks
> -- PMM
> 

It appears separate pci transport/virtio-net backend have the same issue.
I'll look at this closer for a more generic solution.

Thanks,
  Mario

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

end of thread, other threads:[~2014-02-20 23:17 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <52FD328A.40605@samsung.com>
2014-02-13 21:13 ` [Qemu-devel] [PATCH] virtio: set virtio-net/virtio-mmio host features Mario Smarduch
2014-02-14 23:49   ` Peter Maydell
2014-02-20 18:12     ` Mario Smarduch
2014-02-20 18:30       ` Peter Maydell
2014-02-20 19:09         ` Mario Smarduch
2014-02-20 19:35           ` Peter Maydell
2014-02-20 21:59             ` Mario Smarduch
2014-02-20 22:10               ` Peter Maydell
2014-02-20 22:36                 ` Mario Smarduch
2014-02-20 22:47                   ` Peter Maydell
2014-02-20 23:17                     ` Mario Smarduch

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).