All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, peter.maydell@linaro.org, war2jordan@live.com,
	crosthwaite.peter@gmail.com, boost.lists@gmail.com,
	artem.k.pisarenko@gmail.com, quintela@redhat.com,
	ciro.santilli@gmail.com, jasowang@redhat.com, mst@redhat.com,
	armbru@redhat.com, mreitz@redhat.com,
	maria.klimushenkova@ispras.ru, dovgaluk@ispras.ru,
	kraxel@redhat.com, pavel.dovgaluk@ispras.ru,
	thomas.dullien@googlemail.com, pbonzini@redhat.com,
	alex.bennee@linaro.org, dgilbert@redhat.com, rth@twiddle.net
Subject: [Qemu-devel] [PATCH v11 07/25] qcow2: introduce icount field for snapshots
Date: Thu, 31 Jan 2019 16:16:02 +0300	[thread overview]
Message-ID: <20190131131601.23264.59311.stgit@pasha-VirtualBox> (raw)
In-Reply-To: <20190131131520.23264.75724.stgit@pasha-VirtualBox>

This patch introduces the icount field for saving within the snapshot.
It is required for navigation between the snapshots in record/replay mode.

Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
Acked-by: Kevin Wolf <kwolf@redhat.com>

--

v2:
 - documented format changes in docs/interop/qcow2.txt
   (suggested by Eric Blake)
v10:
 - updated the documentation
---
 block/qcow2-snapshot.c |    7 +++++++
 block/qcow2.h          |    2 ++
 docs/interop/qcow2.txt |    4 ++++
 3 files changed, 13 insertions(+)

diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c
index bb6a5b7..d682946 100644
--- a/block/qcow2-snapshot.c
+++ b/block/qcow2-snapshot.c
@@ -103,6 +103,12 @@ int qcow2_read_snapshots(BlockDriverState *bs)
             sn->disk_size = bs->total_sectors * BDRV_SECTOR_SIZE;
         }
 
+        if (extra_data_size >= 24) {
+            sn->icount = be64_to_cpu(extra.icount);
+        } else {
+            sn->icount = -1ULL;
+        }
+
         /* Read snapshot ID */
         sn->id_str = g_malloc(id_str_size + 1);
         ret = bdrv_pread(bs->file, offset, sn->id_str, id_str_size);
@@ -209,6 +215,7 @@ static int qcow2_write_snapshots(BlockDriverState *bs)
         memset(&extra, 0, sizeof(extra));
         extra.vm_state_size_large = cpu_to_be64(sn->vm_state_size);
         extra.disk_size = cpu_to_be64(sn->disk_size);
+        extra.icount = cpu_to_be64(sn->icount);
 
         id_str_size = strlen(sn->id_str);
         name_size = strlen(sn->name);
