[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [RFC v2 08/11] tcg: add options for enabling MTTCG
From: |
Alex Bennée |
Subject: |
[Qemu-devel] [RFC v2 08/11] tcg: add options for enabling MTTCG |
Date: |
Tue, 5 Apr 2016 16:32:21 +0100 |
From: KONRAD Frederic <address@hidden>
We know there will be cases where MTTCG won't work until additional work
is done in the front/back ends to support. It will however be useful to
be able to turn it on.
As a result MTTCG will default to off unless the combination is
supported. However the user can turn it on for the sake of testing.
Signed-off-by: KONRAD Frederic <address@hidden>
[AJB: move to -tcg mttcg=on/off, defaults]
Signed-off-by: Alex Bennée <address@hidden>
---
v1:
- merge with add mttcg option.
- update commit message
v2:
- machine_init->opts_init
---
cpus.c | 43 +++++++++++++++++++++++++++++++++++++++++++
include/qom/cpu.h | 14 ++++++++++++++
include/sysemu/cpus.h | 2 ++
qemu-options.hx | 14 ++++++++++++++
vl.c | 12 +++++++++++-
5 files changed, 84 insertions(+), 1 deletion(-)
diff --git a/cpus.c b/cpus.c
index 46732a5..8d27fb0 100644
--- a/cpus.c
+++ b/cpus.c
@@ -25,6 +25,7 @@
/* Needed early for CONFIG_BSD etc. */
#include "qemu/osdep.h"
+#include "qemu/config-file.h"
#include "monitor/monitor.h"
#include "qapi/qmp/qerror.h"
#include "qemu/error-report.h"
@@ -146,6 +147,48 @@ typedef struct TimersState {
} TimersState;
static TimersState timers_state;
+static bool mttcg_enabled;
+
+static QemuOptsList qemu_tcg_opts = {
+ .name = "tcg",
+ .head = QTAILQ_HEAD_INITIALIZER(qemu_tcg_opts.head),
+ .desc = {
+ {
+ .name = "mttcg",
+ .type = QEMU_OPT_BOOL,
+ .help = "Enable/disable multi-threaded TCG",
+ },
+ { /* end of list */ }
+ },
+};
+
+static void tcg_register_config(void)
+{
+ qemu_add_opts(&qemu_tcg_opts);
+}
+
+opts_init(tcg_register_config);
+
+static bool default_mttcg_enabled(void)
+{
+ /*
+ * TODO: Check if we have a chance to have MTTCG working on this
guest/host.
+ * Basically is the atomic instruction implemented? Is there any
+ * memory ordering issue?
+ */
+ return false;
+}
+
+void qemu_tcg_configure(QemuOpts *opts)
+{
+ mttcg_enabled = qemu_opt_get_bool(opts, "mttcg", default_mttcg_enabled());
+}
+
+bool qemu_tcg_mttcg_enabled(void)
+{
+ return mttcg_enabled;
+}
+
int64_t cpu_get_icount_raw(void)
{
diff --git a/include/qom/cpu.h b/include/qom/cpu.h
index 13eeaae..5e3826c 100644
--- a/include/qom/cpu.h
+++ b/include/qom/cpu.h
@@ -369,6 +369,20 @@ extern struct CPUTailQ cpus;
extern __thread CPUState *current_cpu;
/**
+ * qemu_tcg_enable_mttcg:
+ * Enable the MultiThread TCG support.
+ */
+void qemu_tcg_enable_mttcg(void);
+
+/**
+ * qemu_tcg_mttcg_enabled:
+ * Check whether we are running MultiThread TCG or not.
+ *
+ * Returns: %true if we are in MTTCG mode %false otherwise.
+ */
+bool qemu_tcg_mttcg_enabled(void);
+
+/**
* cpu_paging_enabled:
* @cpu: The CPU whose state is to be inspected.
*
diff --git a/include/sysemu/cpus.h b/include/sysemu/cpus.h
index 3d1e5ba..606426f 100644
--- a/include/sysemu/cpus.h
+++ b/include/sysemu/cpus.h
@@ -26,4 +26,6 @@ extern int smp_threads;
void list_cpus(FILE *f, fprintf_function cpu_fprintf, const char *optarg);
+void qemu_tcg_configure(QemuOpts *opts);
+
#endif
diff --git a/qemu-options.hx b/qemu-options.hx
index a770086..4eca704 100644
--- a/qemu-options.hx
+++ b/qemu-options.hx
@@ -3224,6 +3224,20 @@ Attach to existing xen domain.
xend will use this when starting QEMU (XEN only).
ETEXI
+DEF("tcg", HAS_ARG, QEMU_OPTION_tcg, \
+ "-tcg [mttcg=on|off] control TCG options\n", QEMU_ARCH_ALL)
+STEXI
address@hidden -tcg
address@hidden -tcg
address@hidden @option
address@hidden mttcg=[on|off]
+Control multi-threaded TCG. By default QEMU will enable multi-threaded
+emulation for front/back-end combinations that are known to work. The
+user may enable it against the defaults however odd guest behaviour
+may occur.
address@hidden table
+ETEXI
+
DEF("no-reboot", 0, QEMU_OPTION_no_reboot, \
"-no-reboot exit instead of rebooting\n", QEMU_ARCH_ALL)
STEXI
diff --git a/vl.c b/vl.c
index bd81ea9..51bbdbc 100644
--- a/vl.c
+++ b/vl.c
@@ -2961,7 +2961,8 @@ int main(int argc, char **argv, char **envp)
const char *boot_once = NULL;
DisplayState *ds;
int cyls, heads, secs, translation;
- QemuOpts *hda_opts = NULL, *opts, *machine_opts, *icount_opts = NULL;
+ QemuOpts *opts, *machine_opts;
+ QemuOpts *hda_opts = NULL, *icount_opts = NULL, *tcg_opts = NULL;
QemuOptsList *olist;
int optind;
const char *optarg;
@@ -3750,6 +3751,13 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_no_reboot:
no_reboot = 1;
break;
+ case QEMU_OPTION_tcg:
+ tcg_opts = qemu_opts_parse_noisily(qemu_find_opts("tcg"),
+ optarg, false);
+ if (!tcg_opts) {
+ exit(1);
+ }
+ break;
case QEMU_OPTION_no_shutdown:
no_shutdown = 1;
break;
@@ -4028,6 +4036,8 @@ int main(int argc, char **argv, char **envp)
*/
loc_set_none();
+ qemu_tcg_configure(tcg_opts);
+
replay_configure(icount_opts);
machine_class = select_machine();
--
2.7.4
- [Qemu-devel] [RFC v2 00/11] Base enabling patches for MTTCG, Alex Bennée, 2016/04/05
- [Qemu-devel] [RFC v2 05/11] tcg: protect TBContext with tb_lock., Alex Bennée, 2016/04/05
- [Qemu-devel] [RFC v2 09/11] tcg: add kick timer for single-threaded vCPU emulation, Alex Bennée, 2016/04/05
- [Qemu-devel] [RFC v2 06/11] target-arm/psci.c: wake up sleeping CPUs, Alex Bennée, 2016/04/05
- [Qemu-devel] [RFC v2 02/11] cpus: make all_vcpus_paused() return bool, Alex Bennée, 2016/04/05
- [Qemu-devel] [RFC v2 08/11] tcg: add options for enabling MTTCG,
Alex Bennée <=
- Re: [Qemu-devel] [RFC v2 08/11] tcg: add options for enabling MTTCG, Sergey Fedorov, 2016/04/11
- Re: [Qemu-devel] [RFC v2 08/11] tcg: add options for enabling MTTCG, Alex Bennée, 2016/04/12
- Re: [Qemu-devel] [RFC v2 08/11] tcg: add options for enabling MTTCG, Peter Maydell, 2016/04/12
- Re: [Qemu-devel] [RFC v2 08/11] tcg: add options for enabling MTTCG, Sergey Fedorov, 2016/04/12
- Re: [Qemu-devel] [RFC v2 08/11] tcg: add options for enabling MTTCG, KONRAD Frederic, 2016/04/12
- Re: [Qemu-devel] [RFC v2 08/11] tcg: add options for enabling MTTCG, Sergey Fedorov, 2016/04/12
- Re: [Qemu-devel] [RFC v2 08/11] tcg: add options for enabling MTTCG, Pavel Dovgalyuk, 2016/04/12
- Re: [Qemu-devel] [RFC v2 08/11] tcg: add options for enabling MTTCG, Sergey Fedorov, 2016/04/12
- Re: [Qemu-devel] [RFC v2 08/11] tcg: add options for enabling MTTCG, Alex Bennée, 2016/04/12
- Re: [Qemu-devel] [RFC v2 08/11] tcg: add options for enabling MTTCG, Sergey Fedorov, 2016/04/12