[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL for-6.1 01/12] accel/tcg: Don't use CF_COUNT_MASK as the max value
From: |
Richard Henderson |
Subject: |
[PULL for-6.1 01/12] accel/tcg: Don't use CF_COUNT_MASK as the max value of icount_decr.u16.low |
Date: |
Mon, 26 Jul 2021 11:47:18 -1000 |
From: Peter Maydell <peter.maydell@linaro.org>
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 | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c
index fc895cf51e..6e8dc29119 100644
--- a/accel/tcg/cpu-exec.c
+++ b/accel/tcg/cpu-exec.c
@@ -834,7 +834,7 @@ static inline void cpu_loop_exec_tb(CPUState *cpu,
TranslationBlock *tb,
/* Ensure global icount has gone forward */
icount_update(cpu);
/* Refill decrementer and continue execution. */
- insns_left = MIN(CF_COUNT_MASK, cpu->icount_budget);
+ insns_left = MIN(0xffff, cpu->icount_budget);
cpu_neg(cpu)->icount_decr.u16.low = insns_left;
cpu->icount_extra = cpu->icount_budget - insns_left;
--
2.25.1
- [PULL for-6.1 00/12] tcg and misc patch queue, Richard Henderson, 2021/07/26
- [PULL for-6.1 02/12] accel/tcg: Remove unnecessary check on icount_extra in cpu_loop_exec_tb(), Richard Henderson, 2021/07/26
- [PULL for-6.1 01/12] accel/tcg: Don't use CF_COUNT_MASK as the max value of icount_decr.u16.low,
Richard Henderson <=
- [PULL for-6.1 03/12] bitops.h: revert db1ffc32dd ("qemu/bitops.h: add bitrev8 implementation"), Richard Henderson, 2021/07/26
- [PULL for-6.1 04/12] nbd/server: Mark variable unused in nbd_negotiate_meta_queries, Richard Henderson, 2021/07/26
- [PULL for-6.1 05/12] accel/tcg: Remove unused variable in cpu_exec, Richard Henderson, 2021/07/26
- [PULL for-6.1 06/12] util/selfmap: Discard mapping on error, Richard Henderson, 2021/07/26
- [PULL for-6.1 07/12] net/checksum: Remove unused variable in net_checksum_add_iov, Richard Henderson, 2021/07/26
- [PULL for-6.1 08/12] hw/audio/adlib: Remove unused variable in adlib_callback, Richard Henderson, 2021/07/26
- [PULL for-6.1 09/12] hw/ppc/spapr_events: Remove unused variable from check_exception, Richard Henderson, 2021/07/26
- [PULL for-6.1 10/12] hw/pci-hist/pnv_phb4: Fix typo in pnv_phb4_ioda_write, Richard Henderson, 2021/07/26
- [PULL for-6.1 11/12] linux-user/syscall: Remove unused variable from execve, Richard Henderson, 2021/07/26
- [PULL for-6.1 12/12] tests/unit: Remove unused variable from test_io, Richard Henderson, 2021/07/26