diff --git a/block/qcow2.h b/block/qcow2.h
index 438a1de..f33e26a 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -159,6 +159,7 @@ typedef struct QEMU_PACKED QCowSnapshotHeader {
 typedef struct QEMU_PACKED QCowSnapshotExtraData {
     uint64_t vm_state_size_large;
     uint64_t disk_size;
+    uint64_t icount;
 } QCowSnapshotExtraData;
 
 
@@ -172,6 +173,7 @@ typedef struct QCowSnapshot {
     uint32_t date_sec;
     uint32_t date_nsec;
     uint64_t vm_clock_nsec;
+    uint64_t icount;
 } QCowSnapshot;
 
 struct Qcow2Cache;
diff --git a/docs/interop/qcow2.txt b/docs/interop/qcow2.txt
index fb5cb47..14ca489 100644
--- a/docs/interop/qcow2.txt
+++ b/docs/interop/qcow2.txt
@@ -540,6 +540,10 @@ Snapshot table entry:
 
                     Byte 48 - 55:   Virtual disk size of the snapshot in bytes
 
+                    Byte 56 - 63:   icount value which corresponds to
+                                    the record/replay instruction count
+                                    when the snapshot was taken
+
                     Version 3 images must include extra data at least up to
                     byte 55.
 

  parent reply	other threads:[~2019-01-31 13:16 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-31 13:15 [Qemu-devel] [PATCH v11 00/25] Fixing record/replay and adding reverse debugging Pavel Dovgalyuk
2019-01-31 13:15 ` [Qemu-devel] [PATCH v11 01/25] replay: add missing fix for internal function Pavel Dovgalyuk
2019-01-31 13:15 ` [Qemu-devel] [PATCH v11 02/25] block: implement bdrv_snapshot_goto for blkreplay Pavel Dovgalyuk
2019-01-31 13:15 ` [Qemu-devel] [PATCH v11 03/25] replay: disable default snapshot for record/replay Pavel Dovgalyuk
2019-01-31 13:15 ` [Qemu-devel] [PATCH v11 04/25] replay: update docs for record/replay with block devices Pavel Dovgalyuk
2019-01-31 13:15 ` [Qemu-devel] [PATCH v11 05/25] replay: don't drain/flush bdrv queue while RR is working Pavel Dovgalyuk
2019-01-31 13:15 ` [Qemu-devel] [PATCH v11 06/25] replay: finish record/replay before closing the disks Pavel Dovgalyuk
2019-01-31 13:16 ` Pavel Dovgalyuk [this message]
2019-01-31 13:16 ` [Qemu-devel] [PATCH v11 08/25] migration: introduce icount field for snapshots Pavel Dovgalyuk
2019-01-31 13:16 ` [Qemu-devel] [PATCH v11 09/25] replay: provide an accessor for rr filename Pavel Dovgalyuk
2019-01-31 13:16 ` [Qemu-devel] [PATCH v11 10/25] qapi: introduce replay.json for record/replay-related stuff Pavel Dovgalyuk
2019-01-31 13:16 ` [Qemu-devel] [PATCH v11 11/25] replay: introduce info hmp/qmp command Pavel Dovgalyuk
2019-01-31 13:16 ` [Qemu-devel] [PATCH v11 12/25] replay: introduce breakpoint at the specified step Pavel Dovgalyuk
2019-01-31 13:16 ` [Qemu-devel] [PATCH v11 13/25] replay: implement replay-seek command Pavel Dovgalyuk
2019-01-31 13:16 ` [Qemu-devel] [PATCH v11 14/25] replay: refine replay-time module Pavel Dovgalyuk
2019-01-31 13:16 ` [Qemu-devel] [PATCH v11 15/25] replay: flush rr queue before loading the vmstate Pavel Dovgalyuk
2019-01-31 13:16 ` [Qemu-devel] [PATCH v11 16/25] gdbstub: add reverse step support in replay mode Pavel Dovgalyuk
2019-01-31 13:16 ` [Qemu-devel] [PATCH v11 17/25] gdbstub: add reverse continue " Pavel Dovgalyuk
2019-01-31 13:17 ` [Qemu-devel] [PATCH v11 18/25] replay: describe reverse debugging in docs/replay.txt Pavel Dovgalyuk
2019-01-31 13:17 ` [Qemu-devel] [PATCH v11 19/25] replay: add BH oneshot event for block layer Pavel Dovgalyuk
2019-01-31 13:17 ` [Qemu-devel] [PATCH v11 20/25] replay: init rtc after enabling the replay Pavel Dovgalyuk
2019-01-31 13:17 ` [Qemu-devel] [PATCH v11 21/25] replay: document development rules Pavel Dovgalyuk
2019-01-31 13:17 ` [Qemu-devel] [PATCH v11 22/25] util/qemu-timer: refactor deadline calculation for external timers Pavel Dovgalyuk
2019-01-31 13:17 ` [Qemu-devel] [PATCH v11 23/25] replay: fix replay shutdown Pavel Dovgalyuk
2019-01-31 13:17 ` [Qemu-devel] [PATCH v11 24/25] replay: rename step-related variables and functions Pavel Dovgalyuk
2019-01-31 13:17 ` [Qemu-devel] [PATCH v11 25/25] icount: clean up cpu_can_io before jumping to the next block Pavel Dovgalyuk
2019-01-31 17:54 ` [Qemu-devel] [PATCH v11 00/25] Fixing record/replay and adding reverse debugging no-reply

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=20190131131601.23264.59311.stgit@pasha-VirtualBox \
    --to=pavel.dovgaluk@ispras.ru \
    --cc=alex.bennee@linaro.org \
    --cc=armbru@redhat.com \
    --cc=artem.k.pisarenko@gmail.com \
    --cc=boost.lists@gmail.com \
    --cc=ciro.santilli@gmail.com \
    --cc=crosthwaite.peter@gmail.com \
    --cc=dgilbert@redhat.com \
    --cc=dovgaluk@ispras.ru \
    --cc=jasowang@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=maria.klimushenkova@ispras.ru \
    --cc=mreitz@redhat.com \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=rth@twiddle.net \
    --cc=thomas.dullien@googlemail.com \
    --cc=war2jordan@live.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.