diff mbox

virtio-s390: add a reset function to virtio-s390 devices

Message ID 1357828825-2414-1-git-send-email-pbonzini@redhat.com
State New
Headers show

Commit Message

Paolo Bonzini Jan. 10, 2013, 2:40 p.m. UTC
virtio-s390 devices are not being reset when their bus is.  To fix
this, add a reset method that forwards to virtio_reset.  This is
only needed because of the "strange" modeling of virtio devices;
the ->vdev link is being handled manually rather than through qdev.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 hw/s390-virtio-bus.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Michael Roth Jan. 16, 2013, 4:52 a.m. UTC | #1
On Thu, Jan 10, 2013 at 03:40:25PM +0100, Paolo Bonzini wrote:
> virtio-s390 devices are not being reset when their bus is.  To fix
> this, add a reset method that forwards to virtio_reset.  This is
> only needed because of the "strange" modeling of virtio devices;
> the ->vdev link is being handled manually rather than through qdev.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Ping. This fix doesn't appear to be upstream yet and I'm also looking to get
this in for 1.3.1.

(hint: `patches search tag:unapplied to:qemu-stable` :)

> ---
>  hw/s390-virtio-bus.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c
> index 7e99175..1e3e4f0 100644
> --- a/hw/s390-virtio-bus.c
> +++ b/hw/s390-virtio-bus.c
> @@ -505,6 +505,13 @@ static int s390_virtio_busdev_init(DeviceState *dev)
>      return _info->init(_dev);
>  }
> 
> +static void s390_virtio_busdev_reset(DeviceState *dev)
> +{
> +    VirtIOS390Device *_dev = (VirtIOS390Device *)dev;
> +
> +    virtio_reset(_dev->vdev);
> +}
> +
>  static void virtio_s390_device_class_init(ObjectClass *klass, void *data)
>  {
>      DeviceClass *dc = DEVICE_CLASS(klass);
> @@ -512,6 +519,7 @@ static void virtio_s390_device_class_init(ObjectClass *klass, void *data)
>      dc->init = s390_virtio_busdev_init;
>      dc->bus_type = TYPE_S390_VIRTIO_BUS;
>      dc->unplug = qdev_simple_unplug_cb;
> +    dc->reset = s390_virtio_busdev_reset;
>  }
> 
>  static TypeInfo virtio_s390_device_info = {
> -- 
> 1.8.1
> 
>
Andreas Färber Jan. 16, 2013, 5:27 a.m. UTC | #2
Am 10.01.2013 15:40, schrieb Paolo Bonzini:
> virtio-s390 devices are not being reset when their bus is.  To fix
> this, add a reset method that forwards to virtio_reset.  This is
> only needed because of the "strange" modeling of virtio devices;
> the ->vdev link is being handled manually rather than through qdev.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  hw/s390-virtio-bus.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c
> index 7e99175..1e3e4f0 100644
> --- a/hw/s390-virtio-bus.c
> +++ b/hw/s390-virtio-bus.c
> @@ -505,6 +505,13 @@ static int s390_virtio_busdev_init(DeviceState *dev)
>      return _info->init(_dev);
>  }
>  
> +static void s390_virtio_busdev_reset(DeviceState *dev)
> +{
> +    VirtIOS390Device *_dev = (VirtIOS390Device *)dev;

Underscore alert. ;) What about naming the arg d and the variable dev?

Andreas

