On 07/07/2015 18:17, Alex Bennée wrote:
fred.kon...@greensocs.com writes:

From: KONRAD Frederic <fred.kon...@greensocs.com>

This changes just the tb_flush called from tb_alloc.

TODO:
  * changes the other tb_flush.

Signed-off-by: KONRAD Frederic <fred.kon...@greensocs.com>
---
  translate-all.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/translate-all.c b/translate-all.c
index 8bd8fe8..9adaffa 100644
--- a/translate-all.c
+++ b/translate-all.c
@@ -1147,7 +1147,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu,
      tb = tb_alloc(pc);
      if (!tb) {
          /* flush must be done */
-        tb_flush(env);
+        tb_flush_safe(env);
Hold on this is async right? What stops us rolling on and then getting
flushed when the other vCPUs come to a halt?

It deserves a comment at least.


not this need some synchronization when the CPUs are halted.
There is crap here spotted by Paolo though.

In the case of tb_flush.. We do an async_safe_work because all VCPUs thread
must be outside cpu_exec.

Are you suggesting to just exiting everybody and wait here that all VCPUs exit? This is possible as well here but is not possible for the other case.. That's why I
prefered a "generic" mechanism.

Fred
          /* cannot fail at this point */
          tb = tb_alloc(pc);
          /* Don't forget to invalidate previous TB info.  */


Reply via email to