diff mbox

exec: save exception_index field

Message ID 000601cfac82$0e135e30$2a3a1a90$@Dovgaluk@ispras.ru
State New
Headers show

Commit Message

Pavel Dovgalyuk July 31, 2014, 5:41 a.m. UTC
This patch adds 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>
---
 exec.c |   35 +++++++++++++++++++++++++++++++++++
 1 files changed, 35 insertions(+), 0 deletions(-)

Comments

Andreas Färber July 31, 2014, 6:56 a.m. UTC | #1
Hi,

Am 31.07.2014 07:41, schrieb Pavel Dovgaluk:
> This patch adds 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>
> ---
>  exec.c |   35 +++++++++++++++++++++++++++++++++++
>  1 files changed, 35 insertions(+), 0 deletions(-)

Doh, this resolves my request from the big series,

Reviewed-by: Andreas Färber <afaerber@suse.de>

I'll wait for more review before I take it, please keep me CC'ed.

Thanks,
Andreas
Pavel Dovgalyuk Aug. 25, 2014, 11:09 a.m. UTC | #2
> From: Andreas Färber [mailto:afaerber@suse.de]
> Am 31.07.2014 07:41, schrieb Pavel Dovgaluk:
> > This patch adds 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>
> > ---
> >  exec.c |   35 +++++++++++++++++++++++++++++++++++
> >  1 files changed, 35 insertions(+), 0 deletions(-)
> 
> Doh, this resolves my request from the big series,
> 
> Reviewed-by: Andreas Färber <afaerber@suse.de>
> 
> I'll wait for more review before I take it, please keep me CC'ed.

No more reviews yet.
Will this patch be applied?

Pavel Dovgalyuk
Andreas Färber Aug. 25, 2014, 4:40 p.m. UTC | #3
Am 25.08.2014 13:09, schrieb Pavel Dovgaluk:
>> From: Andreas Färber [mailto:afaerber@suse.de]
>> Am 31.07.2014 07:41, schrieb Pavel Dovgaluk:
>>> This patch adds 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>
>>> ---
>>>  exec.c |   35 +++++++++++++++++++++++++++++++++++
>>>  1 files changed, 35 insertions(+), 0 deletions(-)
>>
>> Doh, this resolves my request from the big series,
>>
>> Reviewed-by: Andreas Färber <afaerber@suse.de>
>>
>> I'll wait for more review before I take it, please keep me CC'ed.
> 
> No more reviews yet.
> Will this patch be applied?

Thanks for the reminder, applied to qom-cpu now:
https://github.com/afaerber/qemu-cpu/commits/qom-cpu

Andreas
diff mbox

Patch

diff --git a/exec.c b/exec.c
index 765bd94..7581c06 100644
--- a/exec.c
+++ b/exec.c
@@ -430,15 +430,50 @@  static int cpu_common_post_load(void *opaque, int version_id)
     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 = {
     .name = "cpu_common",
     .version_id = 1,
     .minimum_version_id = 1,
+    .pre_load = cpu_common_pre_load,
     .post_load = cpu_common_post_load,
     .fields = (VMStateField[]) {
         VMSTATE_UINT32(halted, CPUState),
         VMSTATE_UINT32(interrupt_request, CPUState),
         VMSTATE_END_OF_LIST()
+    },
+    .subsections = (VMStateSubsection[]) {
+        {
+            .vmsd = &vmstate_cpu_common_exception_index,
+            .needed = cpu_common_exception_index_needed,
+        } , {
+            /* empty */
+        }
     }
 };