Message ID | 164362834054.1754532.7678416881159817273.stgit@pasha-ThinkPad-X280 |
---|---|
State | New |
Headers | show |
Series | replay: use CF_NOIRQ for special exception-replaying TB | expand |
On 1/31/22 22:25, Pavel Dovgalyuk wrote: > Commit aff0e204cb1f1c036a496c94c15f5dfafcd9b4b4 introduced CF_NOIRQ usage, > but one case was forgotten. Record/replay uses one special TB which is not > really executed, but used to cause a correct exception in replay mode. > This patch adds CF_NOIRQ flag for such block. > > Signed-off-by: Pavel Dovgalyuk<Pavel.Dovgalyuk@ispras.ru> > --- > accel/tcg/cpu-exec.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) Reviewed-by: Richard Henderson <richard.henderson@linaro.org> r~
On 1/31/22 22:25, Pavel Dovgalyuk wrote: > Commit aff0e204cb1f1c036a496c94c15f5dfafcd9b4b4 introduced CF_NOIRQ usage, > but one case was forgotten. Record/replay uses one special TB which is not > really executed, but used to cause a correct exception in replay mode. > This patch adds CF_NOIRQ flag for such block. > > Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru> > --- > accel/tcg/cpu-exec.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c > index 6dcff3618c..5962f158dc 100644 > --- a/accel/tcg/cpu-exec.c > +++ b/accel/tcg/cpu-exec.c > @@ -648,7 +648,8 @@ static inline bool cpu_handle_exception(CPUState *cpu, int *ret) > if (replay_has_exception() > && cpu_neg(cpu)->icount_decr.u16.low + cpu->icount_extra == 0) { > /* Execute just one insn to trigger exception pending in the log */ > - cpu->cflags_next_tb = (curr_cflags(cpu) & ~CF_USE_ICOUNT) | 1; > + cpu->cflags_next_tb = (curr_cflags(cpu) & ~CF_USE_ICOUNT) > + | CF_NOIRQ | 1; Queued to tcg-next. r~
diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c index 6dcff3618c..5962f158dc 100644 --- a/accel/tcg/cpu-exec.c +++ b/accel/tcg/cpu-exec.c @@ -648,7 +648,8 @@ static inline bool cpu_handle_exception(CPUState *cpu, int *ret) if (replay_has_exception() && cpu_neg(cpu)->icount_decr.u16.low + cpu->icount_extra == 0) { /* Execute just one insn to trigger exception pending in the log */ - cpu->cflags_next_tb = (curr_cflags(cpu) & ~CF_USE_ICOUNT) | 1; + cpu->cflags_next_tb = (curr_cflags(cpu) & ~CF_USE_ICOUNT) + | CF_NOIRQ | 1; } #endif return false;
Commit aff0e204cb1f1c036a496c94c15f5dfafcd9b4b4 introduced CF_NOIRQ usage, but one case was forgotten. Record/replay uses one special TB which is not really executed, but used to cause a correct exception in replay mode. This patch adds CF_NOIRQ flag for such block. Signed-off-by: Pavel Dovgalyuk <Pavel.Dovgalyuk@ispras.ru> --- accel/tcg/cpu-exec.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)