qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v7 13/20] accel/tcg: Document the faulting lookup in tb_looku


From: Ilya Leoshkevich
Subject: Re: [PATCH v7 13/20] accel/tcg: Document the faulting lookup in tb_lookup_cmp
Date: Wed, 31 Aug 2022 01:13:06 +0200
User-agent: Evolution 3.42.4 (3.42.4-2.fc35)

On Tue, 2022-08-23 at 15:05 -0700, Richard Henderson wrote:
> It was non-obvious to me why we can raise an exception in
> the middle of a comparison function, but it works.
> While nearby, use TARGET_PAGE_ALIGN instead of open-coding.
> 
> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>  accel/tcg/cpu-exec.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c
> index 7887af6f45..5f43b9769a 100644
> --- a/accel/tcg/cpu-exec.c
> +++ b/accel/tcg/cpu-exec.c
> @@ -198,7 +198,16 @@ static bool tb_lookup_cmp(const void *p, const
> void *d)
>              tb_page_addr_t phys_page2;
>              target_ulong virt_page2;
>  
> -            virt_page2 = (desc->pc & TARGET_PAGE_MASK) +
> TARGET_PAGE_SIZE;
> +            /*
> +             * We know that the first page matched, and an otherwise
> valid TB
> +             * encountered an incomplete instruction at the end of
> that page,
> +             * therefore we know that generating a new TB from the
> current PC
> +             * must also require reading from the next page -- even
> if the
> +             * second pages do not match, and therefore the
> resulting insn
> +             * is different for the new TB.  Therefore any exception
> raised
> +             * here by the faulting lookup is not premature.
> +             */
> +            virt_page2 = TARGET_PAGE_ALIGN(desc->pc);
>              phys_page2 = get_page_addr_code(desc->env, virt_page2);
>              if (tb->page_addr[1] == phys_page2) {
>                  return true;

Acked-by: Ilya Leoshkevich <iii@linux.ibm.com>



reply via email to

[Prev in Thread] Current Thread [Next in Thread]