exec: Save CPUState::exception_index field
This patch adds a subsection with exception_index field to the VMState for correct saving the CPU state. Without this patch, simulator could miss the pending exception in the saved virtual machine state. Signed-off-by: Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru> Cc: qemu-stable@nongnu.org Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
fd884c0765
commit
6c3bff0ed8
35
exec.c
35
exec.c
@ -430,15 +430,50 @@ static int cpu_common_post_load(void *opaque, int version_id)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int cpu_common_pre_load(void *opaque)
|
||||||
|
{
|
||||||
|
CPUState *cpu = opaque;
|
||||||
|
|
||||||
|
cpu->exception_index = 0;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool cpu_common_exception_index_needed(void *opaque)
|
||||||
|
{
|
||||||
|
CPUState *cpu = opaque;
|
||||||
|
|
||||||
|
return cpu->exception_index != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const VMStateDescription vmstate_cpu_common_exception_index = {
|
||||||
|
.name = "cpu_common/exception_index",
|
||||||
|
.version_id = 1,
|
||||||
|
.minimum_version_id = 1,
|
||||||
|
.fields = (VMStateField[]) {
|
||||||
|
VMSTATE_INT32(exception_index, CPUState),
|
||||||
|
VMSTATE_END_OF_LIST()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const VMStateDescription vmstate_cpu_common = {
|
const VMStateDescription vmstate_cpu_common = {
|
||||||
.name = "cpu_common",
|
.name = "cpu_common",
|
||||||
.version_id = 1,
|
.version_id = 1,
|
||||||
.minimum_version_id = 1,
|
.minimum_version_id = 1,
|
||||||
|
.pre_load = cpu_common_pre_load,
|
||||||
.post_load = cpu_common_post_load,
|
.post_load = cpu_common_post_load,
|
||||||
.fields = (VMStateField[]) {
|
.fields = (VMStateField[]) {
|
||||||
VMSTATE_UINT32(halted, CPUState),
|
VMSTATE_UINT32(halted, CPUState),
|
||||||
VMSTATE_UINT32(interrupt_request, CPUState),
|
VMSTATE_UINT32(interrupt_request, CPUState),
|
||||||
VMSTATE_END_OF_LIST()
|
VMSTATE_END_OF_LIST()
|
||||||
|
},
|
||||||
|
.subsections = (VMStateSubsection[]) {
|
||||||
|
{
|
||||||
|
.vmsd = &vmstate_cpu_common_exception_index,
|
||||||
|
.needed = cpu_common_exception_index_needed,
|
||||||
|
} , {
|
||||||
|
/* empty */
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user