Coverage Report

Created: 2017-10-25 09:10

/root/src/xen/xen/include/asm/hvm/save.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * save.h: HVM support routines for save/restore
3
 *
4
 * This program is free software; you can redistribute it and/or modify it
5
 * under the terms and conditions of the GNU General Public License,
6
 * version 2, as published by the Free Software Foundation.
7
 *
8
 * This program is distributed in the hope it will be useful, but WITHOUT
9
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
11
 * more details.
12
 *
13
 * You should have received a copy of the GNU General Public License along with
14
 * this program; If not, see <http://www.gnu.org/licenses/>.
15
 */
16
17
#ifndef __XEN_HVM_SAVE_H__
18
#define __XEN_HVM_SAVE_H__
19
20
#include <xen/types.h>
21
#include <xen/init.h>
22
#include <public/xen.h>
23
#include <public/hvm/save.h>
24
25
/* Marshalling and unmarshalling uses a buffer with size and cursor. */
26
typedef struct hvm_domain_context {
27
    uint32_t cur;
28
    uint32_t size;
29
    uint8_t *data;
30
} hvm_domain_context_t;
31
32
/* Marshalling an entry: check space and fill in the header */
33
int _hvm_init_entry(struct hvm_domain_context *h,
34
                    uint16_t tc, uint16_t inst, uint32_t len);
35
36
/* Marshalling: copy the contents in a type-safe way */
37
void _hvm_write_entry(struct hvm_domain_context *h,
38
                      void *src, uint32_t src_len);
39
40
/* Marshalling: init and copy; evaluates to zero on success */
41
0
#define hvm_save_entry(_x, _inst, _h, _src) ({                  \
42
0
    int r;                                                      \
43
0
    r = _hvm_init_entry((_h), HVM_SAVE_CODE(_x),                \
44
0
                        (_inst), HVM_SAVE_LENGTH(_x));          \
45
0
    if ( r == 0 )                                               \
46
0
        _hvm_write_entry((_h), (_src), HVM_SAVE_LENGTH(_x));    \
47
0
    r; })
48
49
/* Unmarshalling: test an entry's size and typecode and record the instance */
50
int _hvm_check_entry(struct hvm_domain_context *h, 
51
                     uint16_t type, uint32_t len, bool_t strict_length);
52
53
/* Unmarshalling: copy the contents in a type-safe way */
54
void _hvm_read_entry(struct hvm_domain_context *h,
55
                     void *dest, uint32_t dest_len);
56
57
/*
58
 * Unmarshalling: check, then copy. Evaluates to zero on success. This load
59
 * function requires the save entry to be the same size as the dest structure.
60
 */
61
0
#define _hvm_load_entry(_x, _h, _dst, _strict) ({                       \
62
0
    int r;                                                              \
63
0
    struct hvm_save_descriptor *desc                                    \
64
0
        = (struct hvm_save_descriptor *)&(_h)->data[(_h)->cur];         \
65
0
    if ( (r = _hvm_check_entry((_h), HVM_SAVE_CODE(_x),                 \
66
0
               HVM_SAVE_LENGTH(_x), (_strict))) == 0 )                  \
67
0
    {                                                                   \
68
0
        _hvm_read_entry((_h), (_dst), HVM_SAVE_LENGTH(_x));             \
69
0
        if ( HVM_SAVE_HAS_COMPAT(_x) &&                                 \
70
0
             desc->length != HVM_SAVE_LENGTH(_x) )                      \
71
0
            r = HVM_SAVE_FIX_COMPAT(_x, (_dst), desc->length);          \
72
0
    }                                                                   \
73
0
    else if (HVM_SAVE_HAS_COMPAT(_x)                                    \
74
0
             && (r = _hvm_check_entry((_h), HVM_SAVE_CODE(_x),          \
75
0
                       HVM_SAVE_LENGTH_COMPAT(_x), (_strict))) == 0 ) { \
76
0
        _hvm_read_entry((_h), (_dst), HVM_SAVE_LENGTH_COMPAT(_x));      \
77
0
        r = HVM_SAVE_FIX_COMPAT(_x, (_dst), desc->length);              \
78
0
    }                                                                   \
