* [Qemu-devel] Bug in virtio_net_load
@ 2016-06-30 8:34 Robin Geuze
2016-06-30 17:23 ` Michael S. Tsirkin
0 siblings, 1 reply; 7+ messages in thread
From: Robin Geuze @ 2016-06-30 8:34 UTC (permalink / raw)
To: mst, jasowang, qemu-devel; +Cc: dgilbert
Hey,
I work for TransIP and we host a VPS platform based on QEMU/KVM. We are
currently running qemu 2.4.0. A few days ago we noticed that live
migrations for some of our VM's would fail. Further investigation turned
out it was specific to windows server 2012, caused by the fact that the
standard virtio driver from RedHat was replaced in windows updates by a
driver called "Midfin eFabric" (this driver doesn't really seem to be
meant for virtio, we have a case running at MicroSoft about that). Once
we knew how to reproduce we tested this on QEMU 2.6.0 as well and it
also seems to be affected (later we found out that 2.4.0 to 2.6.0
migration does work probably due to pure luck).
We started investigating the problem in QEMU 2.4.0 and noticed it was
caused by the fact that virtio_net_device_load requires certain feature
flags to be set, specifically to load curr_guest_offloads which is only
written and read if the VIRTIO_NET_F_CTRL_GUEST_OFFLOADS flag is set,
but those flags are set in virtio_load after the call to
virtio_net_device_load. Moving the code setting the feature flags before
the call to virtio_net_device_load fixes it, however it introduces
another problem. Virtio can have 64-bits feature flags, however the
standard save payload for virtio only has space for 32-bits feature
flags. This was solved by putting those in a subsection of the
vmstate_save_state stuff. Unfortunately this is called (and thus binary
offset located) after the virtio_net_device_load code.
There was an attempt to fix this in QEMU 2.6.0. However, this seems to
have broken it worse. The write code (virtio_net_save, virtio_save and
virtio_net_save_device) still puts the curr_guest_offloads value before
the vmstate_save_state data. However the read code expects and tries to
read it after the vmstate_save_state data. Should we just also change
the virtio_net_save code to have it follow the same order as
virtio_net_load? Or will this potentially break more stuff.
Regards,
Robin Geuze
TransIP BV
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] Bug in virtio_net_load
2016-06-30 8:34 [Qemu-devel] Bug in virtio_net_load Robin Geuze
@ 2016-06-30 17:23 ` Michael S. Tsirkin
2016-06-30 17:29 ` Dr. David Alan Gilbert
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Michael S. Tsirkin @ 2016-06-30 17:23 UTC (permalink / raw)
To: Robin Geuze; +Cc: jasowang, qemu-devel, dgilbert, Cornelia Huck
On Thu, Jun 30, 2016 at 10:34:51AM +0200, Robin Geuze wrote:
> Hey,
>
> I work for TransIP and we host a VPS platform based on QEMU/KVM. We are
> currently running qemu 2.4.0. A few days ago we noticed that live migrations
> for some of our VM's would fail. Further investigation turned out it was
> specific to windows server 2012, caused by the fact that the standard virtio
> driver from RedHat was replaced in windows updates by a driver called
> "Midfin eFabric" (this driver doesn't really seem to be meant for virtio, we
> have a case running at MicroSoft about that). Once we knew how to reproduce
> we tested this on QEMU 2.6.0 as well and it also seems to be affected
> (later we found out that 2.4.0 to 2.6.0 migration does work probably due to
> pure luck).
>
> We started investigating the problem in QEMU 2.4.0 and noticed it was caused
> by the fact that virtio_net_device_load requires certain feature flags to be
> set, specifically to load curr_guest_offloads which is only written and read
> if the VIRTIO_NET_F_CTRL_GUEST_OFFLOADS flag is set, but those flags are set
> in virtio_load after the call to virtio_net_device_load. Moving the code
> setting the feature flags before the call to virtio_net_device_load fixes
> it, however it introduces another problem. Virtio can have 64-bits feature
> flags, however the standard save payload for virtio only has space for
> 32-bits feature flags. This was solved by putting those in a subsection of
> the vmstate_save_state stuff. Unfortunately this is called (and thus binary
> offset located) after the virtio_net_device_load code.
>
> There was an attempt to fix this in QEMU 2.6.0. However, this seems to have
> broken it worse. The write code (virtio_net_save, virtio_save and
> virtio_net_save_device) still puts the curr_guest_offloads value before the
> vmstate_save_state data. However the read code expects and tries to read it
> after the vmstate_save_state data. Should we just also change the
> virtio_net_save code to have it follow the same order as virtio_net_load? Or
> will this potentially break more stuff.
>
> Regards,
>
> Robin Geuze
>
> TransIP BV
After going over it several times, I think the change in 2.6
was wrong
commit 1f8828ef573c83365b4a87a776daf8bcef1caa21
Author: Jason Wang <jasowang@redhat.com>
Date: Fri Sep 11 16:01:56 2015 +0800
virtio-net: unbreak self announcement and guest offloads after migration
After commit 019a3edbb25f1571e876f8af1ce4c55412939e5d ("virtio: make
features 64bit wide"). Device's guest_features was actually set after
vdc->load(). This breaks the assumption that device specific load()
function can check guest_features. For virtio-net, self announcement
and guest offloads won't work after migration.
Fixing this by defer them to virtio_net_load() where guest_features
were guaranteed to be set. Other virtio devices looks fine.
Fixes: 019a3edbb25f1571e876f8af1ce4c55412939e5d
("virtio: make features 64bit wide")
Cc: qemu-stable@nongnu.org
Cc: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
I'm not sure what was I thinking when I applied this:
it changes load without changing save - how can this work?
I am inclined to revert 1f8828ef573c83365b4a87a776daf8bcef1caa21 and
apply this instead:
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 7ed06ea..18153d5 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -1499,6 +1499,16 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f, int version_id)
}
qemu_get_be32s(f, &features);
+ /*
+ * Temporarily set guest_features low bits - needed by
+ * virtio net load code testing for VIRTIO_NET_F_CTRL_GUEST_OFFLOADS
+ * VIRTIO_NET_F_GUEST_ANNOUNCE and VIRTIO_NET_F_CTRL_VQ.
+ *
+ * Note: devices should always test host features in future - don't create
+ * new dependencies like this.
+ */
+ vdev->guest_features = features;
+
config_len = qemu_get_be32(f);
/*
Could you please confirm whether this help?
Jason, Cornelia - any comments?
David, if this goes in I'm afraid your patchset reworking
save/load will have to be rebased, but I think we want
the bugfix first and new features/changes second.
Do you agree?
--
MST
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] Bug in virtio_net_load
2016-06-30 17:23 ` Michael S. Tsirkin
@ 2016-06-30 17:29 ` Dr. David Alan Gilbert
2016-07-01 2:35 ` Jason Wang
2016-07-01 8:48 ` Cornelia Huck
2 siblings, 0 replies; 7+ messages in thread
From: Dr. David Alan Gilbert @ 2016-06-30 17:29 UTC (permalink / raw)
To: Michael S. Tsirkin; +Cc: Robin Geuze, jasowang, qemu-devel, Cornelia Huck
* Michael S. Tsirkin (mst@redhat.com) wrote:
> On Thu, Jun 30, 2016 at 10:34:51AM +0200, Robin Geuze wrote:
> > Hey,
> >
> > I work for TransIP and we host a VPS platform based on QEMU/KVM. We are
> > currently running qemu 2.4.0. A few days ago we noticed that live migrations
> > for some of our VM's would fail. Further investigation turned out it was
> > specific to windows server 2012, caused by the fact that the standard virtio
> > driver from RedHat was replaced in windows updates by a driver called
> > "Midfin eFabric" (this driver doesn't really seem to be meant for virtio, we
> > have a case running at MicroSoft about that). Once we knew how to reproduce
> > we tested this on QEMU 2.6.0 as well and it also seems to be affected
> > (later we found out that 2.4.0 to 2.6.0 migration does work probably due to
> > pure luck).
> >
> > We started investigating the problem in QEMU 2.4.0 and noticed it was caused
> > by the fact that virtio_net_device_load requires certain feature flags to be
> > set, specifically to load curr_guest_offloads which is only written and read
> > if the VIRTIO_NET_F_CTRL_GUEST_OFFLOADS flag is set, but those flags are set
> > in virtio_load after the call to virtio_net_device_load. Moving the code
> > setting the feature flags before the call to virtio_net_device_load fixes
> > it, however it introduces another problem. Virtio can have 64-bits feature
> > flags, however the standard save payload for virtio only has space for
> > 32-bits feature flags. This was solved by putting those in a subsection of
> > the vmstate_save_state stuff. Unfortunately this is called (and thus binary
> > offset located) after the virtio_net_device_load code.
> >
> > There was an attempt to fix this in QEMU 2.6.0. However, this seems to have
> > broken it worse. The write code (virtio_net_save, virtio_save and
> > virtio_net_save_device) still puts the curr_guest_offloads value before the
> > vmstate_save_state data. However the read code expects and tries to read it
> > after the vmstate_save_state data. Should we just also change the
> > virtio_net_save code to have it follow the same order as virtio_net_load? Or
> > will this potentially break more stuff.
> >
> > Regards,
> >
> > Robin Geuze
> >
> > TransIP BV
>
> After going over it several times, I think the change in 2.6
> was wrong
>
>
>
> commit 1f8828ef573c83365b4a87a776daf8bcef1caa21
> Author: Jason Wang <jasowang@redhat.com>
> Date: Fri Sep 11 16:01:56 2015 +0800
>
> virtio-net: unbreak self announcement and guest offloads after migration
>
> After commit 019a3edbb25f1571e876f8af1ce4c55412939e5d ("virtio: make
> features 64bit wide"). Device's guest_features was actually set after
> vdc->load(). This breaks the assumption that device specific load()
> function can check guest_features. For virtio-net, self announcement
> and guest offloads won't work after migration.
>
> Fixing this by defer them to virtio_net_load() where guest_features
> were guaranteed to be set. Other virtio devices looks fine.
>
> Fixes: 019a3edbb25f1571e876f8af1ce4c55412939e5d
> ("virtio: make features 64bit wide")
> Cc: qemu-stable@nongnu.org
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
>
>
> I'm not sure what was I thinking when I applied this:
> it changes load without changing save - how can this work?
>
>
> I am inclined to revert 1f8828ef573c83365b4a87a776daf8bcef1caa21 and
> apply this instead:
>
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index 7ed06ea..18153d5 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -1499,6 +1499,16 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f, int version_id)
> }
> qemu_get_be32s(f, &features);
>
> + /*
> + * Temporarily set guest_features low bits - needed by
> + * virtio net load code testing for VIRTIO_NET_F_CTRL_GUEST_OFFLOADS
> + * VIRTIO_NET_F_GUEST_ANNOUNCE and VIRTIO_NET_F_CTRL_VQ.
> + *
> + * Note: devices should always test host features in future - don't create
> + * new dependencies like this.
> + */
> + vdev->guest_features = features;
> +
> config_len = qemu_get_be32(f);
>
> /*
>
> Could you please confirm whether this help?
> Jason, Cornelia - any comments?
>
> David, if this goes in I'm afraid your patchset reworking
> save/load will have to be rebased, but I think we want
> the bugfix first and new features/changes second.
> Do you agree?
Yes, bug fixes first. But actually the merge is trivial, the only
place I think they collide is in virtio_net_load and it's just the difference
of the return virtio_load vs the ret = virtio_load in the patch you revert.
Dave
> --
> MST
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] Bug in virtio_net_load
2016-06-30 17:23 ` Michael S. Tsirkin
2016-06-30 17:29 ` Dr. David Alan Gilbert
@ 2016-07-01 2:35 ` Jason Wang
2016-07-01 8:48 ` Cornelia Huck
2 siblings, 0 replies; 7+ messages in thread
From: Jason Wang @ 2016-07-01 2:35 UTC (permalink / raw)
To: Michael S. Tsirkin, Robin Geuze; +Cc: qemu-devel, dgilbert, Cornelia Huck
On 2016年07月01日 01:23, Michael S. Tsirkin wrote:
> On Thu, Jun 30, 2016 at 10:34:51AM +0200, Robin Geuze wrote:
>> Hey,
>>
>> I work for TransIP and we host a VPS platform based on QEMU/KVM. We are
>> currently running qemu 2.4.0. A few days ago we noticed that live migrations
>> for some of our VM's would fail. Further investigation turned out it was
>> specific to windows server 2012, caused by the fact that the standard virtio
>> driver from RedHat was replaced in windows updates by a driver called
>> "Midfin eFabric" (this driver doesn't really seem to be meant for virtio, we
>> have a case running at MicroSoft about that). Once we knew how to reproduce
>> we tested this on QEMU 2.6.0 as well and it also seems to be affected
>> (later we found out that 2.4.0 to 2.6.0 migration does work probably due to
>> pure luck).
>>
>> We started investigating the problem in QEMU 2.4.0 and noticed it was caused
>> by the fact that virtio_net_device_load requires certain feature flags to be
>> set, specifically to load curr_guest_offloads which is only written and read
>> if the VIRTIO_NET_F_CTRL_GUEST_OFFLOADS flag is set, but those flags are set
>> in virtio_load after the call to virtio_net_device_load. Moving the code
>> setting the feature flags before the call to virtio_net_device_load fixes
>> it, however it introduces another problem. Virtio can have 64-bits feature
>> flags, however the standard save payload for virtio only has space for
>> 32-bits feature flags. This was solved by putting those in a subsection of
>> the vmstate_save_state stuff. Unfortunately this is called (and thus binary
>> offset located) after the virtio_net_device_load code.
>>
>> There was an attempt to fix this in QEMU 2.6.0. However, this seems to have
>> broken it worse. The write code (virtio_net_save, virtio_save and
>> virtio_net_save_device) still puts the curr_guest_offloads value before the
>> vmstate_save_state data. However the read code expects and tries to read it
>> after the vmstate_save_state data. Should we just also change the
>> virtio_net_save code to have it follow the same order as virtio_net_load? Or
>> will this potentially break more stuff.
>>
>> Regards,
>>
>> Robin Geuze
>>
>> TransIP BV
> After going over it several times, I think the change in 2.6
> was wrong
>
>
>
> commit 1f8828ef573c83365b4a87a776daf8bcef1caa21
> Author: Jason Wang <jasowang@redhat.com>
> Date: Fri Sep 11 16:01:56 2015 +0800
>
> virtio-net: unbreak self announcement and guest offloads after migration
>
> After commit 019a3edbb25f1571e876f8af1ce4c55412939e5d ("virtio: make
> features 64bit wide"). Device's guest_features was actually set after
> vdc->load(). This breaks the assumption that device specific load()
> function can check guest_features. For virtio-net, self announcement
> and guest offloads won't work after migration.
>
> Fixing this by defer them to virtio_net_load() where guest_features
> were guaranteed to be set. Other virtio devices looks fine.
>
> Fixes: 019a3edbb25f1571e876f8af1ce4c55412939e5d
> ("virtio: make features 64bit wide")
> Cc: qemu-stable@nongnu.org
> Cc: Gerd Hoffmann <kraxel@redhat.com>
> Signed-off-by: Jason Wang <jasowang@redhat.com>
> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
>
>
> I'm not sure what was I thinking when I applied this:
> it changes load without changing save - how can this work?
>
>
> I am inclined to revert 1f8828ef573c83365b4a87a776daf8bcef1caa21 and
> apply this instead:
>
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index 7ed06ea..18153d5 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -1499,6 +1499,16 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f, int version_id)
> }
> qemu_get_be32s(f, &features);
>
> + /*
> + * Temporarily set guest_features low bits - needed by
> + * virtio net load code testing for VIRTIO_NET_F_CTRL_GUEST_OFFLOADS
> + * VIRTIO_NET_F_GUEST_ANNOUNCE and VIRTIO_NET_F_CTRL_VQ.
> + *
> + * Note: devices should always test host features in future - don't create
> + * new dependencies like this.
> + */
> + vdev->guest_features = features;
> +
> config_len = qemu_get_be32(f);
>
> /*
>
> Could you please confirm whether this help?
> Jason, Cornelia - any comments?
Yes, my patch was wrong and won't work if there's any subsections. I
agree to revert and apply yours.
Thanks
>
> David, if this goes in I'm afraid your patchset reworking
> save/load will have to be rebased, but I think we want
> the bugfix first and new features/changes second.
> Do you agree?
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] Bug in virtio_net_load
2016-06-30 17:23 ` Michael S. Tsirkin
2016-06-30 17:29 ` Dr. David Alan Gilbert
2016-07-01 2:35 ` Jason Wang
@ 2016-07-01 8:48 ` Cornelia Huck
2016-07-01 8:54 ` Robin Geuze
2016-07-04 7:11 ` Robin Geuze
2 siblings, 2 replies; 7+ messages in thread
From: Cornelia Huck @ 2016-07-01 8:48 UTC (permalink / raw)
To: Michael S. Tsirkin; +Cc: Robin Geuze, jasowang, qemu-devel, dgilbert
On Thu, 30 Jun 2016 20:23:08 +0300
"Michael S. Tsirkin" <mst@redhat.com> wrote:
> I'm not sure what was I thinking when I applied this:
> it changes load without changing save - how can this work?
The ordering implications are easy to miss :(
> I am inclined to revert 1f8828ef573c83365b4a87a776daf8bcef1caa21 and
> apply this instead:
>
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index 7ed06ea..18153d5 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -1499,6 +1499,16 @@ int virtio_load(VirtIODevice *vdev, QEMUFile
> *f, int version_id) }
> qemu_get_be32s(f, &features);
>
> + /*
> + * Temporarily set guest_features low bits - needed by
> + * virtio net load code testing for
> VIRTIO_NET_F_CTRL_GUEST_OFFLOADS
> + * VIRTIO_NET_F_GUEST_ANNOUNCE and VIRTIO_NET_F_CTRL_VQ.
> + *
> + * Note: devices should always test host features in future -
> don't create
> + * new dependencies like this.
docs/virtio-migration.txt should probably talk about that as well. And
any conditional stuff needs to go into a subsection in the future.
> + */
> + vdev->guest_features = features;
> +
> config_len = qemu_get_be32(f);
>
> /*
>
> Could you please confirm whether this help?
> Jason, Cornelia - any comments?
After staring at the code, I'm inclined to think that this will work.
virtio migration: Frying unsuspecting brains since 2008.
<To be fair, the original code wasn't that convoluted.>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] Bug in virtio_net_load
2016-07-01 8:48 ` Cornelia Huck
@ 2016-07-01 8:54 ` Robin Geuze
2016-07-04 7:11 ` Robin Geuze
1 sibling, 0 replies; 7+ messages in thread
From: Robin Geuze @ 2016-07-01 8:54 UTC (permalink / raw)
To: Cornelia Huck, Michael S. Tsirkin; +Cc: jasowang, qemu-devel, dgilbert
Hey Guys,
We just tested the patch on QEMU 2.6.0 and confirmed that both 2.6.0 ->
2.6.0 and 2.4.0 -> 2.6.0 migrations work properly.
We will be leaving a migration loop running over the weekend to verify
that everything works as expected, but I don't expect any surprises from
that. Thanks for the quick fix :D
Regards,
Robin Geuze
TransIP BV
On 7/1/2016 10:48, Cornelia Huck wrote:
> On Thu, 30 Jun 2016 20:23:08 +0300
> "Michael S. Tsirkin" <mst@redhat.com> wrote:
>
>> I'm not sure what was I thinking when I applied this:
>> it changes load without changing save - how can this work?
> The ordering implications are easy to miss :(
>
>> I am inclined to revert 1f8828ef573c83365b4a87a776daf8bcef1caa21 and
>> apply this instead:
>>
>> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
>> index 7ed06ea..18153d5 100644
>> --- a/hw/virtio/virtio.c
>> +++ b/hw/virtio/virtio.c
>> @@ -1499,6 +1499,16 @@ int virtio_load(VirtIODevice *vdev, QEMUFile
>> *f, int version_id) }
>> qemu_get_be32s(f, &features);
>>
>> + /*
>> + * Temporarily set guest_features low bits - needed by
>> + * virtio net load code testing for
>> VIRTIO_NET_F_CTRL_GUEST_OFFLOADS
>> + * VIRTIO_NET_F_GUEST_ANNOUNCE and VIRTIO_NET_F_CTRL_VQ.
>> + *
>> + * Note: devices should always test host features in future -
>> don't create
>> + * new dependencies like this.
> docs/virtio-migration.txt should probably talk about that as well. And
> any conditional stuff needs to go into a subsection in the future.
>
>> + */
>> + vdev->guest_features = features;
>> +
>> config_len = qemu_get_be32(f);
>>
>> /*
>>
>> Could you please confirm whether this help?
>> Jason, Cornelia - any comments?
> After staring at the code, I'm inclined to think that this will work.
>
> virtio migration: Frying unsuspecting brains since 2008.
> <To be fair, the original code wasn't that convoluted.>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] Bug in virtio_net_load
2016-07-01 8:48 ` Cornelia Huck
2016-07-01 8:54 ` Robin Geuze
@ 2016-07-04 7:11 ` Robin Geuze
1 sibling, 0 replies; 7+ messages in thread
From: Robin Geuze @ 2016-07-04 7:11 UTC (permalink / raw)
To: Cornelia Huck, Michael S. Tsirkin; +Cc: jasowang, qemu-devel, dgilbert
Hey,
So over the weekend we did a bunch of migrations with a bunch of
different guest OSes and such and it all worked fine, so I would say the
patch is working properly :)
Regards,
Robin Geuze
On 7/1/2016 10:48, Cornelia Huck wrote:
> On Thu, 30 Jun 2016 20:23:08 +0300
> "Michael S. Tsirkin" <mst@redhat.com> wrote:
>
>> I'm not sure what was I thinking when I applied this:
>> it changes load without changing save - how can this work?
> The ordering implications are easy to miss :(
>
>> I am inclined to revert 1f8828ef573c83365b4a87a776daf8bcef1caa21 and
>> apply this instead:
>>
>> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
>> index 7ed06ea..18153d5 100644
>> --- a/hw/virtio/virtio.c
>> +++ b/hw/virtio/virtio.c
>> @@ -1499,6 +1499,16 @@ int virtio_load(VirtIODevice *vdev, QEMUFile
>> *f, int version_id) }
>> qemu_get_be32s(f, &features);
>>
>> + /*
>> + * Temporarily set guest_features low bits - needed by
>> + * virtio net load code testing for
>> VIRTIO_NET_F_CTRL_GUEST_OFFLOADS
>> + * VIRTIO_NET_F_GUEST_ANNOUNCE and VIRTIO_NET_F_CTRL_VQ.
>> + *
>> + * Note: devices should always test host features in future -
>> don't create
>> + * new dependencies like this.
> docs/virtio-migration.txt should probably talk about that as well. And
> any conditional stuff needs to go into a subsection in the future.
>
>> + */
>> + vdev->guest_features = features;
>> +
>> config_len = qemu_get_be32(f);
>>
>> /*
>>
>> Could you please confirm whether this help?
>> Jason, Cornelia - any comments?
> After staring at the code, I'm inclined to think that this will work.
>
> virtio migration: Frying unsuspecting brains since 2008.
> <To be fair, the original code wasn't that convoluted.>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-07-04 19:45 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-30 8:34 [Qemu-devel] Bug in virtio_net_load Robin Geuze
2016-06-30 17:23 ` Michael S. Tsirkin
2016-06-30 17:29 ` Dr. David Alan Gilbert
2016-07-01 2:35 ` Jason Wang
2016-07-01 8:48 ` Cornelia Huck
2016-07-01 8:54 ` Robin Geuze
2016-07-04 7:11 ` Robin Geuze
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).