On 07/08/2017 09:50 PM, Emilio G. Cota wrote:
This allows us to generate TCG code in parallel. MTTCG already uses
it, although the next commit pushes down a lock to actually
perform parallel generation.
User-mode is kept out of this: contention due to concurrent translation
is more commonly found in full-system mode.
Um, why do you believe that? Are you suggesting that a multi-threaded
user-only guest is much more likely to share TBs and do much less code
generation total?
At the moment I think it's just a confusing distinction. As proven by some of
the comment adjustments you made.
-TCGContext tcg_ctx;
+TCG_THREAD TCGContext tcg_ctx;
This is a really large structure, and it's not needed by any of the I/O
threads. We're probably better off dynamically allocating this ourselves and
do something like
__thread TCGContext *tcg_ctx_ptr;
#define tcg_ctx (*tcg_ctx_ptr)
You could then even have tcg_init_ctx be the object instead of a pointer to the
object.
for the main thread, so you don't have to have an extra pointer to this; just
reference it by symbol.
-static struct tcg_temp_info temps[TCG_MAX_TEMPS];
-static TCGTempSet temps_used;
+static TCG_THREAD struct tcg_temp_info temps[TCG_MAX_TEMPS];
+static TCG_THREAD TCGTempSet temps_used;
I've been meaning to dynamically allocate these for a while now. I think that
would be better than putting this large array in TLS. Which, again, is not
needed for I/O threads.
r~