79
0
    r; })
80
81
#define hvm_load_entry(_x, _h, _dst)            \
82
0
    _hvm_load_entry(_x, _h, _dst, 1)
83
#define hvm_load_entry_zeroextend(_x, _h, _dst) \
84
0
    _hvm_load_entry(_x, _h, _dst, 0)
85
86
/* Unmarshalling: what is the instance ID of the next entry? */
87
static inline uint16_t hvm_load_instance(struct hvm_domain_context *h)
88
0
{
89
0
    struct hvm_save_descriptor *d 
90
0
        = (struct hvm_save_descriptor *)&h->data[h->cur];
91
0
    return d->instance;
92
0
}
Unexecuted instantiation: xstate.c:hvm_load_instance
Unexecuted instantiation: iret.c:hvm_load_instance
Unexecuted instantiation: emul-priv-op.c:hvm_load_instance
Unexecuted instantiation: emul-inv-op.c:hvm_load_instance
Unexecuted instantiation: emul-gate-op.c:hvm_load_instance
Unexecuted instantiation: descriptor-tables.c:hvm_load_instance
Unexecuted instantiation: callback.c:hvm_load_instance
Unexecuted instantiation: backtrace.c:hvm_load_instance
Unexecuted instantiation: op_model_athlon.c:hvm_load_instance
Unexecuted instantiation: nested_ept.c:hvm_load_instance
Unexecuted instantiation: nested_hap.c:hvm_load_instance
Unexecuted instantiation: hap.c:hvm_load_instance
Unexecuted instantiation: multi.c:hvm_load_instance
Unexecuted instantiation: common.c:hvm_load_instance
Unexecuted instantiation: mem_sharing.c:hvm_load_instance
Unexecuted instantiation: mem_paging.c:hvm_load_instance
Unexecuted instantiation: altp2m.c:hvm_load_instance
Unexecuted instantiation: domctl.c:hvm_load_instance
Unexecuted instantiation: domain.c:hvm_load_instance
Unexecuted instantiation: event_channel.c:hvm_load_instance
Unexecuted instantiation: grant_table.c:hvm_load_instance
Unexecuted instantiation: guestcopy.c:hvm_load_instance
Unexecuted instantiation: kernel.c:hvm_load_instance
Unexecuted instantiation: kexec.c:hvm_load_instance
Unexecuted instantiation: kimage.c:hvm_load_instance
Unexecuted instantiation: mem_access.c:hvm_load_instance
Unexecuted instantiation: memory.c:hvm_load_instance
Unexecuted instantiation: multicall.c:hvm_load_instance
Unexecuted instantiation: page_alloc.c:hvm_load_instance
Unexecuted instantiation: sched_arinc653.c:hvm_load_instance
Unexecuted instantiation: sched_rt.c:hvm_load_instance
Unexecuted instantiation: schedule.c:hvm_load_instance
Unexecuted instantiation: spinlock.c:hvm_load_instance
Unexecuted instantiation: symbols.c:hvm_load_instance
Unexecuted instantiation: sysctl.c:hvm_load_instance
Unexecuted instantiation: xenoprof.c:hvm_load_instance
Unexecuted instantiation: tmem.c:hvm_load_instance
Unexecuted instantiation: tmem_xen.c:hvm_load_instance
Unexecuted instantiation: tmem_control.c:hvm_load_instance
Unexecuted instantiation: llvm.c:hvm_load_instance
Unexecuted instantiation: libelf-loader.c:hvm_load_instance
Unexecuted instantiation: console.c:hvm_load_instance
Unexecuted instantiation: cpufreq.c:hvm_load_instance
Unexecuted instantiation: iommu.c:hvm_load_instance
Unexecuted instantiation: io.c:hvm_load_instance
Unexecuted instantiation: pci.c:hvm_load_instance
Unexecuted instantiation: pmstat.c:hvm_load_instance
Unexecuted instantiation: compat.c:hvm_load_instance
Unexecuted instantiation: crash.c:hvm_load_instance
Unexecuted instantiation: debug.c:hvm_load_instance
Unexecuted instantiation: i387.c:hvm_load_instance
Unexecuted instantiation: machine_kexec.c:hvm_load_instance
Unexecuted instantiation: microcode.c:hvm_load_instance
Unexecuted instantiation: mm.c:hvm_load_instance
Unexecuted instantiation: physdev.c:hvm_load_instance
Unexecuted instantiation: platform_hypercall.c:hvm_load_instance
Unexecuted instantiation: setup.c:hvm_load_instance
Unexecuted instantiation: smp.c:hvm_load_instance
Unexecuted instantiation: time.c:hvm_load_instance
Unexecuted instantiation: traps.c:hvm_load_instance
Unexecuted instantiation: ro-page-fault.c:hvm_load_instance
Unexecuted instantiation: suspend.c:hvm_load_instance
Unexecuted instantiation: cpu_idle.c:hvm_load_instance
Unexecuted instantiation: amd.c:hvm_load_instance
Unexecuted instantiation: intel.c:hvm_load_instance
Unexecuted instantiation: vpmu.c:hvm_load_instance
Unexecuted instantiation: vpmu_amd.c:hvm_load_instance
Unexecuted instantiation: vpmu_intel.c:hvm_load_instance
Unexecuted instantiation: mce.c:hvm_load_instance
Unexecuted instantiation: vmce.c:hvm_load_instance
Unexecuted instantiation: dm.c:hvm_load_instance
Unexecuted instantiation: emulate.c:hvm_load_instance
Unexecuted instantiation: hpet.c:hvm_load_instance
Unexecuted instantiation: hvm.c:hvm_load_instance
Unexecuted instantiation: hypercall.c:hvm_load_instance
Unexecuted instantiation: i8254.c:hvm_load_instance
Unexecuted instantiation: intercept.c:hvm_load_instance
Unexecuted instantiation: ioreq.c:hvm_load_instance
Unexecuted instantiation: irq.c:hvm_load_instance
Unexecuted instantiation: mtrr.c:hvm_load_instance
Unexecuted instantiation: nestedhvm.c:hvm_load_instance
Unexecuted instantiation: pmtimer.c:hvm_load_instance
Unexecuted instantiation: quirks.c:hvm_load_instance
Unexecuted instantiation: rtc.c:hvm_load_instance
Unexecuted instantiation: save.c:hvm_load_instance
Unexecuted instantiation: stdvga.c:hvm_load_instance
Unexecuted instantiation: vioapic.c:hvm_load_instance
Unexecuted instantiation: viridian.c:hvm_load_instance
Unexecuted instantiation: vlapic.c:hvm_load_instance
Unexecuted instantiation: vm_event.c:hvm_load_instance
Unexecuted instantiation: vmsi.c:hvm_load_instance
Unexecuted instantiation: vpic.c:hvm_load_instance
Unexecuted instantiation: vpt.c:hvm_load_instance
Unexecuted instantiation: intr.c:hvm_load_instance
Unexecuted instantiation: nestedsvm.c:hvm_load_instance
Unexecuted instantiation: svm.c:hvm_load_instance
Unexecuted instantiation: vmcb.c:hvm_load_instance
Unexecuted instantiation: realmode.c:hvm_load_instance
Unexecuted instantiation: vmcs.c:hvm_load_instance
Unexecuted instantiation: vmx.c:hvm_load_instance
Unexecuted instantiation: vvmx.c:hvm_load_instance
Unexecuted instantiation: paging.c:hvm_load_instance
Unexecuted instantiation: p2m.c:hvm_load_instance
Unexecuted instantiation: p2m-ept.c:hvm_load_instance
93
94
/* Handler types for different types of save-file entry. 
95
 * The save handler may save multiple instances of a type into the buffer;
96
 * the load handler will be called once for each instance found when
97
 * restoring.  Both return non-zero on error. */