> +
> +    virtio_reset(_dev->vdev);
> +}
> +
>  static void virtio_s390_device_class_init(ObjectClass *klass, void *data)
>  {
>      DeviceClass *dc = DEVICE_CLASS(klass);
> @@ -512,6 +519,7 @@ static void virtio_s390_device_class_init(ObjectClass *klass, void *data)
>      dc->init = s390_virtio_busdev_init;
>      dc->bus_type = TYPE_S390_VIRTIO_BUS;
>      dc->unplug = qdev_simple_unplug_cb;
> +    dc->reset = s390_virtio_busdev_reset;
>  }
>  
>  static TypeInfo virtio_s390_device_info = {
fred.konrad@greensocs.com Jan. 16, 2013, 8:42 a.m. UTC | #3
On 16/01/2013 05:52, mdroth wrote:
> On Thu, Jan 10, 2013 at 03:40:25PM +0100, Paolo Bonzini wrote:
>> virtio-s390 devices are not being reset when their bus is.  To fix
>> this, add a reset method that forwards to virtio_reset.  This is
>> only needed because of the "strange" modeling of virtio devices;
>> the ->vdev link is being handled manually rather than through qdev.
>>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Isn't this handled by virtio-refactoring ?

I mean if we have a virtio bus on this VirtIOS390Device like in this series:
http://www.mail-archive.com/qemu-devel@nongnu.org/msg149035.html

And make VirtIODevice an abstract device which connects on this bus we 
can reset it with the normal way ?
> Ping. This fix doesn't appear to be upstream yet and I'm also looking to get
> this in for 1.3.1.
>
> (hint: `patches search tag:unapplied to:qemu-stable` :)
>
>> ---
>>   hw/s390-virtio-bus.c | 8 ++++++++
>>   1 file changed, 8 insertions(+)
>>
>> diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c
>> index 7e99175..1e3e4f0 100644
>> --- a/hw/s390-virtio-bus.c
>> +++ b/hw/s390-virtio-bus.c
>> @@ -505,6 +505,13 @@ static int s390_virtio_busdev_init(DeviceState *dev)
>>       return _info->init(_dev);
>>   }
>>
>> +static void s390_virtio_busdev_reset(DeviceState *dev)
>> +{
>> +    VirtIOS390Device *_dev = (VirtIOS390Device *)dev;
>> +
>> +    virtio_reset(_dev->vdev);
>> +}
>> +
>>   static void virtio_s390_device_class_init(ObjectClass *klass, void *data)
>>   {
>>       DeviceClass *dc = DEVICE_CLASS(klass);
>> @@ -512,6 +519,7 @@ static void virtio_s390_device_class_init(ObjectClass *klass, void *data)
>>       dc->init = s390_virtio_busdev_init;
>>       dc->bus_type = TYPE_S390_VIRTIO_BUS;
>>       dc->unplug = qdev_simple_unplug_cb;
>> +    dc->reset = s390_virtio_busdev_reset;
>>   }
>>
>>   static TypeInfo virtio_s390_device_info = {
>> -- 
>> 1.8.1
>>
>>
Paolo Bonzini Jan. 16, 2013, 10:09 a.m. UTC | #4
Il 16/01/2013 09:42, KONRAD Frédéric ha scritto:
>>
>>> virtio-s390 devices are not being reset when their bus is.  To fix
>>> this, add a reset method that forwards to virtio_reset.  This is
>>> only needed because of the "strange" modeling of virtio devices;
>>> the ->vdev link is being handled manually rather than through qdev.
>>>
>>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> Isn't this handled by virtio-refactoring ?
> 
> I mean if we have a virtio bus on this VirtIOS390Device like in this
> series:
> http://www.mail-archive.com/qemu-devel@nongnu.org/msg149035.html

Well, not in 1.3.1. :)

Paolo
Paolo Bonzini Jan. 16, 2013, 10:10 a.m. UTC | #5
Il 16/01/2013 06:27, Andreas Färber ha scritto:
> Am 10.01.2013 15:40, schrieb Paolo Bonzini:
>> virtio-s390 devices are not being reset when their bus is.  To fix
>> this, add a reset method that forwards to virtio_reset.  This is
>> only needed because of the "strange" modeling of virtio devices;
>> the ->vdev link is being handled manually rather than through qdev.
>>
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>>  hw/s390-virtio-bus.c | 8 ++++++++
>>  1 file changed, 8 insertions(+)
>>
>> diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c
>> index 7e99175..1e3e4f0 100644
>> --- a/hw/s390-virtio-bus.c
>> +++ b/hw/s390-virtio-bus.c
>> @@ -505,6 +505,13 @@ static int s390_virtio_busdev_init(DeviceState *dev)
>>      return _info->init(_dev);
>>  }
>>  
>> +static void s390_virtio_busdev_reset(DeviceState *dev)
>> +{
>> +    VirtIOS390Device *_dev = (VirtIOS390Device *)dev;
> 
> Underscore alert. ;) What about naming the arg d and the variable dev?

True, but the file uses this convention throughout.

Paolo
Andreas Färber Jan. 16, 2013, 10:31 a.m. UTC | #6
Am 16.01.2013 11:10, schrieb Paolo Bonzini:
> Il 16/01/2013 06:27, Andreas Färber ha scritto:
>> Am 10.01.2013 15:40, schrieb Paolo Bonzini:
>>> virtio-s390 devices are not being reset when their bus is.  To fix
>>> this, add a reset method that forwards to virtio_reset.  This is
>>> only needed because of the "strange" modeling of virtio devices;
>>> the ->vdev link is being handled manually rather than through qdev.
>>>
>>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>>> ---
>>>  hw/s390-virtio-bus.c | 8 ++++++++
>>>  1 file changed, 8 insertions(+)
>>>
>>> diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c
>>> index 7e99175..1e3e4f0 100644
>>> --- a/hw/s390-virtio-bus.c
>>> +++ b/hw/s390-virtio-bus.c
>>> @@ -505,6 +505,13 @@ static int s390_virtio_busdev_init(DeviceState *dev)
>>>      return _info->init(_dev);
>>>  }
>>>  
>>> +static void s390_virtio_busdev_reset(DeviceState *dev)
>>> +{
>>> +    VirtIOS390Device *_dev = (VirtIOS390Device *)dev;
>>
>> Underscore alert. ;) What about naming the arg d and the variable dev?
> 
> True, but the file uses this convention throughout.

Then I'm beginning to understand why Fred's patchset is so large...

