Reset interrupt_request on loadvm
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
@@ -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
@@ -6032,6 +6032,7 @@ static SaveStateEntry *find_se(const chastatic 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 (;;) {
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.
Signed-off-by Jan Kiszka <[email protected]>--- 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 chastatic 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 (;;) {
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.
Signed-off-by Jan Kiszka <[email protected]>--- 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
@@ -6032,6 +6032,7 @@ static SaveStateEntry *find_se(const chastatic 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 (;;) {