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.

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).


Reply via email to