qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [Qemu-stable][PATCH v3] tcg: Fix occasional TCG broken


From: Aurelien Jarno
Subject: Re: [Qemu-devel] [Qemu-stable][PATCH v3] tcg: Fix occasional TCG broken problem when ldst optimization enabled
Date: Fri, 22 Mar 2013 23:11:01 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

On Fri, Mar 22, 2013 at 09:50:17PM +0900, Yeongkyoon Lee wrote:
> is_tcg_gen_code() checks the upper limit of TCG generated code range wrong, so
> that TCG could get broken occasionally only when CONFIG_QEMU_LDST_OPTIMIZATION
> enabled. The reason is code_gen_buffer_max_size does not cover the upper range
> up to (TCG_MAX_OP_SIZE * OPC_BUF_SIZE), thus code_gen_buffer_max_size should 
> be
> modified to code_gen_buffer_size.
> 
> CC: address@hidden
> Signed-off-by: Yeongkyoon Lee <address@hidden>
> ---
> 
> Here's the promised patch with Aurelien Jarno for TCG broken problem, which
> is supposed to be applied to 1.3.x and 1.4.x releases as well as master.
> Thanks to Aurelien Jarno and Stefan Weil.
> 
> v2: Fix source comment
> v3: Inline address@hidden to commit message
> 
>  translate-all.c |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/translate-all.c b/translate-all.c
> index 1f3237e..72bea9b 100644
> --- a/translate-all.c
> +++ b/translate-all.c
> @@ -1308,11 +1308,11 @@ static void tb_link_page(TranslationBlock *tb, 
> tb_page_addr_t phys_pc,
>  /* check whether the given addr is in TCG generated code buffer or not */
>  bool is_tcg_gen_code(uintptr_t tc_ptr)
>  {
> -    /* This can be called during code generation, code_gen_buffer_max_size
> +    /* This can be called during code generation, code_gen_buffer_size
>         is used instead of code_gen_ptr for upper boundary checking */
>      return (tc_ptr >= (uintptr_t)tcg_ctx.code_gen_buffer &&
>              tc_ptr < (uintptr_t)(tcg_ctx.code_gen_buffer +
> -                    tcg_ctx.code_gen_buffer_max_size));
> +                    tcg_ctx.code_gen_buffer_size));
>  }
>  #endif
>  

Thanks, applied.

For the stable branch, please fine the corresponding patch below.

>From 931ff5988ecd23e2976d20fc6116d2e42ebf6154 Mon Sep 17 00:00:00 2001
From: Yeongkyoon Lee <address@hidden>
Date: Fri, 22 Mar 2013 21:50:17 +0900
Subject: [PATCH] tcg: Fix occasional TCG broken problem when ldst
 optimization enabled

is_tcg_gen_code() checks the upper limit of TCG generated code range wrong, so
that TCG could get broken occasionally only when CONFIG_QEMU_LDST_OPTIMIZATION
enabled. The reason is code_gen_buffer_max_size does not cover the upper range
up to (TCG_MAX_OP_SIZE * OPC_BUF_SIZE), thus code_gen_buffer_max_size should be
modified to code_gen_buffer_size.

CC: address@hidden
Signed-off-by: Yeongkyoon Lee <address@hidden>
Reviewed-by: Peter Maydell <address@hidden>
Signed-off-by: Aurelien Jarno <address@hidden>
(cherry picked from commit 52ae646d4a3ebdcdcc973492c6a56f2c49b6578f)

Conflicts:
        translate-all.c

Signed-off-by: Aurelien Jarno <address@hidden>
---
 translate-all.c |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/translate-all.c b/translate-all.c
index d367fc4..bf1db09 100644
--- a/translate-all.c
+++ b/translate-all.c
@@ -1310,10 +1310,10 @@ static void tb_link_page(TranslationBlock *tb, 
tb_page_addr_t phys_pc,
 /* check whether the given addr is in TCG generated code buffer or not */
 bool is_tcg_gen_code(uintptr_t tc_ptr)
 {
-    /* This can be called during code generation, code_gen_buffer_max_size
+    /* This can be called during code generation, code_gen_buffer_size
        is used instead of code_gen_ptr for upper boundary checking */
     return (tc_ptr >= (uintptr_t)code_gen_buffer &&
-            tc_ptr < (uintptr_t)(code_gen_buffer + code_gen_buffer_max_size));
+            tc_ptr < (uintptr_t)(code_gen_buffer + code_gen_buffer_size));
 }
 #endif


-- 
Aurelien Jarno                          GPG: 1024D/F1BCDB73
address@hidden                 http://www.aurel32.net



reply via email to

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