Skip to contentSkip to conversation

Reset interrupt_request on loadvm

PATCH In review Jan Kiszka 2 participants 3 messages Jun 2, 2008 – Jun 3, 2008

lore
Share & tools
lore

Jan Kiszka

author
#0 lore raw

PATCH 1/1 Reset interrupt_request on loadvm

Trying to use savevm/loadvm to reduce my debug round-trip times, I came across this bug. The following reset is required to avoid spurious IRQ injections after the system state has been loaded from a snapshot. Not sure if it is a regression of SVN head, but Qemu from my Suse 10.3 seems to be immune.

---
 cpu-defs.h |    3 +++
 vl.c       |    3 +++
 2 files changed, 6 insertions(+)
cpu-defs.h +3 -0
Index: b/cpu-defs.h
===================================================================
@@ -172,3 +172,6 @@ typedef struct CPUTLBEntry {
     const char *cpu_model_str;
 
 #endif
+
+#define foreach_cpu(env) \
+    for(env = first_cpu; env != NULL; env = env->next_cpu)
vl.c +3 -0
Index: b/vl.c
===================================================================
@@ -6032,6 +6032,7 @@ static SaveStateEntry *find_se(const cha
 static int qemu_loadvm_state(QEMUFile *f)
 {
     SaveStateEntry *se;
+    CPUState *env;
     int len, ret, instance_id, record_len, version_id;
     int64_t total_len, end_pos, cur_pos;
     unsigned int v;
@@ -6046,6 +6047,8 @@ static int qemu_loadvm_state(QEMUFile *f
         ret = -1;
         goto the_end;
     }
+    foreach_cpu(env)
+        env->interrupt_request = 0;
     total_len = qemu_get_be64(f);
     end_pos = total_len + qemu_ftell(f);
     for(;;) {
#1 lore raw
Quoted 18 lines · Jan Kiszka

Trying to use savevm/loadvm to reduce my debug round-trip times, I came across this bug. The following reset is required to avoid spurious IRQ injections after the system state has been loaded from a snapshot. Not sure if it is a regression of SVN head, but Qemu from my Suse 10.3 seems to be immune.

---
 cpu-defs.h |    3 +++
 vl.c       |    3 +++
 2 files changed, 6 insertions(+)

Index: b/cpu-defs.h
===================================================================

cpu-defs.h typedef struct CPUTLBEntry { · line 177

Quoted 6 lines
cpu-defs.h +3 -0
@@ -172,3 +172,6 @@ typedef struct CPUTLBEntry {
     const char *cpu_model_str;
 
 #endif
+
+#define foreach_cpu(env) \
+    for(env = first_cpu; env != NULL; env = env->next_cpu)

Please don't introduce this sort of wrapper in this patch. If you think open coded iterations should be eliminated, do it in a separate patch.

Regards,

Anthony Liguori

Quoted 24 lines

Index: b/vl.c
===================================================================

vl.c +3 -0
@@ -6032,6 +6032,7 @@ static SaveStateEntry *find_se(const cha
 static int qemu_loadvm_state(QEMUFile *f)
 {
     SaveStateEntry *se;
+    CPUState *env;
     int len, ret, instance_id, record_len, version_id;
     int64_t total_len, end_pos, cur_pos;
     unsigned int v;
@@ -6046,6 +6047,8 @@ static int qemu_loadvm_state(QEMUFile *f
         ret = -1;
         goto the_end;
     }
+    foreach_cpu(env)
+        env->interrupt_request = 0;
     total_len = qemu_get_be64(f);
     end_pos = total_len + qemu_ftell(f);
     for(;;) {
author
#2 lore raw
Quoted 20 lines · Anthony Liguori
Quoted 19 lines · Jan Kiszka

Trying to use savevm/loadvm to reduce my debug round-trip times, I came across this bug. The following reset is required to avoid spurious IRQ injections after the system state has been loaded from a snapshot. Not sure if it is a regression of SVN head, but Qemu from my Suse 10.3 seems to be immune.

---
 cpu-defs.h |    3 +++
 vl.c       |    3 +++
 2 files changed, 6 insertions(+)

Index: b/cpu-defs.h
===================================================================

cpu-defs.h +0 -0
@@ -172,3 +172,6 @@ typedef struct CPUTLBEntry {
     const char *cpu_model_str;
 
Quoted 8 lines

cpu-defs.h typedef struct CPUTLBEntry { · line 177

Quoted 5 lines
cpu-defs.h +3 -0
 #endif
+
+#define foreach_cpu(env) \
+    for(env = first_cpu; env != NULL; env = env->next_cpu)

Please don't introduce this sort of wrapper in this patch. If you think open coded iterations should be eliminated, do it in a separate patch.

Sorry, I ripped this quickly (and incorrectly!) out of my queue where I'm using this for quite a while routinely.

----------
Trying to use savevm/loadvm to reduce my debug round-trip times, I came across this bug. The following reset is required to avoid spurious IRQ injections after the system state has been loaded from a snapshot. Not sure if it is a regression of SVN head, but Qemu from my Suse 10.3 seems to be immune.

---
 vl.c |    3 +++
 1 file changed, 3 insertions(+)
vl.c +3 -0
Index: b/vl.c
===================================================================
@@ -6032,6 +6032,7 @@ static SaveStateEntry *find_se(const cha
 static int qemu_loadvm_state(QEMUFile *f)
 {
     SaveStateEntry *se;
+    CPUState *env;
     int len, ret, instance_id, record_len, version_id;
     int64_t total_len, end_pos, cur_pos;
     unsigned int v;
@@ -6046,6 +6047,8 @@ static int qemu_loadvm_state(QEMUFile *f
         ret = -1;
         goto the_end;
     }
+    for (env = first_cpu; env != NULL; env = env->next_cpu)
+        env->interrupt_request = 0;
     total_len = qemu_get_be64(f);
     end_pos = total_len + qemu_ftell(f);
     for(;;) {