From: Maria Klimushenkova Date: Tue, 30 Oct 2018 12:21:34 +0000 (+0300) Subject: This patch fixes processing of rfi instructions in icount mode. X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=a59d628f92d8b27deb67387cd26642c3ffac2b06;p=qemu.git This patch fixes processing of rfi instructions in icount mode. In this mode writing to interrupt/peripheral state is controlled by can_do_io flag. This flag must be set explicitly before helper function invocation. Signed-off-by: Maria Klimushenkova Signed-off-by: Pavel Dovgalyuk Tested-by: Mark Cave-Ayland Signed-off-by: David Gibson --- diff --git a/target/ppc/translate.c b/target/ppc/translate.c index fb18cedcf0..2b37910248 100644 --- a/target/ppc/translate.c +++ b/target/ppc/translate.c @@ -3919,9 +3919,15 @@ static void gen_rfi(DisasContext *ctx) } /* Restore CPU state */ CHK_SV; + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_io_start(); + } gen_update_cfar(ctx, ctx->base.pc_next - 4); gen_helper_rfi(cpu_env); gen_sync_exception(ctx); + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_io_end(); + } #endif } @@ -3933,9 +3939,15 @@ static void gen_rfid(DisasContext *ctx) #else /* Restore CPU state */ CHK_SV; + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_io_start(); + } gen_update_cfar(ctx, ctx->base.pc_next - 4); gen_helper_rfid(cpu_env); gen_sync_exception(ctx); + if (tb_cflags(ctx->base.tb) & CF_USE_ICOUNT) { + gen_io_end(); + } #endif }