[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 19/22] tcg: introduce tcg_context_clone
From: |
Emilio G. Cota |
Subject: |
[Qemu-devel] [PATCH 19/22] tcg: introduce tcg_context_clone |
Date: |
Sun, 9 Jul 2017 03:50:11 -0400 |
Before we make TCGContext thread-local.
Signed-off-by: Emilio G. Cota <address@hidden>
---
tcg/tcg.h | 1 +
tcg/tcg.c | 14 ++++++++++++++
2 files changed, 15 insertions(+)
diff --git a/tcg/tcg.h b/tcg/tcg.h
index 2a64ee2..be5f3fd 100644
--- a/tcg/tcg.h
+++ b/tcg/tcg.h
@@ -778,6 +778,7 @@ static inline void *tcg_malloc(int size)
}
void tcg_context_init(TCGContext *s);
+void tcg_context_clone(TCGContext *s);
void tcg_prologue_init(TCGContext *s);
void tcg_register_thread(void);
void tcg_func_start(TCGContext *s);
diff --git a/tcg/tcg.c b/tcg/tcg.c
index 2f003a0..8febf53 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -117,6 +117,7 @@ static bool tcg_out_tb_finalize(TCGContext *s);
#define TCG_HIGHWATER 1024
+static const TCGContext *tcg_init_ctx;
static QemuMutex tcg_lock;
/*
@@ -353,6 +354,7 @@ void tcg_context_init(TCGContext *s)
TCGArgConstraint *args_ct;
int *sorted_args;
+ tcg_init_ctx = s;
memset(s, 0, sizeof(*s));
s->nb_globals = 0;
@@ -409,6 +411,18 @@ void tcg_context_init(TCGContext *s)
}
/*
+ * Clone the initial TCGContext. Used by TCG threads to copy the TCGContext
+ * set up by their parent thread via tcg_context_init().
+ */
+void tcg_context_clone(TCGContext *s)
+{
+ if (unlikely(tcg_init_ctx == NULL || tcg_init_ctx == s)) {
+ tcg_abort();
+ }
+ memcpy(s, tcg_init_ctx, sizeof(*s));
+}
+
+/*
* Allocate TBs right before their corresponding translated code, making
* sure that TBs and code are on different cache lines.
*/
--
2.7.4
[Qemu-devel] [PATCH 22/22] translate-all: do not hold tb_lock during code generation in softmmu, Emilio G. Cota, 2017/07/09