Richard Henderson <richard.hender...@linaro.org> writes:
> On 2/10/21 2:10 PM, Alex Bennée wrote: >> Again there is no reason to jump through the nocache hoops to execute >> a single instruction block. We do have to add an additional wrinkle to >> the cpu_handle_interrupt case to ensure we let through a TB where we >> have specifically disabled icount for the block. > > Can you say more about this? Because... > >> if (unlikely(qatomic_read(&cpu->exit_request)) >> || (icount_enabled() >> + && (cpu->cflags_next_tb == -1 || cpu->cflags_next_tb & >> CF_USE_ICOUNT) >> && cpu_neg(cpu)->icount_decr.u16.low + cpu->icount_extra == 0)) >> { > > ... this does not appear to match. You're checking that icount has been > explicitly *enabled*? If icount has been enabled and we are using the default cflags or enabled and we have the explicit CF_ICOUNT. The replay exception leg explicitly disables icount because otherwise we'd never actually execute the block because we have a budget of 0 cycles left. Previously we ran that block at the exception handling point - now we fall through and have to make sure we don't trigger an IRQ. > Or am I reading the logic backward and only if icount is > enabled will we take EXCP_INTERRUPT? Or I guess we have an exit_request which hasn't been handled yet but there is no EXCP_ pending. > > > r~ -- Alex Bennée