From: Richard Henderson <rth@twiddle.net>
To: qemu-devel@nongnu.org, peter.maydell@linaro.org
Subject: Re: [Qemu-devel] [PATCH v4 23/26] tcg: Emit prologue to the beginning of code_gen_buffer
Date: Thu, 1 Oct 2015 06:20:22 +1000 [thread overview]
Message-ID: <560C4406.6070308@twiddle.net> (raw)
In-Reply-To: <20150930161738.GB17449@aurel32.net>
On 10/01/2015 02:17 AM, Aurelien Jarno wrote:
> On 2015-09-30 15:09, Richard Henderson wrote:
>> By putting the prologue at the end, we risk overwriting the
>> prologue should our estimate of maximum TB size. Given the
>> two different placements of the call to tcg_prologue_init,
>> move the high water mark computation into tcg_prologue_init.
>>
>> Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
>> Signed-off-by: Richard Henderson <rth@twiddle.net>
>> ---
>> tcg/tcg.c | 35 ++++++++++++++++++++++++++++-------
>> translate-all.c | 28 +++++++++-------------------
>> 2 files changed, 37 insertions(+), 26 deletions(-)
>
> Good idea to move it. I have done some experiments with putting slow
> path "helpers" in the prologue, and I ended-up going over the 1024
> bytes limits.
>
>> diff --git a/tcg/tcg.c b/tcg/tcg.c
>> index d3693b1..5609108 100644
>> --- a/tcg/tcg.c
>> +++ b/tcg/tcg.c
>> @@ -363,17 +363,38 @@ void tcg_context_init(TCGContext *s)
>>
>> void tcg_prologue_init(TCGContext *s)
>> {
>> - /* init global prologue and epilogue */
>> - s->code_buf = s->code_gen_prologue;
>> - s->code_ptr = s->code_buf;
>> + size_t prologue_size, total_size;
>> + void *buf0, *buf1;
>> +
>> + /* Put the prologue at the beginning of code_gen_buffer. */
>> + buf0 = s->code_gen_buffer;
>> + s->code_ptr = buf0;
>> + s->code_buf = buf0;
>> + s->code_gen_prologue = buf0;
>> +
>> + /* Generate the prologue. */
>> tcg_target_qemu_prologue(s);
>> - flush_icache_range((uintptr_t)s->code_buf, (uintptr_t)s->code_ptr);
>> + buf1 = s->code_ptr;
>> + flush_icache_range((uintptr_t)buf0, (uintptr_t)buf1);
>> +
>> + /* Deduct the prologue from the buffer. */
>> + prologue_size = tcg_current_code_size(s);
>> + s->code_gen_ptr = buf1;
>> + s->code_gen_buffer = buf1;
>> + s->code_buf = buf1;
>> + total_size = s->code_gen_buffer_size - prologue_size;
>> + s->code_gen_buffer_size = total_size;
>> +
>> + /* Compute a high-water mark, at which we voluntarily flush the
>> + buffer and start over. */
>> + s->code_gen_buffer_max_size = total_size - TCG_MAX_OP_SIZE * OPC_BUF_SIZE;
>> +
>> + tcg_register_jit(s->code_gen_buffer, total_size);
>
> I am not sure why you moved this 2 lines there, I think they have more
> their place in code_gen_alloc() so that the heuristics stay at the same
> place. total_size is available in s->code_gen_buffer_size, so that
> should be doable.
Because it was done too early for user-only. There, the sequence is
code_gen_alloc
place guest image, setting GUEST_BASE
tcg_prologue_init
We need the guest base for generating the prologue on most targets. Although
clearly a better ordering is to place the guest image *first* before doing
anything else. None of the other large allocations (including tbs) really care
where they're placed.
Something to fix later, or should I do a v5?
r~
next prev parent reply other threads:[~2015-09-30 20:20 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-30 5:09 [Qemu-devel] [PATCH v4 00/26] Do away with TB retranslation Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 01/26] tcg: Rename debug_insn_start to insn_start Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 02/26] target-*: Unconditionally emit tcg_gen_insn_start Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 03/26] target-*: Increment num_insns immediately after tcg_gen_insn_start Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 04/26] target-*: Introduce and use cpu_breakpoint_test Richard Henderson
2015-09-30 15:27 ` Aurelien Jarno
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 05/26] tcg: Allow extra data to be attached to insn_start Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 06/26] target-arm: Add condexec state " Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 07/26] target-i386: Add cc_op " Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 08/26] target-mips: Add delayed branch " Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 09/26] target-s390x: Add cc_op " Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 10/26] target-sh4: Add flags " Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 11/26] target-cris: Mirror gen_opc_pc into insn_start Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 12/26] target-sparc: Tidy gen_branch_a interface Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 13/26] target-sparc: Split out gen_branch_n Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 14/26] target-sparc: Remove gen_opc_jump_pc Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 15/26] target-sparc: Add npc state to insn_start Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 16/26] tcg: Merge cpu_gen_code into tb_gen_code Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 17/26] target-*: Drop cpu_gen_code define Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 18/26] tcg: Add TCG_MAX_INSNS Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 19/26] tcg: Pass data argument to restore_state_to_opc Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 20/26] tcg: Save insn data and use it in cpu_restore_state_from_tb Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 21/26] tcg: Remove gen_intermediate_code_pc Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 22/26] tcg: Remove tcg_gen_code_search_pc Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 23/26] tcg: Emit prologue to the beginning of code_gen_buffer Richard Henderson
2015-09-30 16:17 ` Aurelien Jarno
2015-09-30 20:20 ` Richard Henderson [this message]
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 24/26] tcg: Allocate a guard page after code_gen_buffer Richard Henderson
2015-09-30 16:33 ` Aurelien Jarno
2015-09-30 20:01 ` Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 25/26] tcg: Check for overflow via highwater mark Richard Henderson
2015-09-30 16:50 ` Aurelien Jarno
2015-09-30 17:09 ` Peter Maydell
2015-09-30 20:11 ` Richard Henderson
2015-09-30 5:09 ` [Qemu-devel] [PATCH v4 26/26] tcg: Adjust CODE_GEN_AVG_BLOCK_SIZE Richard Henderson
2015-09-30 16:50 ` Aurelien Jarno
2015-09-30 18:42 ` [Qemu-devel] [PATCH v4 00/26] Do away with TB retranslation Aurelien Jarno
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=560C4406.6070308@twiddle.net \
--to=rth@twiddle.net \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.