qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC PATCH 19/26] cpu-exec: reset exit flag before call


From: Pavel Dovgalyuk
Subject: Re: [Qemu-devel] [RFC PATCH 19/26] cpu-exec: reset exit flag before calling cpu_exec_nocache
Date: Thu, 2 Nov 2017 15:45:29 +0300

> From: Paolo Bonzini [mailto:address@hidden
> On 02/11/2017 12:24, Pavel Dovgalyuk wrote:
> >> I am not sure about this.  I think if instead you should return false
> >> from here and EXCP_INTERRUPT from cpu_exec.
> > The problem is inside the TB. It checks cpu->icount_decr.u16.high which is 
> > -1.
> > And we have to enter the TB to cause an exception (because it exists in 
> > replay log).
> > That is why we reset this flag and try to execute the TB.
> 
> But if u16.high is -1, shouldn't you return EXCP_INTERRUPT first (via
> "Finally, check if we need to exit to the main loop" in
> cpu_handle_interrupt)?  Then only cause the exception when that one is
> processed.

The case is the following.
1. There are no pending instructions to execute, cpu_loop_exec_tb finished.
2. There are no interrupts and cpu_handle_interrupt sets cpu->exception_index = 
EXCP_INTERRUPT
3. There are no pending exceptions and cpu_handle_exception goes to the last 
branch,
   because there is an exception flag in the log.
4. cpu_exec_nocache translates the block and tries to execute it, causing an 
exception

> 
> Paolo
> 
> >> More important: there is still a race, because high can be set to -1
> >> right after your atomic_set.
> > I'm not sure about it. But even the race exists, exec_nocache attempt will 
> > be repeated
> > after failed try.
> >
> > Returning true is ok here, because we know that exception will happen 
> > (because it is
> > recorded in the log).


Pavel Dovgalyuk




reply via email to

[Prev in Thread] Current Thread [Next in Thread]