On 12 April 2018 at 18:08, Aaron Lindsay <alind...@codeaurora.org> wrote: > On Apr 12 17:53, Peter Maydell wrote: >> On 16 March 2018 at 20:31, Aaron Lindsay <alind...@codeaurora.org> wrote: >> > During code generation, surround CPSR writes and exception returns which >> > call the EL change hooks with gen_io_start/end. The immediate need is >> > for the PMU to access the clock and icount during EL change to support >> > mode filtering. >> > >> > Signed-off-by: Aaron Lindsay <alind...@codeaurora.org> >> > --- >> > target/arm/translate-a64.c | 2 ++ >> > target/arm/translate.c | 4 ++++ >> > 2 files changed, 6 insertions(+) >> > >> > diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c >> > index 31ff047..e1ae676 100644 >> > --- a/target/arm/translate-a64.c >> > +++ b/target/arm/translate-a64.c >> > @@ -1919,7 +1919,9 @@ static void disas_uncond_b_reg(DisasContext *s, >> > uint32_t insn) >> > unallocated_encoding(s); >> > return; >> > } >> > + gen_io_start(); >> > gen_helper_exception_return(cpu_env); >> > + gen_io_end(); >> >> You don't want to call gen_io_start() or gen_io_end() unless >> tb_cflags(s->base.tb) & CF_USE_ICOUNT) is true. >> >> (Ditto in the other cases below.) > > I assume there's nothing tricky about this and updating this as follows > is sufficient?
Yes, that's sufficient. (The other thing that needs to happen for a gen_io_start/end is that the insn has to end the TB -- but in all these cases that's already true as they set s->base.is_jmp = DISAS_EXIT.) thanks -- PMM