mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 18:21:39 +01:00
Today the maximum record lenth in a migration stream is 8MB. This limits the size of a PV domain to a little bit less than 1TB in the migration case, as the P2M frame list will exceed 8MB in this case. Raising the record size limit by a factor of 16 allows for domain sizes of nearly 16TB to be migrated. This ought to be enough. Signed-off-by: Juergen Gross <jgross@suse.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
151 lines
3.2 KiB
C
151 lines
3.2 KiB
C
#ifndef __STREAM_FORMAT__H
|
|
#define __STREAM_FORMAT__H
|
|
|
|
/*
|
|
* C structures for the Migration v2 stream format.
|
|
* See docs/specs/libxc-migration-stream.pandoc
|
|
*/
|
|
|
|
#include <inttypes.h>
|
|
|
|
/*
|
|
* Image Header
|
|
*/
|
|
struct xc_sr_ihdr
|
|
{
|
|
uint64_t marker;
|
|
uint32_t id;
|
|
uint32_t version;
|
|
uint16_t options;
|
|
uint16_t _res1;
|
|
uint32_t _res2;
|
|
};
|
|
|
|
#define IHDR_MARKER 0xffffffffffffffffULL
|
|
#define IHDR_ID 0x58454E46U
|
|
#define IHDR_VERSION 2
|
|
|
|
#define _IHDR_OPT_ENDIAN 0
|
|
#define IHDR_OPT_LITTLE_ENDIAN (0 << _IHDR_OPT_ENDIAN)
|
|
#define IHDR_OPT_BIG_ENDIAN (1 << _IHDR_OPT_ENDIAN)
|
|
|
|
/*
|
|
* Domain Header
|
|
*/
|
|
struct xc_sr_dhdr
|
|
{
|
|
uint32_t type;
|
|
uint16_t page_shift;
|
|
uint16_t _res1;
|
|
uint32_t xen_major;
|
|
uint32_t xen_minor;
|
|
};
|
|
|
|
#define DHDR_TYPE_X86_PV 0x00000001U
|
|
#define DHDR_TYPE_X86_HVM 0x00000002U
|
|
#define DHDR_TYPE_X86_PVH 0x00000003U
|
|
#define DHDR_TYPE_ARM 0x00000004U
|
|
|
|
/*
|
|
* Record Header
|
|
*/
|
|
struct xc_sr_rhdr
|
|
{
|
|
uint32_t type;
|
|
uint32_t length;
|
|
};
|
|
|
|
/* All records must be aligned up to an 8 octet boundary */
|
|
#define REC_ALIGN_ORDER (3U)
|
|
/* Somewhat arbitrary - 128MB */
|
|
#define REC_LENGTH_MAX (128U << 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_CHECKPOINT_DIRTY_PFN_LIST 0x0000000fU
|
|
|
|
#define REC_TYPE_OPTIONAL 0x80000000U
|
|
|
|
/* PAGE_DATA */
|
|
struct xc_sr_rec_page_data_header
|
|
{
|
|
uint32_t count;
|
|
uint32_t _res1;
|
|
uint64_t pfn[0];
|
|
};
|
|
|
|
#define PAGE_DATA_PFN_MASK 0x000fffffffffffffULL
|
|
#define PAGE_DATA_TYPE_MASK 0xf000000000000000ULL
|
|
|
|
/* X86_PV_INFO */
|
|
struct xc_sr_rec_x86_pv_info
|
|
{
|
|
uint8_t guest_width;
|
|
uint8_t pt_levels;
|
|
uint8_t _res[6];
|
|
};
|
|
|
|
/* X86_PV_P2M_FRAMES */
|
|
struct xc_sr_rec_x86_pv_p2m_frames
|
|
{
|
|
uint32_t start_pfn;
|
|
uint32_t end_pfn;
|
|
uint64_t p2m_pfns[0];
|
|
};
|
|
|
|
/* X86_PV_VCPU_{BASIC,EXTENDED,XSAVE,MSRS} */
|
|
struct xc_sr_rec_x86_pv_vcpu_hdr
|
|
{
|
|
uint32_t vcpu_id;
|
|
uint32_t _res1;
|
|
uint8_t context[0];
|
|
};
|
|
|
|
/* TSC_INFO */
|
|
struct xc_sr_rec_tsc_info
|
|
{
|
|
uint32_t mode;
|
|
uint32_t khz;
|
|
uint64_t nsec;
|
|
uint32_t incarnation;
|
|
uint32_t _res1;
|
|
};
|
|
|
|
/* HVM_PARAMS */
|
|
struct xc_sr_rec_hvm_params_entry
|
|
{
|
|
uint64_t index;
|
|
uint64_t value;
|
|
};
|
|
|
|
struct xc_sr_rec_hvm_params
|
|
{
|
|
uint32_t count;
|
|
uint32_t _res1;
|
|
struct xc_sr_rec_hvm_params_entry param[0];
|
|
};
|
|
|
|
#endif
|
|
/*
|
|
* Local variables:
|
|
* mode: C
|
|
* c-file-style: "BSD"
|
|
* c-basic-offset: 4
|
|
* tab-width: 4
|
|
* indent-tabs-mode: nil
|
|
* End:
|
|
*/
|