From: "Cédric Le Goater" <clg@redhat.com>
To: peterx@redhat.com, qemu-devel@nongnu.org
Cc: "Michael S . Tsirkin" <mst@redhat.com>,
Alex Williamson <alex.williamson@redhat.com>,
Jason Wang <jasowang@redhat.com>, Bandan Das <bdas@redhat.com>,
Prasad Pandit <ppandit@redhat.com>,
Fabiano Rosas <farosas@suse.de>
Subject: Re: [PATCH 03/10] docs/migration: Convert virtio.txt into rST
Date: Tue, 9 Jan 2024 08:02:27 +0100 [thread overview]
Message-ID: <770e7e60-e972-4120-b3e7-b5203337c9c0@redhat.com> (raw)
In-Reply-To: <20240109064628.595453-4-peterx@redhat.com>
On 1/9/24 07:46, peterx@redhat.com wrote:
> From: Peter Xu <peterx@redhat.com>
>
> Convert the plain old .txt into .rst, add it into migration/index.rst.
>
> Signed-off-by: Peter Xu <peterx@redhat.com>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Thanks,
C.
> ---
> docs/devel/migration/index.rst | 1 +
> docs/devel/migration/virtio.rst | 115 ++++++++++++++++++++++++++++++++
> docs/devel/migration/virtio.txt | 108 ------------------------------
> 3 files changed, 116 insertions(+), 108 deletions(-)
> create mode 100644 docs/devel/migration/virtio.rst
> delete mode 100644 docs/devel/migration/virtio.txt
>
> diff --git a/docs/devel/migration/index.rst b/docs/devel/migration/index.rst
> index 02cfdcc969..2cb701c77c 100644
> --- a/docs/devel/migration/index.rst
> +++ b/docs/devel/migration/index.rst
> @@ -9,3 +9,4 @@ QEMU live migration works.
>
> main
> vfio
> + virtio
> diff --git a/docs/devel/migration/virtio.rst b/docs/devel/migration/virtio.rst
> new file mode 100644
> index 0000000000..611a18b821
> --- /dev/null
> +++ b/docs/devel/migration/virtio.rst
> @@ -0,0 +1,115 @@
> +=======================
> +Virtio device migration
> +=======================
> +
> +Copyright 2015 IBM Corp.
> +
> +This work is licensed under the terms of the GNU GPL, version 2 or later. See
> +the COPYING file in the top-level directory.
> +
> +Saving and restoring the state of virtio devices is a bit of a twisty maze,
> +for several reasons:
> +
> +- state is distributed between several parts:
> +
> + - virtio core, for common fields like features, number of queues, ...
> +
> + - virtio transport (pci, ccw, ...), for the different proxy devices and
> + transport specific state (msix vectors, indicators, ...)
> +
> + - virtio device (net, blk, ...), for the different device types and their
> + state (mac address, request queue, ...)
> +
> +- most fields are saved via the stream interface; subsequently, subsections
> + have been added to make cross-version migration possible
> +
> +This file attempts to document the current procedure and point out some
> +caveats.
> +
> +Save state procedure
> +====================
> +
> +::
> +
> + virtio core virtio transport virtio device
> + ----------- ---------------- -------------
> +
> + save() function registered
> + via VMState wrapper on
> + device class
> + virtio_save() <----------
> + ------> save_config()
> + - save proxy device
> + - save transport-specific
> + device fields
> + - save common device
> + fields
> + - save common virtqueue
> + fields
> + ------> save_queue()
> + - save transport-specific
> + virtqueue fields
> + ------> save_device()
> + - save device-specific
> + fields
> + - save subsections
> + - device endianness,
> + if changed from
> + default endianness
> + - 64 bit features, if
> + any high feature bit
> + is set
> + - virtio-1 virtqueue
> + fields, if VERSION_1
> + is set
> +
> +Load state procedure
> +====================
> +
> +::
> +
> + virtio core virtio transport virtio device
> + ----------- ---------------- -------------
> +
> + load() function registered
> + via VMState wrapper on
> + device class
> + virtio_load() <----------
> + ------> load_config()
> + - load proxy device
> + - load transport-specific
> + device fields
> + - load common device
> + fields
> + - load common virtqueue
> + fields
> + ------> load_queue()
> + - load transport-specific
> + virtqueue fields
> + - notify guest
> + ------> load_device()
> + - load device-specific
> + fields
> + - load subsections
> + - device endianness
> + - 64 bit features
> + - virtio-1 virtqueue
> + fields
> + - sanitize endianness
> + - sanitize features
> + - virtqueue index sanity
> + check
> + - feature-dependent setup
> +
> +Implications of this setup
> +==========================
> +
> +Devices need to be careful in their state processing during load: The
> +load_device() procedure is invoked by the core before subsections have
> +been loaded. Any code that depends on information transmitted in subsections
> +therefore has to be invoked in the device's load() function _after_
> +virtio_load() returned (like e.g. code depending on features).
> +
> +Any extension of the state being migrated should be done in subsections
> +added to the core for compatibility reasons. If transport or device specific
> +state is added, core needs to invoke a callback from the new subsection.
> diff --git a/docs/devel/migration/virtio.txt b/docs/devel/migration/virtio.txt
> deleted file mode 100644
> index 98a6b0ffb5..0000000000
> --- a/docs/devel/migration/virtio.txt
> +++ /dev/null
> @@ -1,108 +0,0 @@
> -Virtio devices and migration
> -============================
> -
> -Copyright 2015 IBM Corp.
> -
> -This work is licensed under the terms of the GNU GPL, version 2 or later. See
> -the COPYING file in the top-level directory.
> -
> -Saving and restoring the state of virtio devices is a bit of a twisty maze,
> -for several reasons:
> -- state is distributed between several parts:
> - - virtio core, for common fields like features, number of queues, ...
> - - virtio transport (pci, ccw, ...), for the different proxy devices and
> - transport specific state (msix vectors, indicators, ...)
> - - virtio device (net, blk, ...), for the different device types and their
> - state (mac address, request queue, ...)
> -- most fields are saved via the stream interface; subsequently, subsections
> - have been added to make cross-version migration possible
> -
> -This file attempts to document the current procedure and point out some
> -caveats.
> -
> -
> -Save state procedure
> -====================
> -
> -virtio core virtio transport virtio device
> ------------ ---------------- -------------
> -
> - save() function registered
> - via VMState wrapper on
> - device class
> -virtio_save() <----------
> - ------> save_config()
> - - save proxy device
> - - save transport-specific
> - device fields
> -- save common device
> - fields
> -- save common virtqueue
> - fields
> - ------> save_queue()
> - - save transport-specific
> - virtqueue fields
> - ------> save_device()
> - - save device-specific
> - fields
> -- save subsections
> - - device endianness,
> - if changed from
> - default endianness
> - - 64 bit features, if
> - any high feature bit
> - is set
> - - virtio-1 virtqueue
> - fields, if VERSION_1
> - is set
> -
> -
> -Load state procedure
> -====================
> -
> -virtio core virtio transport virtio device
> ------------ ---------------- -------------
> -
> - load() function registered
> - via VMState wrapper on
> - device class
> -virtio_load() <----------
> - ------> load_config()
> - - load proxy device
> - - load transport-specific
> - device fields
> -- load common device
> - fields
> -- load common virtqueue
> - fields
> - ------> load_queue()
> - - load transport-specific
> - virtqueue fields
> -- notify guest
> - ------> load_device()
> - - load device-specific
> - fields
> -- load subsections
> - - device endianness
> - - 64 bit features
> - - virtio-1 virtqueue
> - fields
> -- sanitize endianness
> -- sanitize features
> -- virtqueue index sanity
> - check
> - - feature-dependent setup
> -
> -
> -Implications of this setup
> -==========================
> -
> -Devices need to be careful in their state processing during load: The
> -load_device() procedure is invoked by the core before subsections have
> -been loaded. Any code that depends on information transmitted in subsections
> -therefore has to be invoked in the device's load() function _after_
> -virtio_load() returned (like e.g. code depending on features).
> -
> -Any extension of the state being migrated should be done in subsections
> -added to the core for compatibility reasons. If transport or device specific
> -state is added, core needs to invoke a callback from the new subsection.
next prev parent reply other threads:[~2024-01-09 7:03 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-09 6:46 [PATCH 00/10] docs/migration: Reorganize migration documentations peterx
2024-01-09 6:46 ` [PATCH 01/10] docs/migration: Create migration/ directory peterx
2024-01-09 6:52 ` Cédric Le Goater
2024-01-09 6:46 ` [PATCH 02/10] docs/migration: Create index page peterx
2024-01-09 6:53 ` Cédric Le Goater
2024-01-09 6:46 ` [PATCH 03/10] docs/migration: Convert virtio.txt into rST peterx
2024-01-09 7:02 ` Cédric Le Goater [this message]
2024-01-09 6:46 ` [PATCH 04/10] docs/migration: Split "Backwards compatibility" separately peterx
2024-01-09 7:03 ` Cédric Le Goater
2024-01-09 6:46 ` [PATCH 05/10] docs/migration: Split "Debugging" and "Firmware" peterx
2024-01-09 7:04 ` Cédric Le Goater
2024-01-09 17:03 ` Fabiano Rosas
2024-01-10 2:10 ` Peter Xu
2024-01-09 6:46 ` [PATCH 06/10] docs/migration: Split "Postcopy" peterx
2024-01-09 7:05 ` Cédric Le Goater
2024-01-09 6:46 ` [PATCH 07/10] docs/migration: Split "dirty limit" peterx
2024-01-09 7:06 ` Cédric Le Goater
2024-01-09 6:46 ` [PATCH 08/10] docs/migration: Organize "Postcopy" page peterx
2024-01-09 7:20 ` Cédric Le Goater
2024-01-09 6:46 ` [PATCH 09/10] docs/migration: Further move vfio to be feature of migration peterx
2024-01-09 7:20 ` Cédric Le Goater
2024-01-09 6:46 ` [PATCH 10/10] docs/migration: Further move virtio " peterx
2024-01-09 7:20 ` Cédric Le Goater
2024-01-09 10:49 ` [PATCH 00/10] docs/migration: Reorganize migration documentations Peter Xu
2024-01-09 13:21 ` Cédric Le Goater
2024-01-10 2:37 ` Peter Xu
2024-01-10 15:21 ` Cédric Le Goater
2024-01-11 2:42 ` Peter Xu
2024-01-11 6:20 ` Peter Xu
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=770e7e60-e972-4120-b3e7-b5203337c9c0@redhat.com \
--to=clg@redhat.com \
--cc=alex.williamson@redhat.com \
--cc=bdas@redhat.com \
--cc=farosas@suse.de \
--cc=jasowang@redhat.com \
--cc=mst@redhat.com \
--cc=peterx@redhat.com \
--cc=ppandit@redhat.com \
--cc=qemu-devel@nongnu.org \
/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).