Message ID | 1308740305-17634-1-git-send-email-peter.maydell@linaro.org |
---|---|
State | Accepted |
Commit | a884da8a06806d55fa83c8011bb17d6838583f9b |
Headers | show |
Ping? On 22 June 2011 11:58, Peter Maydell <peter.maydell@linaro.org> wrote: > When calculating the point at which we should not try to put another > TB into the code gen buffer, we have to allow not just for OPC_MAX_SIZE > but OPC_BUF_SIZE. This is because the target translate.c will only > stop when an instruction has put it past the OPC_MAX_SIZE limit, so > we have to include the MAX_OP_PER_INSTR margin which that final insn > might have used. > > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > exec.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/exec.c b/exec.c > index 09928a3..c910840 100644 > --- a/exec.c > +++ b/exec.c > @@ -555,8 +555,8 @@ static void code_gen_alloc(unsigned long tb_size) > #endif > #endif /* !USE_STATIC_CODE_GEN_BUFFER */ > map_exec(code_gen_prologue, sizeof(code_gen_prologue)); > - code_gen_buffer_max_size = code_gen_buffer_size - > - (TCG_MAX_OP_SIZE * OPC_MAX_SIZE); > + code_gen_buffer_max_size = code_gen_buffer_size - > + (TCG_MAX_OP_SIZE * OPC_BUF_SIZE); > code_gen_max_blocks = code_gen_buffer_size / CODE_GEN_AVG_BLOCK_SIZE; > tbs = qemu_malloc(code_gen_max_blocks * sizeof(TranslationBlock)); > } > -- > 1.7.1
Thanks, applied. On Wed, Jul 6, 2011 at 2:07 PM, Peter Maydell <peter.maydell@linaro.org> wrote: > Ping? > > On 22 June 2011 11:58, Peter Maydell <peter.maydell@linaro.org> wrote: >> When calculating the point at which we should not try to put another >> TB into the code gen buffer, we have to allow not just for OPC_MAX_SIZE >> but OPC_BUF_SIZE. This is because the target translate.c will only >> stop when an instruction has put it past the OPC_MAX_SIZE limit, so >> we have to include the MAX_OP_PER_INSTR margin which that final insn >> might have used. >> >> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> >> --- >> exec.c | 4 ++-- >> 1 files changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/exec.c b/exec.c >> index 09928a3..c910840 100644 >> --- a/exec.c >> +++ b/exec.c >> @@ -555,8 +555,8 @@ static void code_gen_alloc(unsigned long tb_size) >> #endif >> #endif /* !USE_STATIC_CODE_GEN_BUFFER */ >> map_exec(code_gen_prologue, sizeof(code_gen_prologue)); >> - code_gen_buffer_max_size = code_gen_buffer_size - >> - (TCG_MAX_OP_SIZE * OPC_MAX_SIZE); >> + code_gen_buffer_max_size = code_gen_buffer_size - >> + (TCG_MAX_OP_SIZE * OPC_BUF_SIZE); >> code_gen_max_blocks = code_gen_buffer_size / CODE_GEN_AVG_BLOCK_SIZE; >> tbs = qemu_malloc(code_gen_max_blocks * sizeof(TranslationBlock)); >> } >> -- >> 1.7.1 > >
diff --git a/exec.c b/exec.c index 09928a3..c910840 100644 --- a/exec.c +++ b/exec.c @@ -555,8 +555,8 @@ static void code_gen_alloc(unsigned long tb_size) #endif #endif /* !USE_STATIC_CODE_GEN_BUFFER */ map_exec(code_gen_prologue, sizeof(code_gen_prologue)); - code_gen_buffer_max_size = code_gen_buffer_size - - (TCG_MAX_OP_SIZE * OPC_MAX_SIZE); + code_gen_buffer_max_size = code_gen_buffer_size - + (TCG_MAX_OP_SIZE * OPC_BUF_SIZE); code_gen_max_blocks = code_gen_buffer_size / CODE_GEN_AVG_BLOCK_SIZE; tbs = qemu_malloc(code_gen_max_blocks * sizeof(TranslationBlock)); }
When calculating the point at which we should not try to put another TB into the code gen buffer, we have to allow not just for OPC_MAX_SIZE but OPC_BUF_SIZE. This is because the target translate.c will only stop when an instruction has put it past the OPC_MAX_SIZE limit, so we have to include the MAX_OP_PER_INSTR margin which that final insn might have used. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- exec.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)