98
typedef int (*hvm_save_handler) (struct domain *d, 
99
                                 hvm_domain_context_t *h);
100
typedef int (*hvm_load_handler) (struct domain *d,
101
                                 hvm_domain_context_t *h);
102
103
/* Init-time function to declare a pair of handlers for a type,
104
 * and the maximum buffer space needed to save this type of state */
105
void hvm_register_savevm(uint16_t typecode,
106
                         const char *name, 
107
                         hvm_save_handler save_state,
108
                         hvm_load_handler load_state,
109
                         size_t size, int kind);
110
111
/* The space needed for saving can be per-domain or per-vcpu: */
112
#define HVMSR_PER_DOM  0
113
1
#define HVMSR_PER_VCPU 1
114
115
/* Syntactic sugar around that function: specify the max number of
116
 * saves, and this calculates the size of buffer needed */
117
#define HVM_REGISTER_SAVE_RESTORE(_x, _save, _load, _num, _k)             \
118
17
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
17
{                                                                         \
120
17
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
17
                        #_x,                                              \
122
17
                        &_save,                                           \
123
17
                        &_load,                                           \
124
17
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
17
                                  + sizeof (struct hvm_save_descriptor)), \
126
17
                        _k);                                              \
127
17
    return 0;                                                             \
128
17
}                                                                         \
vpic.c:__hvm_register_PIC_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
vlapic.c:__hvm_register_LAPIC_REGS_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
vlapic.c:__hvm_register_LAPIC_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
viridian.c:__hvm_register_VIRIDIAN_VCPU_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
viridian.c:__hvm_register_VIRIDIAN_DOMAIN_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
vioapic.c:__hvm_register_IOAPIC_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
rtc.c:__hvm_register_RTC_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
pmtimer.c:__hvm_register_PMTIMER_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
mtrr.c:__hvm_register_MTRR_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
irq.c:__hvm_register_PCI_LINK_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
irq.c:__hvm_register_ISA_IRQ_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
irq.c:__hvm_register_PCI_IRQ_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
i8254.c:__hvm_register_PIT_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
hvm.c:__hvm_register_CPU_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
hvm.c:__hvm_register_TSC_ADJUST_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
hpet.c:__hvm_register_HPET_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
vmce.c:__hvm_register_VMCE_VCPU_save_and_restore
Line
Count
Source
118
1
static int __init __hvm_register_##_x##_save_and_restore(void)            \
119
1
{                                                                         \
120
1
    hvm_register_savevm(HVM_SAVE_CODE(_x),                                \
121
1
                        #_x,                                              \
122
1
                        &_save,                                           \
123
1
                        &_load,                                           \
124
1
                        (_num) * (HVM_SAVE_LENGTH(_x)                     \
125
1
                                  + sizeof (struct hvm_save_descriptor)), \
126
1
                        _k);                                              \
127
1
    return 0;                                                             \
128
1
}                                                                         \
129
__initcall(__hvm_register_##_x##_save_and_restore);
130
131
132
/* Entry points for saving and restoring HVM domain state */
133
size_t hvm_save_size(struct domain *d);
134
int hvm_save(struct domain *d, hvm_domain_context_t *h);
135
int hvm_save_one(struct domain *d, unsigned int typecode, unsigned int instance,
136
                 XEN_GUEST_HANDLE_64(uint8) handle, uint64_t *bufsz);
137
int hvm_load(struct domain *d, hvm_domain_context_t *h);
138
139
/* Arch-specific definitions. */
140
struct hvm_save_header;
141
void arch_hvm_save(struct domain *d, struct hvm_save_header *hdr);
142
int arch_hvm_load(struct domain *d, struct hvm_save_header *hdr);
143
144
#endif /* __XEN_HVM_SAVE_H__ */