On Thu, 18 Jun 2020 at 18:31, Peter Maydell <peter.mayd...@linaro.org> wrote: > > On Thu, 18 Jun 2020 at 04:50, wentongw <wentong...@intel.com> wrote: > > > > From: Wentong Wu <wentong...@intel.com> > > > > wrctl instruction on nios2 target will cause checking cpu interrupt, > > but tcg_handle_interrupt() will call cpu_abort() if the CPU gets an > > interrupt while it's not in a 'can do IO' state, so around wrctl > > instruction add gen_io_start/end. > > > > Signed-off-by: Wentong Wu <wentong...@intel.com> > > --- > > target/nios2/translate.c | 7 +++++++ > > 1 file changed, 7 insertions(+) > > > > diff --git a/target/nios2/translate.c b/target/nios2/translate.c > > index e17656e6..deaefcaf 100644 > > --- a/target/nios2/translate.c > > +++ b/target/nios2/translate.c > > @@ -32,6 +32,7 @@ > > #include "exec/cpu_ldst.h" > > #include "exec/translator.h" > > #include "qemu/qemu-print.h" > > +#include "exec/gen-icount.h" > > > > /* is_jmp field values */ > > #define DISAS_JUMP DISAS_TARGET_0 /* only pc was modified dynamically */ > > @@ -518,7 +519,13 @@ static void wrctl(DisasContext *dc, uint32_t code, > > uint32_t flags) > > /* If interrupts were enabled using WRCTL, trigger them. */ > > #if !defined(CONFIG_USER_ONLY) > > if ((instr.imm5 + CR_BASE) == CR_STATUS) { > > + if (tb_cflags(dc->tb) & CF_USE_ICOUNT) { > > + gen_io_start(); > > + } > > gen_helper_check_interrupts(dc->cpu_env); > > + if (tb_cflags(dc->tb) & CF_USE_ICOUNT) { > > + gen_io_end(); > > + } > > You also need to end the TB, which we should do whether > we're using icount or not. This is awkward because nios2 has > not correctly implemented the DISAS_UPDATE that is the right > way to do that.
After some further discussion with other maintainers abotu the gen_io_start/gen_io_end semantics, it turns out that I was wrong about the need for gen_io_end -- if you are going to end the TB after the I/O instruction (which you are in this case) then you do not need the gen_io_end() call, it is handled automatically for you by common code. So you can drop that bit from the next version of this patch. Sorry for the confusion. thanks -- PMM