From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:57896) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YGUAT-0001tz-MS for qemu-devel@nongnu.org; Wed, 28 Jan 2015 10:04:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YGUAP-0001Zv-N5 for qemu-devel@nongnu.org; Wed, 28 Jan 2015 10:04:33 -0500 Received: from greensocs.com ([193.104.36.180]:50923) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YGUAP-0001Zp-EW for qemu-devel@nongnu.org; Wed, 28 Jan 2015 10:04:29 -0500 Message-ID: <54C8FA7B.3050501@greensocs.com> Date: Wed, 28 Jan 2015 16:04:27 +0100 From: Frederic Konrad MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Thread local TCGContext. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel , mttcg@listserver.greensocs.com Cc: Paolo Bonzini , Mark Burton , Peter Maydell Hi, I wondering how we can have one TCGContext per thread cleanly. We should be able to do this: diff --git a/tcg/tcg.h b/tcg/tcg.h index baf053a..8d488dc 100644 --- a/tcg/tcg.h +++ b/tcg/tcg.h @@ -533,7 +533,7 @@ struct TCGContext { struct TCGBackendData *be; }; -extern TCGContext tcg_ctx; +extern __thread TCGContext tcg_ctx; extern TBContext tb_ctx; /* pool based memory allocation */ diff --git a/translate-all.c b/translate-all.c index a986d61..69c6b83 100644 --- a/translate-all.c +++ b/translate-all.c @@ -125,11 +125,30 @@ uintptr_t qemu_host_page_mask; static void *l1_map[V_L1_SIZE]; /* code generation context */ -TCGContext tcg_ctx; +__thread TCGContext tcg_ctx; But the big problem is the initialisation, it's done only onetime in the iothread with the accelerator.. (gdb) bt #0 tcg_context_init (s=0x7ffff7fb7a50) at qemu/tcg/tcg.c:333 #1 0x000055555560d90e in cpu_gen_init () at qemu/translate-all.c:158 #2 tcg_exec_init (tb_size=0) at qemu/translate-all.c:719 #3 0x000055555571a5c5 in tcg_init (ms=) at accel.c:42 #4 0x000055555571a6fb in accel_init_machine (ms=0x55555626b670, acc=0x555556251f20) at accel.c:70 #5 configure_accelerator (ms=0x55555626b670) at accel.c:109 #6 0x00005555555fee66 in main (argc=, argv=, envp=) at vl.c:4030 Any idea how to deal with this cleanly? Thanks, Fred