accel/tcg: Don't use CF_COUNT_MASK as the max value of icount_decr.u16.low
commitdf3a2de51a07089a4a729fe1f792f658df9dade4
authorPeter Maydell <peter.maydell@linaro.org>
Sun, 25 Jul 2021 17:44:04 +0000 (25 18:44 +0100)
committerRichard Henderson <richard.henderson@linaro.org>
Mon, 26 Jul 2021 16:55:53 +0000 (26 06:55 -1000)
treebb5dccdb36fd5f0ed142da898ca3e7da5a7a45e4
parent34fd92ab4142bde5b54adacd16e6682f4ea83da1
accel/tcg: Don't use CF_COUNT_MASK as the max value of icount_decr.u16.low

In cpu_loop_exec_tb() we were bounding the number of insns we might
try to execute in a TB using CF_COUNT_MASK.  This is incorrect,
because we can validly put up to 0xffff into icount_decr.u16.low.  In
particular, since commit 78ff82bb1b67c0d7 reduced CF_COUNT_MASK to
511 this meant that we would incorrectly only try to execute 511
instructions in a 512-instruction TB, which could result in QEMU
hanging when in icount mode.

Use the actual maximum value, which is 0xffff. (This brings this code
in to line with the similar logic in icount_prepare_for_run() in
tcg-accel-ops-icount.c.)

Fixes: 78ff82bb1b67c0d7
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/499
Message-Id: <20210725174405.24568-2-peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
accel/tcg/cpu-exec.c