From: "Alex Bennée" <alex.bennee@linaro.org>
To: qemu-devel@nongnu.org
Cc: mikhail.sennikovskii@cloud.ionos.com, dgilbert@redhat.com,
stefanha@redhat.com
Subject: Re: [RFC 1/2] virtio: new post_load hook
Date: Fri, 11 Oct 2019 14:15:47 +0100 [thread overview]
Message-ID: <871rvjmni4.fsf@linaro.org> (raw)
In-Reply-To: <20191010180412.26236-1-mst@redhat.com>
Michael S. Tsirkin <mst@redhat.com> writes:
> Post load hook in virtio vmsd is called early while device is processed,
> and when VirtIODevice core isn't fully initialized. Most device
> specific code isn't ready to deal with a device in such state, and
> behaves weirdly.
>
> Add a new post_load hook in a device class instead. Devices should use
> this unless they specifically want to verify the migration stream as
> it's processed, e.g. for bounds checking.
>
> Suggested-by: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> Cc: Mikhail Sennikovsky <mikhail.sennikovskii@cloud.ionos.com>
> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> ---
> hw/virtio/virtio.c | 7 +++++++
> include/hw/virtio/virtio.h | 6 ++++++
> 2 files changed, 13 insertions(+)
>
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index 527df03bfd..54a46e204c 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -2291,6 +2291,13 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f, int version_id)
> }
> rcu_read_unlock();
>
> + if (vdc->post_load) {
> + ret = vdc->post_load(vdev);
> + if (ret) {
> + return ret;
> + }
I see this pattern repeated above because we get early exits on error
but here it seems superfluous. Why not:
return vdc->_post_load(vdev)
?
> + }
> +
> return 0;
> }
>
> diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
> index 48e8d04ff6..ca4f9c0bcc 100644
> --- a/include/hw/virtio/virtio.h
> +++ b/include/hw/virtio/virtio.h
> @@ -158,6 +158,12 @@ typedef struct VirtioDeviceClass {
> */
> void (*save)(VirtIODevice *vdev, QEMUFile *f);
> int (*load)(VirtIODevice *vdev, QEMUFile *f, int version_id);
> + /* Post load hook in vmsd is called early while device is processed, and
> + * when VirtIODevice isn't fully initialized. Devices should use this instead,
> + * unless they specifically want to verify the migration stream as it's
> + * processed, e.g. for bounds checking.
> + */
> + int (*post_load)(VirtIODevice *vdev);
> const VMStateDescription *vmsd;
> } VirtioDeviceClass;
--
Alex Bennée
prev parent reply other threads:[~2019-10-11 13:16 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-10 18:04 [RFC 1/2] virtio: new post_load hook Michael S. Tsirkin
2019-10-10 18:04 ` [RFC 2/2] virtio-net: use post load hook Michael S. Tsirkin
2019-10-11 2:51 ` Jason Wang
2019-10-11 9:46 ` Mikhail Sennikovsky
2019-10-11 9:51 ` Michael S. Tsirkin
2019-10-11 9:58 ` Mikhail Sennikovsky
2019-10-11 10:08 ` Michael S. Tsirkin
2019-10-11 10:30 ` Mikhail Sennikovsky
2019-10-11 10:34 ` Mikhail Sennikovsky
2019-10-11 12:51 ` Michael S. Tsirkin
2019-10-11 12:34 ` Michael S. Tsirkin
2019-10-11 13:15 ` Alex Bennée [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=871rvjmni4.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=dgilbert@redhat.com \
--cc=mikhail.sennikovskii@cloud.ionos.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.