Andreas
Paolo Bonzini Jan. 19, 2013, 2:10 p.m. UTC | #7
Il 10/01/2013 15:40, Paolo Bonzini ha scritto:
> virtio-s390 devices are not being reset when their bus is.  To fix
> this, add a reset method that forwards to virtio_reset.  This is
> only needed because of the "strange" modeling of virtio devices;
> the ->vdev link is being handled manually rather than through qdev.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  hw/s390-virtio-bus.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c
> index 7e99175..1e3e4f0 100644
> --- a/hw/s390-virtio-bus.c
> +++ b/hw/s390-virtio-bus.c
> @@ -505,6 +505,13 @@ static int s390_virtio_busdev_init(DeviceState *dev)
>      return _info->init(_dev);
>  }
>  
> +static void s390_virtio_busdev_reset(DeviceState *dev)
> +{
> +    VirtIOS390Device *_dev = (VirtIOS390Device *)dev;
> +
> +    virtio_reset(_dev->vdev);
> +}
> +
>  static void virtio_s390_device_class_init(ObjectClass *klass, void *data)
>  {
>      DeviceClass *dc = DEVICE_CLASS(klass);
> @@ -512,6 +519,7 @@ static void virtio_s390_device_class_init(ObjectClass *klass, void *data)
>      dc->init = s390_virtio_busdev_init;
>      dc->bus_type = TYPE_S390_VIRTIO_BUS;
>      dc->unplug = qdev_simple_unplug_cb;
> +    dc->reset = s390_virtio_busdev_reset;
>  }
>  
>  static TypeInfo virtio_s390_device_info = {
> 

Alex, you missed this.

Paolo
Alexander Graf Jan. 19, 2013, 2:20 p.m. UTC | #8
On 19.01.2013, at 15:10, Paolo Bonzini wrote:

> Il 10/01/2013 15:40, Paolo Bonzini ha scritto:
>> virtio-s390 devices are not being reset when their bus is.  To fix
>> this, add a reset method that forwards to virtio_reset.  This is
>> only needed because of the "strange" modeling of virtio devices;
>> the ->vdev link is being handled manually rather than through qdev.
>> 
>> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>> ---
>> hw/s390-virtio-bus.c | 8 ++++++++
>> 1 file changed, 8 insertions(+)
>> 
>> diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c
>> index 7e99175..1e3e4f0 100644
>> --- a/hw/s390-virtio-bus.c
>> +++ b/hw/s390-virtio-bus.c
>> @@ -505,6 +505,13 @@ static int s390_virtio_busdev_init(DeviceState *dev)
>>     return _info->init(_dev);
>> }
>> 
>> +static void s390_virtio_busdev_reset(DeviceState *dev)
>> +{
>> +    VirtIOS390Device *_dev = (VirtIOS390Device *)dev;
>> +
>> +    virtio_reset(_dev->vdev);
>> +}
>> +
>> static void virtio_s390_device_class_init(ObjectClass *klass, void *data)
>> {
>>     DeviceClass *dc = DEVICE_CLASS(klass);
>> @@ -512,6 +519,7 @@ static void virtio_s390_device_class_init(ObjectClass *klass, void *data)
>>     dc->init = s390_virtio_busdev_init;
>>     dc->bus_type = TYPE_S390_VIRTIO_BUS;
>>     dc->unplug = qdev_simple_unplug_cb;
>> +    dc->reset = s390_virtio_busdev_reset;
>> }
>> 
>> static TypeInfo virtio_s390_device_info = {
>> 
> 
> Alex, you missed this.

Yeah, sorry. It's not going to be my last s390 pull request before 1.4 :)


Alex
Alexander Graf Jan. 24, 2013, 11:59 p.m. UTC | #9
On 10.01.2013, at 15:40, Paolo Bonzini wrote:

> virtio-s390 devices are not being reset when their bus is.  To fix
> this, add a reset method that forwards to virtio_reset.  This is
> only needed because of the "strange" modeling of virtio devices;
> the ->vdev link is being handled manually rather than through qdev.
> 
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Thanks, applied to s390-next.

Alex
diff mbox

Patch

diff --git a/hw/s390-virtio-bus.c b/hw/s390-virtio-bus.c
index 7e99175..1e3e4f0 100644
--- a/hw/s390-virtio-bus.c
+++ b/hw/s390-virtio-bus.c
@@ -505,6 +505,13 @@  static int s390_virtio_busdev_init(DeviceState *dev)
     return _info->init(_dev);
 }
 
+static void s390_virtio_busdev_reset(DeviceState *dev)
+{
+    VirtIOS390Device *_dev = (VirtIOS390Device *)dev;
+
+    virtio_reset(_dev->vdev);
+}
+
 static void virtio_s390_device_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
@@ -512,6 +519,7 @@  static void virtio_s390_device_class_init(ObjectClass *klass, void *data)
     dc->init = s390_virtio_busdev_init;
     dc->bus_type = TYPE_S390_VIRTIO_BUS;
     dc->unplug = qdev_simple_unplug_cb;
+    dc->reset = s390_virtio_busdev_reset;
 }
 
 static TypeInfo virtio_s390_device_info = {