mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 23:33:54 -06:00
tcg: Release mmap_lock on translation fault
Turn helper_retaddr into a multi-state flag that may now also indicate when we're performing a read on behalf of the translator. In this case, release the mmap_lock before the longjmp back to the main cpu loop, and thereby avoid a failing assert therein. Fixes: https://bugs.launchpad.net/qemu/+bug/1832353 Tested-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
parent
2fbb2353ce
commit
52ba13f042
2 changed files with 63 additions and 23 deletions
|
@ -64,12 +64,18 @@
|
|||
static inline RES_TYPE
|
||||
glue(glue(cpu_ld, USUFFIX), MEMSUFFIX)(CPUArchState *env, abi_ptr ptr)
|
||||
{
|
||||
#if !defined(CODE_ACCESS)
|
||||
#ifdef CODE_ACCESS
|
||||
RES_TYPE ret;
|
||||
set_helper_retaddr(1);
|
||||
ret = glue(glue(ld, USUFFIX), _p)(g2h(ptr));
|
||||
clear_helper_retaddr();
|
||||
return ret;
|
||||
#else
|
||||
trace_guest_mem_before_exec(
|
||||
env_cpu(env), ptr,
|
||||
trace_mem_build_info(SHIFT, false, MO_TE, false));
|
||||
#endif
|
||||
return glue(glue(ld, USUFFIX), _p)(g2h(ptr));
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef CODE_ACCESS
|
||||
|
@ -90,12 +96,18 @@ glue(glue(glue(cpu_ld, USUFFIX), MEMSUFFIX), _ra)(CPUArchState *env,
|
|||
static inline int
|
||||
glue(glue(cpu_lds, SUFFIX), MEMSUFFIX)(CPUArchState *env, abi_ptr ptr)
|
||||
{
|
||||
#if !defined(CODE_ACCESS)
|
||||
#ifdef CODE_ACCESS
|
||||
int ret;
|
||||
set_helper_retaddr(1);
|
||||
ret = glue(glue(lds, SUFFIX), _p)(g2h(ptr));
|
||||
clear_helper_retaddr();
|
||||
return ret;
|
||||
#else
|
||||
trace_guest_mem_before_exec(
|
||||
env_cpu(env), ptr,
|
||||
trace_mem_build_info(SHIFT, true, MO_TE, false));
|
||||
#endif
|
||||
return glue(glue(lds, SUFFIX), _p)(g2h(ptr));
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef CODE_ACCESS
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue