[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 9/9] accel/tcg: Improve can_do_io management
From: |
Jørgen Hansen |
Subject: |
Re: [PATCH 9/9] accel/tcg: Improve can_do_io management |
Date: |
Mon, 8 Apr 2024 13:13:59 +0000 |
On 4/7/24 00:32, Richard Henderson wrote:
> We already attempted to set and clear can_do_io before the first
> and last insns, but only used the initial value of max_insns and
> the call to translator_io_start to find those insns.
>
> Now that we track insn_start in DisasContextBase, and now that
> we have emit_before_op, we can wait until we have finished
> translation to identify the true first and last insns and emit
> the sets of can_do_io at that time.
>
> This fixes case of a translation block which crossed a page boundary,
> and for which the second page turned out to be mmio. In this case we
> truncate the block, and the previous logic for can_do_io could leave
> a block with a single insn with can_do_io set to false, which would
> fail an assertion in cpu_io_recompile.
>
> Reported-by: Jørgen Hansen <Jorgen.Hansen@wdc.com>
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
> include/exec/translator.h | 1 -
> accel/tcg/translator.c | 45 ++++++++++++++++++++-------------------
> 2 files changed, 23 insertions(+), 23 deletions(-)
Thanks for the quick fix! I verified the patch series fixes the issue on
my setup, and also verified that no issues were seen with full MMIO
backing for the otherwise same test case.
Tested-by: Jørgen Hansen <Jorgen.Hansen@wdc.com>
- Re: [PATCH 5/9] target/i386: Preserve DisasContextBase.insn_start across rewind, (continued)