libxc/migration: Specification update for DIRTY_PFN_LIST records

Used by secondary to send it's dirty bitmap to primary under COLO.

Signed-off-by: Yang Hongyang <hongyang.yang@easystack.cn>
Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
This commit is contained in:
Wen Congyang authored and Changlong Xie committed 2016-04-01 11:07:28 +08:00
1 parent b92e7184c1
commit 9f4edff430
4 files changed
+96 -61

No files matched your search

+26 -1
View File
@@ -1,6 +1,8 @@
% LibXenCtrl Domain Image Format
% David Vrabel <<david.vrabel@citrix.com>>
Andrew Cooper <<andrew.cooper3@citrix.com>>
Wen Congyang <<wency@cn.fujitsu.com>>
Yang Hongyang <<hongyang.yang@easystack.cn>>
% Revision 1
Introduction
@@ -227,7 +229,9 @@ type 0x00000000: END
0x0000000E: CHECKPOINT
0x0000000F - 0x7FFFFFFF: Reserved for future _mandatory_
0x0000000F: CHECKPOINT_DIRTY_PFN_LIST (Secondary -> Primary)
0x00000010 - 0x7FFFFFFF: Reserved for future _mandatory_
records.
0x80000000 - 0xFFFFFFFF: Reserved for future _optional_
@@ -599,6 +603,27 @@ CHECKPOINT record or an END record.
\clearpage
CHECKPOINT_DIRTY_PFN_LIST
-------------------------
A checkpoint dirty pfn list record is used to convey information about
dirty memory in the VM. It is an unordered list of PFNs. Currently only
applicable in the backchannel of a checkpointed stream. It is only used
by COLO, more detail please reference README.colo.
0 1 2 3 4 5 6 7 octet
+-------------------------------------------------+
| pfn[0] |
+-------------------------------------------------+
...
+-------------------------------------------------+
| pfn[C-1] |
+-------------------------------------------------+
The count of pfns is: record->length/sizeof(uint64_t).
\clearpage
Layout
======
+16 -15
View File
@@ -20,21 +20,22 @@ const char *dhdr_type_to_str(uint32_t type)
static const char *mandatory_rec_types[] =
{
[REC_TYPE_END] = "End",
[REC_TYPE_PAGE_DATA] = "Page data",
[REC_TYPE_X86_PV_INFO] = "x86 PV info",
[REC_TYPE_X86_PV_P2M_FRAMES] = "x86 PV P2M frames",
[REC_TYPE_X86_PV_VCPU_BASIC] = "x86 PV vcpu basic",
[REC_TYPE_X86_PV_VCPU_EXTENDED] = "x86 PV vcpu extended",
[REC_TYPE_X86_PV_VCPU_XSAVE] = "x86 PV vcpu xsave",
[REC_TYPE_SHARED_INFO] = "Shared info",
[REC_TYPE_TSC_INFO] = "TSC info",
[REC_TYPE_HVM_CONTEXT] = "HVM context",
[REC_TYPE_HVM_PARAMS] = "HVM params",
[REC_TYPE_TOOLSTACK] = "Toolstack",
[REC_TYPE_X86_PV_VCPU_MSRS] = "x86 PV vcpu msrs",
[REC_TYPE_VERIFY] = "Verify",
[REC_TYPE_CHECKPOINT] = "Checkpoint",
[REC_TYPE_END] = "End",
[REC_TYPE_PAGE_DATA] = "Page data",
[REC_TYPE_X86_PV_INFO] = "x86 PV info",
[REC_TYPE_X86_PV_P2M_FRAMES] = "x86 PV P2M frames",
[REC_TYPE_X86_PV_VCPU_BASIC] = "x86 PV vcpu basic",
[REC_TYPE_X86_PV_VCPU_EXTENDED] = "x86 PV vcpu extended",
[REC_TYPE_X86_PV_VCPU_XSAVE] = "x86 PV vcpu xsave",
[REC_TYPE_SHARED_INFO] = "Shared info",
[REC_TYPE_TSC_INFO] = "TSC info",
[REC_TYPE_HVM_CONTEXT] = "HVM context",
[REC_TYPE_HVM_PARAMS] = "HVM params",
[REC_TYPE_TOOLSTACK] = "Toolstack",
[REC_TYPE_X86_PV_VCPU_MSRS] = "x86 PV vcpu msrs",
[REC_TYPE_VERIFY] = "Verify",
[REC_TYPE_CHECKPOINT] = "Checkpoint",
[REC_TYPE_CHECKPOINT_DIRTY_PFN_LIST] = "Checkpoint dirty pfn list",
};
const char *rec_type_to_str(uint32_t type)
+16 -15
View File
@@ -60,21 +60,22 @@ struct xc_sr_rhdr
/* Somewhat arbitrary - 8MB */
#define REC_LENGTH_MAX (8U << 20)
#define REC_TYPE_END 0x00000000U
#define REC_TYPE_PAGE_DATA 0x00000001U
#define REC_TYPE_X86_PV_INFO 0x00000002U
#define REC_TYPE_X86_PV_P2M_FRAMES 0x00000003U
#define REC_TYPE_X86_PV_VCPU_BASIC 0x00000004U
#define REC_TYPE_X86_PV_VCPU_EXTENDED 0x00000005U
#define REC_TYPE_X86_PV_VCPU_XSAVE 0x00000006U
#define REC_TYPE_SHARED_INFO 0x00000007U
#define REC_TYPE_TSC_INFO 0x00000008U
#define REC_TYPE_HVM_CONTEXT 0x00000009U
#define REC_TYPE_HVM_PARAMS 0x0000000aU
#define REC_TYPE_TOOLSTACK 0x0000000bU
#define REC_TYPE_X86_PV_VCPU_MSRS 0x0000000cU
#define REC_TYPE_VERIFY 0x0000000dU
#define REC_TYPE_CHECKPOINT 0x0000000eU
#define REC_TYPE_END 0x00000000U
#define REC_TYPE_PAGE_DATA 0x00000001U
#define REC_TYPE_X86_PV_INFO 0x00000002U
#define REC_TYPE_X86_PV_P2M_FRAMES 0x00000003U
#define REC_TYPE_X86_PV_VCPU_BASIC 0x00000004U
#define REC_TYPE_X86_PV_VCPU_EXTENDED 0x00000005U
#define REC_TYPE_X86_PV_VCPU_XSAVE 0x00000006U
#define REC_TYPE_SHARED_INFO 0x00000007U
#define REC_TYPE_TSC_INFO 0x00000008U
#define REC_TYPE_HVM_CONTEXT 0x00000009U
#define REC_TYPE_HVM_PARAMS 0x0000000aU
#define REC_TYPE_TOOLSTACK 0x0000000bU
#define REC_TYPE_X86_PV_VCPU_MSRS 0x0000000cU
#define REC_TYPE_VERIFY 0x0000000dU
#define REC_TYPE_CHECKPOINT 0x0000000eU
#define REC_TYPE_CHECKPOINT_DIRTY_PFN_LIST 0x0000000fU
#define REC_TYPE_OPTIONAL 0x80000000U
+38 -30
View File
@@ -45,38 +45,40 @@ dhdr_type_to_str = {
# Records
RH_FORMAT = "II"
REC_TYPE_end = 0x00000000
REC_TYPE_page_data = 0x00000001
REC_TYPE_x86_pv_info = 0x00000002
REC_TYPE_x86_pv_p2m_frames = 0x00000003
REC_TYPE_x86_pv_vcpu_basic = 0x00000004
REC_TYPE_x86_pv_vcpu_extended = 0x00000005
REC_TYPE_x86_pv_vcpu_xsave = 0x00000006
REC_TYPE_shared_info = 0x00000007
REC_TYPE_tsc_info = 0x00000008
REC_TYPE_hvm_context = 0x00000009
REC_TYPE_hvm_params = 0x0000000a
REC_TYPE_toolstack = 0x0000000b
REC_TYPE_x86_pv_vcpu_msrs = 0x0000000c
REC_TYPE_verify = 0x0000000d
REC_TYPE_checkpoint = 0x0000000e
REC_TYPE_end = 0x00000000
REC_TYPE_page_data = 0x00000001
REC_TYPE_x86_pv_info = 0x00000002
REC_TYPE_x86_pv_p2m_frames = 0x00000003
REC_TYPE_x86_pv_vcpu_basic = 0x00000004
REC_TYPE_x86_pv_vcpu_extended = 0x00000005
REC_TYPE_x86_pv_vcpu_xsave = 0x00000006
REC_TYPE_shared_info = 0x00000007
REC_TYPE_tsc_info = 0x00000008
REC_TYPE_hvm_context = 0x00000009
REC_TYPE_hvm_params = 0x0000000a
REC_TYPE_toolstack = 0x0000000b
REC_TYPE_x86_pv_vcpu_msrs = 0x0000000c
REC_TYPE_verify = 0x0000000d
REC_TYPE_checkpoint = 0x0000000e
REC_TYPE_checkpoint_dirty_pfn_list = 0x0000000f
rec_type_to_str = {
REC_TYPE_end : "End",
REC_TYPE_page_data : "Page data",
REC_TYPE_x86_pv_info : "x86 PV info",
REC_TYPE_x86_pv_p2m_frames : "x86 PV P2M frames",
REC_TYPE_x86_pv_vcpu_basic : "x86 PV vcpu basic",
REC_TYPE_x86_pv_vcpu_extended : "x86 PV vcpu extended",
REC_TYPE_x86_pv_vcpu_xsave : "x86 PV vcpu xsave",
REC_TYPE_shared_info : "Shared info",
REC_TYPE_tsc_info : "TSC info",
REC_TYPE_hvm_context : "HVM context",
REC_TYPE_hvm_params : "HVM params",
REC_TYPE_toolstack : "Toolstack",
REC_TYPE_x86_pv_vcpu_msrs : "x86 PV vcpu msrs",
REC_TYPE_verify : "Verify",
REC_TYPE_checkpoint : "Checkpoint",
REC_TYPE_end : "End",
REC_TYPE_page_data : "Page data",
REC_TYPE_x86_pv_info : "x86 PV info",
REC_TYPE_x86_pv_p2m_frames : "x86 PV P2M frames",
REC_TYPE_x86_pv_vcpu_basic : "x86 PV vcpu basic",
REC_TYPE_x86_pv_vcpu_extended : "x86 PV vcpu extended",
REC_TYPE_x86_pv_vcpu_xsave : "x86 PV vcpu xsave",
REC_TYPE_shared_info : "Shared info",
REC_TYPE_tsc_info : "TSC info",
REC_TYPE_hvm_context : "HVM context",
REC_TYPE_hvm_params : "HVM params",
REC_TYPE_toolstack : "Toolstack",
REC_TYPE_x86_pv_vcpu_msrs : "x86 PV vcpu msrs",
REC_TYPE_verify : "Verify",
REC_TYPE_checkpoint : "Checkpoint",
REC_TYPE_checkpoint_dirty_pfn_list : "Checkpoint dirty pfn list"
}
# page_data
@@ -403,6 +405,10 @@ class VerifyLibxc(VerifyBase):
if len(content) != 0:
raise RecordError("Checkpoint record with non-zero length")
def verify_record_checkpoint_dirty_pfn_list(self, content):
""" checkpoint dirty pfn list """
raise RecordError("Found checkpoint dirty pfn list record in stream")
record_verifiers = {
REC_TYPE_end:
@@ -443,4 +449,6 @@ record_verifiers = {
VerifyLibxc.verify_record_verify,
REC_TYPE_checkpoint:
VerifyLibxc.verify_record_checkpoint,
REC_TYPE_checkpoint_dirty_pfn_list:
VerifyLibxc.verify_record_checkpoint_dirty_pfn_list,
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.