[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 03/15] qcow2: introduce icount field for snapshots
From: |
Pavel Dovgalyuk |
Subject: |
[PATCH v5 03/15] qcow2: introduce icount field for snapshots |
Date: |
Tue, 22 Sep 2020 15:15:55 +0300 |
User-agent: |
StGit/0.17.1-dirty |
From: Pavel Dovgalyuk <Pavel.Dovgaluk@ispras.ru>
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.Dovgalyuk@ispras.ru>
Acked-by: Kevin Wolf <kwolf@redhat.com>
---
block/qcow2-snapshot.c | 7 +++++++
block/qcow2.h | 3 +++
docs/interop/qcow2.txt | 5 +++++
3 files changed, 15 insertions(+)
diff --git a/block/qcow2-snapshot.c b/block/qcow2-snapshot.c
index 9b68690f56..d68b25e0c5 100644
--- a/block/qcow2-snapshot.c
+++ b/block/qcow2-snapshot.c
@@ -164,6 +164,12 @@ static int qcow2_do_read_snapshots(BlockDriverState *bs,
bool repair,
sn->disk_size = bs->total_sectors * BDRV_SECTOR_SIZE;
}
+ if (sn->extra_data_size >= endof(QCowSnapshotExtraData, icount)) {
+ sn->icount = be64_to_cpu(extra.icount);
+ } else {
+ sn->icount = -1ULL;
+ }
+
if (sn->extra_data_size > sizeof(extra)) {
uint64_t extra_data_end;
size_t unknown_extra_data_size;
@@ -333,6 +339,7 @@ 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 b71e444fca..125ea9679b 100644
--- a/block/qcow2.h
+++ b/block/qcow2.h
@@ -206,6 +206,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;
@@ -219,6 +220,8 @@ typedef struct QCowSnapshot {
uint32_t date_sec;
uint32_t date_nsec;
uint64_t vm_clock_nsec;
+ /* icount value for the moment when snapshot was taken */
+ uint64_t icount;
/* Size of all extra data, including QCowSnapshotExtraData if available */
uint32_t extra_data_size;
/* Data beyond QCowSnapshotExtraData, if any */
diff --git a/docs/interop/qcow2.txt b/docs/interop/qcow2.txt
index 7da0d81df8..0463f761ef 100644
--- a/docs/interop/qcow2.txt
+++ b/docs/interop/qcow2.txt
@@ -707,6 +707,11 @@ 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. Set to -1
+ if icount was disabled
+
Version 3 images must include extra data at least up to
byte 55.
- [PATCH v5 00/15] Reverse debugging, Pavel Dovgalyuk, 2020/09/22
- [PATCH v5 01/15] replay: don't record interrupt poll, Pavel Dovgalyuk, 2020/09/22
- [PATCH v5 02/15] replay: provide an accessor for rr filename, Pavel Dovgalyuk, 2020/09/22
- [PATCH v5 03/15] qcow2: introduce icount field for snapshots,
Pavel Dovgalyuk <=
- [PATCH v5 04/15] migration: introduce icount field for snapshots, Pavel Dovgalyuk, 2020/09/22
- [PATCH v5 05/15] qapi: introduce replay.json for record/replay-related stuff, Pavel Dovgalyuk, 2020/09/22
- [PATCH v5 06/15] replay: introduce info hmp/qmp command, Pavel Dovgalyuk, 2020/09/22
- [PATCH v5 07/15] replay: introduce breakpoint at the specified step, Pavel Dovgalyuk, 2020/09/22
- [PATCH v5 08/15] replay: implement replay-seek command, Pavel Dovgalyuk, 2020/09/22
- [PATCH v5 09/15] replay: flush rr queue before loading the vmstate, Pavel Dovgalyuk, 2020/09/22
- [PATCH v5 10/15] gdbstub: add reverse step support in replay mode, Pavel Dovgalyuk, 2020/09/22
- [PATCH v5 11/15] gdbstub: add reverse continue support in replay mode, Pavel Dovgalyuk, 2020/09/22
- [PATCH v5 12/15] replay: describe reverse debugging in docs/replay.txt, Pavel Dovgalyuk, 2020/09/22
- [PATCH v5 13/15] docs: convert replay.txt to rst, Pavel Dovgalyuk, 2020/09/22