qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Juan Quintela <quintela@redhat.com>, hch@lst.de
Cc: qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH 40/41] virtio-blk: port to vmstate
Date: Wed, 2 Dec 2009 19:54:18 +0200	[thread overview]
Message-ID: <20091202175418.GB3638@redhat.com> (raw)
In-Reply-To: <b5642c1c463678969b302eaa668322c12c22863b.1259754427.git.quintela@redhat.com>

On Wed, Dec 02, 2009 at 01:04:38PM +0100, Juan Quintela wrote:
> This driver send a struct directly in the wire, where the struct
> contains:
> - target_phis_addr_t (can be 32 or 64 bits depending of host)
> - void * (on host)
> - size_t.
> 
> It has no hope of working across 32/64 or big/little endian.  This problem exist in previous one.

I don't understand how does it work at all.
Passing pointers in migration buffer?
Does guest just happen to get mapped at the same address
in qemu after migration?
Even with address randomization?

Does anyone know?

Also, no security, right?

> Signed-off-by: Juan Quintela <quintela@redhat.com>
> ---
>  hw/virtio-blk.c |   50 +++++++++++++++++++++++++++++++++++++-------------
>  1 files changed, 37 insertions(+), 13 deletions(-)
> 
> diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
> index 0b04d0d..c618dc6 100644
> --- a/hw/virtio-blk.c
> +++ b/hw/virtio-blk.c
> @@ -450,28 +450,34 @@ static uint32_t virtio_blk_get_features(VirtIODevice *vdev)
>      return features;
>  }
> 
> -static void virtio_blk_save(QEMUFile *f, void *opaque)
> +static const VMStateDescription vmstate_virtio_blk_req = {
> +    .name = "virtio-blk-req",
> +    .version_id = 1,
> +    .minimum_version_id = 1,
> +    .minimum_version_id_old = 1,
> +    .fields      = (VMStateField []) {
> +        VMSTATE_BUFFER_UNSAFE(elem, VirtIOBlockReq, 0, sizeof(VirtQueueElement)),

line too long

> +        VMSTATE_END_OF_LIST()
> +    }
> +};
> +
> +static void put_virtio_req(QEMUFile *f, void *pv, size_t size)
>  {
> -    VirtIOBlock *s = opaque;
> +    VirtIOBlockReqHead *rq = pv;
>      VirtIOBlockReq *req;;
> 
> -    virtio_save(&s->vdev, f);
> -
> -    QLIST_FOREACH(req, &s->rq, next) {
> +    QLIST_FOREACH(req, rq, next) {
>          qemu_put_sbyte(f, 1);
>          qemu_put_buffer(f, (unsigned char*)&req->elem, sizeof(req->elem));
>      }
>      qemu_put_sbyte(f, 0);
>  }
> 
> -static int virtio_blk_load(QEMUFile *f, void *opaque, int version_id)
> +static int get_virtio_req(QEMUFile *f, void *pv, size_t size)
>  {
> -    VirtIOBlock *s = opaque;
> +    VirtIOBlockReqHead *rq = pv;
> +    VirtIOBlock *s = container_of(rq, struct VirtIOBlock, rq);
> 
> -    if (version_id != 2)
> -        return -EINVAL;
> -
> -    virtio_load(&s->vdev, f);
>      while (qemu_get_sbyte(f)) {
>          VirtIOBlockReq *req = virtio_blk_alloc_request(s);
>          qemu_get_buffer(f, (unsigned char*)&req->elem, sizeof(req->elem));
> @@ -481,6 +487,25 @@ static int virtio_blk_load(QEMUFile *f, void *opaque, int version_id)
>      return 0;
>  }
> 
> +const VMStateInfo vmstate_info_virtio_blk_req = {
> +    .name = "virtio_blk_req",
> +    .get  = get_virtio_req,
> +    .put  = put_virtio_req,
> +};
> +
> +static const VMStateDescription vmstate_virtio_blk = {
> +    .name = "virtio-blk",
> +    .version_id = 2,
> +    .minimum_version_id = 2,
> +    .minimum_version_id_old = 2,
> +    .fields      = (VMStateField []) {
> +        VMSTATE_VIRTIO(vdev, VirtIOBlock),
> +        VMSTATE_SINGLE(rq, VirtIOBlock, 0,
> +                       vmstate_info_virtio_blk_req, VirtIOBlockReqHead),
> +        VMSTATE_END_OF_LIST()
> +    }
> +};
> +
>  VirtIODevice *virtio_blk_init(DeviceState *dev, DriveInfo *dinfo)
>  {
>      VirtIOBlock *s;
> @@ -510,8 +535,7 @@ VirtIODevice *virtio_blk_init(DeviceState *dev, DriveInfo *dinfo)
>      s->vq = virtio_add_queue(&s->vdev, 128, virtio_blk_handle_output);
> 
>      qemu_add_vm_change_state_handler(virtio_blk_dma_restart_cb, s);
> -    register_savevm("virtio-blk", virtio_blk_id++, 2,
> -                    virtio_blk_save, virtio_blk_load, s);
> +    vmstate_register(virtio_blk_id++, &vmstate_virtio_blk, s);
> 
>      return &s->vdev;
>  }
> -- 
> 1.6.5.2

  reply	other threads:[~2009-12-02 17:57 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-02 12:03 [Qemu-devel] [PATCH 00/41] virtio: port to vmstate Juan Quintela
2009-12-02 12:03 ` [Qemu-devel] [PATCH 01/41] virtio: Teach virtio-balloon about DO_UPCAST Juan Quintela
2009-12-02 18:40   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 12:04 ` [Qemu-devel] [PATCH 02/41] virtio: Teach virtio-blk " Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 03/41] virtio: Teach virtio-console " Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 04/41] virtio: Teach virtio-net " Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 05/41] virtio-console: Remove useless casts Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 06/41] virtio: Use DO_UPCAST instead of a cast Juan Quintela
2009-12-02 13:41   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 18:19     ` Juan Quintela
2009-12-02 18:19       ` Michael S. Tsirkin
2009-12-02 18:42         ` Juan Quintela
2009-12-02 18:44           ` Michael S. Tsirkin
2009-12-02 19:03             ` Juan Quintela
2009-12-03  9:48               ` Michael S. Tsirkin
2009-12-03 11:56                 ` Juan Quintela
2009-12-03 12:04                   ` Michael S. Tsirkin
2009-12-03 12:55                     ` Juan Quintela
2009-12-03 13:39                       ` Avi Kivity
2009-12-02 12:04 ` [Qemu-devel] [PATCH 07/41] virtio-pci: Remove duplicate test Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 08/41] msix: Store sizes that we send/receive Juan Quintela
2009-12-02 13:39   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 12:04 ` [Qemu-devel] [PATCH 09/41] msix: port to vmstate Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 10/41] qemu/pci: document msix_entries_nr field Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 11/41] virtio: Introduce type field to distingish between PCI and Syborg Juan Quintela
2009-12-02 18:42   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 12:04 ` [Qemu-devel] [PATCH 12/41] virtio-pci: port pci config to vmstate Juan Quintela
2009-12-02 14:39   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 12:04 ` [Qemu-devel] [PATCH 13/41] msix: msix_load/save are not needed anymore Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 14/41] virtio: remove save/load_config for virtio Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 15/41] virtio: remove save/load_queue " Juan Quintela
2009-12-02 14:43   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 18:22     ` Juan Quintela
2009-12-02 18:27       ` Michael S. Tsirkin
2009-12-02 18:50         ` Juan Quintela
2009-12-02 18:57           ` Michael S. Tsirkin
2009-12-02 12:04 ` [Qemu-devel] [PATCH 16/41] virtio: Add num_pci_queues field Juan Quintela
2009-12-02 14:46   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 12:04 ` [Qemu-devel] [PATCH 17/41] virtio: split virtio_post_load() from virtio_load() Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 18/41] virtio: change config_len type to int32_t Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 19/41] virtio: use the right types for VirtQueue elements Juan Quintela
2009-12-02 13:47   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 18:24     ` Juan Quintela
2009-12-02 18:24       ` Michael S. Tsirkin
2009-12-02 12:04 ` [Qemu-devel] [PATCH 20/41] virtio: abstract test for save/load values Juan Quintela
2009-12-02 13:53   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 12:04 ` [Qemu-devel] [PATCH 21/41] virtio: port to vmstate Juan Quintela
2009-12-02 18:22   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 12:04 ` [Qemu-devel] [PATCH 22/41] virtio-net: change tx_timer_active to uint32_t Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 23/41] virtio-net: change mergeable_rx_bufs " Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 24/41] virtio-net: use type checking version of qemu_put/get-* Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 25/41] virtio-net: MAC_TABLE_ENTRIES has never been bigger Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 26/41] virtio-net: we know vlans size at compile time, make it static Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 27/41] virtio-net: abstract vlans operations Juan Quintela
2009-12-02 14:49   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 18:26     ` Juan Quintela
2009-12-02 18:29       ` Michael S. Tsirkin
2009-12-02 18:53         ` Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 28/41] virtio-net: make vlan operations on uint8_t, not uint32_t Juan Quintela
2009-12-02 14:50   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 12:04 ` [Qemu-devel] [PATCH 29/41] virtio-net: in_use and first_multi only handle unsigned values Juan Quintela
2009-12-02 14:52   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 18:30     ` Juan Quintela
2009-12-02 18:32       ` Michael S. Tsirkin
2009-12-02 18:55         ` Juan Quintela
2009-12-02 18:58           ` Michael S. Tsirkin
2009-12-02 12:04 ` [Qemu-devel] [PATCH 30/41] virtio-net: use save/load type chek functions for has_vent_hdr Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 31/41] virtio-net: we know macs size at compile time, make it static Juan Quintela
2009-12-02 14:54   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 18:33     ` Juan Quintela
2009-12-02 18:48       ` Alex Williamson
2009-12-02 12:04 ` [Qemu-devel] [PATCH 32/41] virtio-net: split virtio_net_post_load Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 33/41] virtio-net: port to vmstate Juan Quintela
2009-12-02 14:58   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 18:38     ` Juan Quintela
2009-12-02 18:40       ` Michael S. Tsirkin
2009-12-02 19:07         ` Juan Quintela
2009-12-02 18:37   ` Michael S. Tsirkin
2009-12-02 19:18     ` Juan Quintela
2009-12-03  9:19       ` Michael S. Tsirkin
2009-12-03 12:01         ` Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 34/41] virtio-console: " Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 35/41] virtio-balloon: " Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 36/41] virtio-blk: change rq type to VirtIOBlockReq Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 37/41] QLIST: Introduce QLIST_COPY_HEAD Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 38/41] virtio-blk: use QLIST for the list of requests Juan Quintela
2009-12-02 17:38   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 18:56     ` Juan Quintela
2009-12-02 19:00       ` Michael S. Tsirkin
2009-12-02 12:04 ` [Qemu-devel] [PATCH 39/41] virtio-blk: add VirtIOBlokReqHead type Juan Quintela
2009-12-02 12:04 ` [Qemu-devel] [PATCH 40/41] virtio-blk: port to vmstate Juan Quintela
2009-12-02 17:54   ` Michael S. Tsirkin [this message]
2009-12-04 18:15     ` [Qemu-devel] " Anthony Liguori
2009-12-02 12:04 ` [Qemu-devel] [PATCH 41/41] virtio: virtio_save/load are not used anymore Juan Quintela
2009-12-02 18:17   ` [Qemu-devel] " Michael S. Tsirkin
2009-12-02 18:57     ` Juan Quintela

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=20091202175418.GB3638@redhat.com \
    --to=mst@redhat.com \
    --cc=hch@lst.de \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@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 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).