fixed async signal support for tb_phys_invalidate()
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1670 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
4a38940da0
commit
6f5a9f7e56
17
exec.c
17
exec.c
@ -672,12 +672,19 @@ void tb_invalidate_phys_page_range(target_ulong start, target_ulong end,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#endif /* TARGET_HAS_PRECISE_SMC */
|
#endif /* TARGET_HAS_PRECISE_SMC */
|
||||||
saved_tb = env->current_tb;
|
/* we need to do that to handle the case where a signal
|
||||||
env->current_tb = NULL;
|
occurs while doing tb_phys_invalidate() */
|
||||||
|
saved_tb = NULL;
|
||||||
|
if (env) {
|
||||||
|
saved_tb = env->current_tb;
|
||||||
|
env->current_tb = NULL;
|
||||||
|
}
|
||||||
tb_phys_invalidate(tb, -1);
|
tb_phys_invalidate(tb, -1);
|
||||||
env->current_tb = saved_tb;
|
if (env) {
|
||||||
if (env->interrupt_request && env->current_tb)
|
env->current_tb = saved_tb;
|
||||||
cpu_interrupt(env, env->interrupt_request);
|
if (env->interrupt_request && env->current_tb)
|
||||||
|
cpu_interrupt(env, env->interrupt_request);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tb = tb_next;
|
tb = tb_next;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user