[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>
- [PATCH v7 04/20] linux-user: Honor PT_GNU_STACK, (continued)
- [PATCH v7 04/20] linux-user: Honor PT_GNU_STACK, Richard Henderson, 2022/08/23
- [PATCH v7 06/20] tests/tcg/i386: Move smc_code2 to an executable section, Richard Henderson, 2022/08/23
- [PATCH v7 07/20] accel/tcg: Introduce is_same_page(), Richard Henderson, 2022/08/23
- [PATCH v7 05/20] linux-user: Clear translations and tb_jmp_cache on mprotect(), Richard Henderson, 2022/08/23
- [PATCH v7 09/20] accel/tcg: Unlock mmap_lock after longjmp, Richard Henderson, 2022/08/23
- [PATCH v7 10/20] accel/tcg: Make tb_htable_lookup static, Richard Henderson, 2022/08/23
- [PATCH v7 08/20] accel/tcg: Properly implement get_page_addr_code for user-only, Richard Henderson, 2022/08/23
- [PATCH v7 11/20] accel/tcg: Move qemu_ram_addr_from_host_nofail to physmem.c, Richard Henderson, 2022/08/23
- [PATCH v7 13/20] accel/tcg: Document the faulting lookup in tb_lookup_cmp, Richard Henderson, 2022/08/23
- Re: [PATCH v7 13/20] accel/tcg: Document the faulting lookup in tb_lookup_cmp,
Ilya Leoshkevich <=
- [PATCH v7 12/20] accel/tcg: Use probe_access_internal for softmmu get_page_addr_code_hostp, Richard Henderson, 2022/08/23
- [PATCH v7 14/20] accel/tcg: Remove translator_ldsw, Richard Henderson, 2022/08/23
- [PATCH v7 15/20] accel/tcg: Add pc and host_pc params to gen_intermediate_code, Richard Henderson, 2022/08/23
- [PATCH v7 16/20] accel/tcg: Add fast path for translator_ld*, Richard Henderson, 2022/08/23
- [PATCH v7 18/20] target/i386: Make translator stop before the end of a page, Richard Henderson, 2022/08/23
- [PATCH v7 19/20] target/riscv: Add MAX_INSN_LEN and insn_len, Richard Henderson, 2022/08/23
- [PATCH v7 20/20] target/riscv: Make translator stop before the end of a page, Richard Henderson, 2022/08/23
- [PATCH v7 17/20] target/s390x: Make translator stop before the end of a page, Richard Henderson, 2022/08/23