> From: Paolo Bonzini [mailto:pbonz...@redhat.com] > On 12/01/2015 13:40, Pavel Dovgaluk wrote: > >>> > >> > Perhaps check the replay_interrupt() outside, in an && with "if > >> > (unlikely(interrupt_request))"? > > You mean that I should wrap whole condition into "unlikely"? > > > > No, I wanted to have a single check of "replay_interrupt()" and/or > "replay_has_interrupt()". > > BTW, I think this is incorrect: > > > + if ((replay_mode != REPLAY_MODE_PLAY > > + || replay_has_interrupt()) > > + && cc->cpu_exec_interrupt(cpu, interrupt_request)) > > { > > + replay_interrupt(); > > because cc->cpu_exec_interrupt() can exit with cpu_loop_exit(cpu).
Haven't found any. Do you have an example? > > I guess it could be something like this: > > if (replay_mode == REPLAY_MODE_PLAY && !replay_has_interrupt()) { > /* do nothing */ > } else if (interrupt_request & CPU_INTERRUPT_HALT) { > replay_interrupt(); > ... > cpu_loop_exit(cpu); > } else if (interrupt_request & CPU_INTERRUPT_INIT) { > replay_interrupt(); > ... > cpu_loop_exit(cpu); > } else { > replay_interrupt(); > if (cc->cpu_exec_interrupt(cpu, interrupt_request)) { > next_tb = 0; > } > } Is it normal that processing of the reset request does not execute cpu_loop_exit(cpu)? > >>> > > #else > >>> > > - if (interrupt_request & CPU_INTERRUPT_RESET) { > >>> > > + if ((interrupt_request & CPU_INTERRUPT_RESET) > >>> > > + && replay_interrupt()) { > >>> > > cpu_reset(cpu); > >>> > > } > >>> > > #endif Pavel Dovgalyuk