[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 08/35] translate-common: Listify tcg_enabled()
From: |
Peter Crosthwaite |
Subject: |
[Qemu-devel] [PATCH v3 08/35] translate-common: Listify tcg_enabled() |
Date: |
Sat, 18 Jul 2015 02:40:18 -0700 |
Add an interface for TCG engines to register their tcg_enabled()
function for addition to a global list. Each TCG engine will
register and then two functions, tcg_any_enabled() & tcg_all_enabled()
can be used to query the overall tcg enablement state.
Signed-off-by: Peter Crosthwaite <address@hidden>
---
include/qemu-common.h | 5 +++++
translate-all.c | 5 +++++
translate-common.c | 43 +++++++++++++++++++++++++++++++++++++++++++
3 files changed, 53 insertions(+)
diff --git a/include/qemu-common.h b/include/qemu-common.h
index 4ac8e6f..7124e5a 100644
--- a/include/qemu-common.h
+++ b/include/qemu-common.h
@@ -269,6 +269,11 @@ typedef struct PCIHostDeviceAddress {
void tcg_exec_init_add(void (*fn)(unsigned long));
void tcg_exec_init(unsigned long tb_size);
+
+void tcg_enabled_add(bool (*fn)(void));
+bool tcg_any_enabled(void);
+bool tcg_all_enabled(void);
+
bool tcg_enabled(void);
void cpu_exec_init_all(void);
diff --git a/translate-all.c b/translate-all.c
index 56c61e4..ef19c21 100644
--- a/translate-all.c
+++ b/translate-all.c
@@ -702,6 +702,11 @@ bool tcg_enabled(void)
return tcg_ctx.code_gen_buffer != NULL;
}
+static __attribute__((constructor)) void register_tcg_enabled(void)
+{
+ tcg_enabled_add(tcg_enabled);
+}
+
/* Allocate a new translation block. Flush the translation buffer if
too many translation blocks or too much generated code. */
static TranslationBlock *tb_alloc(target_ulong pc)
diff --git a/translate-common.c b/translate-common.c
index a0e8d8d..2f05116 100644
--- a/translate-common.c
+++ b/translate-common.c
@@ -86,3 +86,46 @@ void tcg_exec_init(unsigned long tb_size)
t->do_tcg_exec_init(tb_size);
}
}
+
+typedef struct TCGEnabledFn {
+ bool (*do_tcg_enabled)(void);
+ QLIST_ENTRY(TCGEnabledFn) list;
+} TCGEnabledFn;
+
+static QLIST_HEAD(, TCGEnabledFn) tcg_enabled_fn_list;
+
+void tcg_enabled_add(bool (*fn)(void))
+{
+ static bool inited;
+ TCGEnabledFn *lelem = g_malloc0(sizeof *lelem);
+
+ if (!inited) {
+ inited = true;
+ QLIST_INIT(&tcg_enabled_fn_list);
+ }
+
+ lelem->do_tcg_enabled = fn;
+ QLIST_INSERT_HEAD(&tcg_enabled_fn_list, lelem, list);
+}
+
+static inline bool tcg_any_all_enabled(bool all)
+{
+ TCGEnabledFn *t;
+
+ QLIST_FOREACH(t, &tcg_enabled_fn_list, list) {
+ if (t->do_tcg_enabled() != all) {
+ return !all;
+ }
+ }
+ return all;
+}
+
+bool tcg_any_enabled(void)
+{
+ return tcg_any_all_enabled(false);
+}
+
+bool tcg_all_enabled(void)
+{
+ return tcg_any_all_enabled(true);
+}
--
1.9.1
- [Qemu-devel] [PATCH v3 00/35] Multi Architecture System Emulation, Peter Crosthwaite, 2015/07/18
- [Qemu-devel] [PATCH v3 01/35] cpu-exec: Migrate some generic fns to cpu-exec-common, Peter Crosthwaite, 2015/07/18
- [Qemu-devel] [PATCH v3 02/35] translate: Listify tcg_exec_init(), Peter Crosthwaite, 2015/07/18
- [Qemu-devel] [PATCH v3 03/35] translate-all: Move tcg_handle_interrupt() to -common, Peter Crosthwaite, 2015/07/18
- [Qemu-devel] [PATCH v3 04/35] tcg: split tcg_op_defs to -common, Peter Crosthwaite, 2015/07/18
- [Qemu-devel] [PATCH v3 05/35] tcg: Move tcg_tb_ptr to -common, Peter Crosthwaite, 2015/07/18
- [Qemu-devel] [PATCH v3 06/35] translate: move real_host_page setting to -common, Peter Crosthwaite, 2015/07/18
- [Qemu-devel] [PATCH v3 07/35] cpus: Listify cpu_list() function, Peter Crosthwaite, 2015/07/18
- [Qemu-devel] [PATCH v3 08/35] translate-common: Listify tcg_enabled(),
Peter Crosthwaite <=
- [Qemu-devel] [PATCH v3 09/35] core: Convert tcg_enabled() users to tcg_(any|all)_enabled(), Peter Crosthwaite, 2015/07/18
- [Qemu-devel] [PATCH v3 10/35] exec-all: Move cpu_can_do_io() to qom/cpu.h, Peter Crosthwaite, 2015/07/18
- [Qemu-devel] [PATCH v3 11/35] cputlb: move CPU_LOOP() for tlb_reset() to exec.c, Peter Crosthwaite, 2015/07/18
- [Qemu-devel] [PATCH v3 12/35] cputlb: Change tlb_set_dirty() arg to cpu, Peter Crosthwaite, 2015/07/18
- [Qemu-devel] [PATCH v3 13/35] include/exec: Move cputlb exec.c defs out, Peter Crosthwaite, 2015/07/18
- [Qemu-devel] [PATCH v3 14/35] cpu-common: Define tb_page_addr_t for everyone, Peter Crosthwaite, 2015/07/18
- [Qemu-devel] [PATCH v3 15/35] include/exec: Split target_long def to new header, Peter Crosthwaite, 2015/07/18