On Sat, Jul 4, 2015 at 1:06 AM, Peter Maydell <peter.mayd...@linaro.org>
wrote:

> On 3 July 2015 at 18:02, Jun Koi <junkoi2...@gmail.com> wrote:
> > I am looking at how the main thread interrupts TCG thread. Inside
> > cpu-exec.c, in function cpu_tb_exec(), I can see that it executes one TB,
> > and when this is over, it can check for events from other threads (like
> main
> > thread). This is the reason why TCG thread can be interrupted.
> >
> > Is my understanding correct?
> >
> > If this is true, then what if this TB is running infinitely, and do not
> > return, or it is in a very long loop? In this case, TCG thread cannot be
> > interrupted?
>
> Every TB starts with a little bit of generated code that checks
> the 'tcg_exit_req' flag in the CPUState for the CPU (see the
> gen_tb_start() function). If some other part of QEMU wants the
> CPU to stop running guest code and return to the top level loop,
> it calls cpu_exit() which sets this flag.
>

But this does not answer my question yet: if we the flag is only enable
when TB already enters the "long loop", then nothing can break this TB
execution?

Thanks.

Reply via email to