[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 04/10] tcg: Init TB's direct jumps before mak
From: |
Alex Bennée |
Subject: |
Re: [Qemu-devel] [PATCH v3 04/10] tcg: Init TB's direct jumps before making it visible |
Date: |
Tue, 19 Apr 2016 11:55:46 +0100 |
User-agent: |
mu4e 0.9.17; emacs 25.0.92.6 |
Sergey Fedorov <address@hidden> writes:
> From: Sergey Fedorov <address@hidden>
>
> Initialize TB's direct jump list data fields and reset the jumps before
> tb_link_page() puts it into the physical hash table and the physical
> page list. So TB is completely initialized before it becomes visible.
>
> Signed-off-by: Sergey Fedorov <address@hidden>
> Signed-off-by: Sergey Fedorov <address@hidden>
> ---
>
> Changes in v2:
> * Tweaked a comment
>
> translate-all.c | 27 ++++++++++++++-------------
> 1 file changed, 14 insertions(+), 13 deletions(-)
>
> diff --git a/translate-all.c b/translate-all.c
> index 7ac7916f2792..dfa7f0d64e76 100644
> --- a/translate-all.c
> +++ b/translate-all.c
> @@ -1133,19 +1133,6 @@ static void tb_link_page(TranslationBlock *tb,
> tb_page_addr_t phys_pc,
> tb->page_addr[1] = -1;
> }
>
> - assert(((uintptr_t)tb & 3) == 0);
> - tb->jmp_list_first = (uintptr_t)tb | 2;
> - tb->jmp_list_next[0] = (uintptr_t)NULL;
> - tb->jmp_list_next[1] = (uintptr_t)NULL;
> -
> - /* init original jump addresses */
> - if (tb->jmp_reset_offset[0] != TB_JMP_RESET_OFFSET_INVALID) {
> - tb_reset_jump(tb, 0);
> - }
> - if (tb->jmp_reset_offset[1] != TB_JMP_RESET_OFFSET_INVALID) {
> - tb_reset_jump(tb, 1);
> - }
> -
> #ifdef DEBUG_TB_CHECK
> tb_page_check();
> #endif
> @@ -1254,6 +1241,20 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
> ROUND_UP((uintptr_t)gen_code_buf + gen_code_size + search_size,
> CODE_GEN_ALIGN);
>
> + /* init jump list */
> + assert(((uintptr_t)tb & 3) == 0);
> + tb->jmp_list_first = (uintptr_t)tb | 2;
> + tb->jmp_list_next[0] = (uintptr_t)NULL;
> + tb->jmp_list_next[1] = (uintptr_t)NULL;
> +
> + /* init original jump addresses wich has been set during tcg_gen_code()
> */
> + if (tb->jmp_reset_offset[0] != TB_JMP_RESET_OFFSET_INVALID) {
> + tb_reset_jump(tb, 0);
> + }
> + if (tb->jmp_reset_offset[1] != TB_JMP_RESET_OFFSET_INVALID) {
> + tb_reset_jump(tb, 1);
> + }
> +
If we are really concerned about ensuring everything is set before we
insert the TB into the list should we not have an explicit write barrier
before we call to link the page?
> /* check next page if needed */
> virt_page2 = (pc + tb->size - 1) & TARGET_PAGE_MASK;
> phys_page2 = -1;
--
Alex Bennée
- [Qemu-devel] [PATCH v3 02/10] tcg: Use uintptr_t type for jmp_list_{next|first} fields of TB, (continued)
- [Qemu-devel] [PATCH v3 02/10] tcg: Use uintptr_t type for jmp_list_{next|first} fields of TB, Sergey Fedorov, 2016/04/10
- [Qemu-devel] [PATCH v3 03/10] tcg: Rearrange tb_link_page() to avoid forward declaration, Sergey Fedorov, 2016/04/10
- [Qemu-devel] [PATCH v3 05/10] tcg: Clarify thread safety check in tb_add_jump(), Sergey Fedorov, 2016/04/10
- [Qemu-devel] [PATCH v3 07/10] tcg: Extract removing of jumps to TB from tb_phys_invalidate(), Sergey Fedorov, 2016/04/10
- [Qemu-devel] [PATCH v3 04/10] tcg: Init TB's direct jumps before making it visible, Sergey Fedorov, 2016/04/10
- Re: [Qemu-devel] [PATCH v3 04/10] tcg: Init TB's direct jumps before making it visible,
Alex Bennée <=
- [Qemu-devel] [PATCH v3 06/10] tcg: Rename tb_jmp_remove() to tb_remove_from_jmp_list(), Sergey Fedorov, 2016/04/10
- [Qemu-devel] [PATCH v3 08/10] tcg: Clean up tb_jmp_unlink(), Sergey Fedorov, 2016/04/10
- [Qemu-devel] [PATCH v3 09/10] tcg: Clean up direct block chaining safety checks, Sergey Fedorov, 2016/04/10
[Qemu-devel] [PATCH v3 10/10] tcg: Moderate direct block chaining safety checks in user mode, Sergey Fedorov, 2016/04/10