|
From: | Richard Henderson |
Subject: | Re: [Qemu-devel] [PATCH v12 12/24] tcg: handle EXCP_ATOMIC exception for system emulation |
Date: | Tue, 14 Feb 2017 06:19:10 +1100 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 |
On 02/13/2017 11:10 PM, Alex Bennée wrote:
@@ -239,9 +240,16 @@ static void cpu_exec_step(CPUState *cpu) 1 | CF_NOCACHE | CF_IGNORE_ICOUNT); tb->orig_tb = NULL; tb_unlock(); - /* execute the generated code */ - trace_exec_tb_nocache(tb, pc); - cpu_tb_exec(cpu, tb); + + cc->cpu_exec_enter(cpu); + + if (sigsetjmp(cpu->jmp_env, 0) == 0) { + /* execute the generated code */ + trace_exec_tb_nocache(tb, pc); + cpu_tb_exec(cpu, tb); + }
I don't understand this, since cpu_tb_exec has its own sigsetjmp. Where is the exception supposed to come from that escapes?
+ } else if (r == EXCP_ATOMIC) { + qemu_mutex_unlock_iothread(); + cpu_exec_step_atomic(cpu); + qemu_mutex_lock_iothread();
...
+ case EXCP_ATOMIC: + qemu_mutex_unlock_iothread(); + cpu_exec_step_atomic(cpu); + qemu_mutex_lock_iothread();
I just noticed this, but if you have to do a v13, it might be best to move these locks inside cpu_exec_step_atomic, as with tcg_cpu_exec. Otherwise leave it for later.
r~
[Prev in Thread] | Current Thread | [Next in Thread] |