From: Pranith Kumar <bobby.prani@gmail.com>
To: "Alex Bennée" <alex.bennee@linaro.org>
Cc: mttcg@listserver.greensocs.com, qemu-devel@nongnu.org,
fred.konrad@greensocs.com, a.rigo@virtualopensystems.com,
cota@braap.org, nikunj@linux.vnet.ibm.com,
mark.burton@greensocs.com, pbonzini@redhat.com,
jan.kiszka@siemens.com, serge.fdrv@gmail.com, rth@twiddle.net,
peter.maydell@linaro.org, claudio.fontana@huawei.com,
bamvor.zhangjian@linaro.org,
Peter Crosthwaite <crosthwaite.peter@gmail.com>
Subject: Re: [Qemu-devel] [PATCH v8 07/25] tcg: rename tcg_current_cpu to tcg_current_rr_cpu
Date: Sun, 29 Jan 2017 16:04:32 -0500 [thread overview]
Message-ID: <8737g1r31b.fsf@gmail.com> (raw)
In-Reply-To: <20170127103922.19658-8-alex.bennee@linaro.org>
Alex Bennée writes:
> ..and make the definition local to cpus. In preparation for MTTCG the
> concept of a global tcg_current_cpu will no longer make sense. However
> we still need to keep track of it in the single-threaded case to be able
> to exit quickly when required.
>
> qemu_cpu_kick_no_halt() moves and becomes qemu_cpu_kick_rr_cpu() to
> emphasise its use-case. qemu_cpu_kick now kicks the relevant cpu as
> well as qemu_kick_rr_cpu() which will become a no-op in MTTCG.
>
> For the time being the setting of the global exit_request remains.
>
> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>
> Reviewed-by: Richard Henderson <rth@twiddle.net>
> ---
> v4:
> - keep global exit_request setting for now
> - fix merge conflicts
> v5:
> - merge conflicts with kick changes
> ---
> cpu-exec-common.c | 1 -
> cpu-exec.c | 3 ---
> cpus.c | 41 ++++++++++++++++++++++-------------------
> include/exec/exec-all.h | 1 -
> 4 files changed, 22 insertions(+), 24 deletions(-)
>
> diff --git a/cpu-exec-common.c b/cpu-exec-common.c
> index 767d9c6f0c..e2bc053372 100644
> --- a/cpu-exec-common.c
> +++ b/cpu-exec-common.c
> @@ -24,7 +24,6 @@
> #include "exec/memory-internal.h"
>
> bool exit_request;
> -CPUState *tcg_current_cpu;
>
> /* exit the current TB, but without causing any exception to be raised */
> void cpu_loop_exit_noexc(CPUState *cpu)
> diff --git a/cpu-exec.c b/cpu-exec.c
> index 1b8685dc21..f9e836c8dd 100644
> --- a/cpu-exec.c
> +++ b/cpu-exec.c
> @@ -609,7 +609,6 @@ int cpu_exec(CPUState *cpu)
> return EXCP_HALTED;
> }
>
> - atomic_mb_set(&tcg_current_cpu, cpu);
> rcu_read_lock();
>
> if (unlikely(atomic_mb_read(&exit_request))) {
> @@ -668,7 +667,5 @@ int cpu_exec(CPUState *cpu)
> /* fail safe : never use current_cpu outside cpu_exec() */
> current_cpu = NULL;
>
> - /* Does not need atomic_mb_set because a spurious wakeup is okay. */
> - atomic_set(&tcg_current_cpu, NULL);
> return ret;
> }
> diff --git a/cpus.c b/cpus.c
> index a98925105c..6d64199831 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -779,8 +779,7 @@ void configure_icount(QemuOpts *opts, Error **errp)
> */
>
> static QEMUTimer *tcg_kick_vcpu_timer;
> -
> -static void qemu_cpu_kick_no_halt(void);
> +static CPUState *tcg_current_rr_cpu;
>
> #define TCG_KICK_PERIOD (NANOSECONDS_PER_SECOND / 10)
>
> @@ -789,10 +788,23 @@ static inline int64_t qemu_tcg_next_kick(void)
> return qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL) + TCG_KICK_PERIOD;
> }
>
> +/* Kick the currently round-robin scheduled vCPU */
> +static void qemu_cpu_kick_rr_cpu(void)
> +{
> + CPUState *cpu;
> + atomic_mb_set(&exit_request, 1);
> + do {
> + cpu = atomic_mb_read(&tcg_current_rr_cpu);
> + if (cpu) {
> + cpu_exit(cpu);
> + }
> + } while (cpu != atomic_mb_read(&tcg_current_rr_cpu));
> +}
> +
> static void kick_tcg_thread(void *opaque)
> {
> timer_mod(tcg_kick_vcpu_timer, qemu_tcg_next_kick());
> - qemu_cpu_kick_no_halt();
> + qemu_cpu_kick_rr_cpu();
> }
>
> static void start_tcg_kick_timer(void)
> @@ -812,7 +824,6 @@ static void stop_tcg_kick_timer(void)
> }
> }
>
> -
> /***********************************************************/
> void hw_error(const char *fmt, ...)
> {
> @@ -1323,6 +1334,7 @@ static void *qemu_tcg_cpu_thread_fn(void *arg)
> }
>
> for (; cpu != NULL && !exit_request; cpu = CPU_NEXT(cpu)) {
> + atomic_mb_set(&tcg_current_rr_cpu, cpu);
>
> qemu_clock_enable(QEMU_CLOCK_VIRTUAL,
> (cpu->singlestep_enabled & SSTEP_NOTIMER) == 0);
> @@ -1342,6 +1354,8 @@ static void *qemu_tcg_cpu_thread_fn(void *arg)
> }
>
> } /* for cpu.. */
> + /* Does not need atomic_mb_set because a spurious wakeup is okay. */
> + atomic_set(&tcg_current_rr_cpu, NULL);
>
> /* Pairs with smp_wmb in qemu_cpu_kick. */
> atomic_mb_set(&exit_request, 0);
> @@ -1420,24 +1434,13 @@ static void qemu_cpu_kick_thread(CPUState *cpu)
> #endif
> }
>
> -static void qemu_cpu_kick_no_halt(void)
> -{
> - CPUState *cpu;
> - /* Ensure whatever caused the exit has reached the CPU threads before
> - * writing exit_request.
> - */
> - atomic_mb_set(&exit_request, 1);
> - cpu = atomic_mb_read(&tcg_current_cpu);
> - if (cpu) {
> - cpu_exit(cpu);
> - }
> -}
> -
> void qemu_cpu_kick(CPUState *cpu)
> {
> qemu_cond_broadcast(cpu->halt_cond);
> if (tcg_enabled()) {
> - qemu_cpu_kick_no_halt();
> + cpu_exit(cpu);
> + /* Also ensure current RR cpu is kicked */
> + qemu_cpu_kick_rr_cpu();
> } else {
> if (hax_enabled()) {
> /*
> @@ -1485,7 +1488,7 @@ void qemu_mutex_lock_iothread(void)
> atomic_dec(&iothread_requesting_mutex);
> } else {
> if (qemu_mutex_trylock(&qemu_global_mutex)) {
> - qemu_cpu_kick_no_halt();
> + qemu_cpu_kick_rr_cpu();
> qemu_mutex_lock(&qemu_global_mutex);
> }
> atomic_dec(&iothread_requesting_mutex);
> diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h
> index bbc9478a50..3cbd359dd7 100644
> --- a/include/exec/exec-all.h
> +++ b/include/exec/exec-all.h
> @@ -404,7 +404,6 @@ bool memory_region_is_unassigned(MemoryRegion *mr);
> extern int singlestep;
>
> /* cpu-exec.c, accessed with atomic_mb_read/atomic_mb_set */
> -extern CPUState *tcg_current_cpu;
> extern bool exit_request;
>
> #endif
Reviewed-by: Pranith Kumar <bobby.prani@gmail.com>
--
Pranith
next prev parent reply other threads:[~2017-01-29 21:04 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-27 10:38 [Qemu-devel] [PATCH v8 00/25] Remaining MTTCG Base patches and ARM enablement Alex Bennée
2017-01-27 10:38 ` [Qemu-devel] [PATCH v8 01/25] docs: new design document multi-thread-tcg.txt Alex Bennée
2017-01-27 10:38 ` [Qemu-devel] [PATCH v8 02/25] mttcg: translate-all: Enable locking debug in a debug build Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 03/25] mttcg: Add missing tb_lock/unlock() in cpu_exec_step() Alex Bennée
2017-01-31 19:13 ` Richard Henderson
2017-02-01 10:57 ` Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 04/25] tcg: move TCG_MO/BAR types into own file Alex Bennée
2017-01-29 20:55 ` Pranith Kumar
2017-01-30 9:57 ` Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 05/25] tcg: add options for enabling MTTCG Alex Bennée
2017-01-29 20:37 ` Pranith Kumar
2017-01-31 14:50 ` Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 06/25] tcg: add kick timer for single-threaded vCPU emulation Alex Bennée
2017-01-29 21:00 ` Pranith Kumar
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 07/25] tcg: rename tcg_current_cpu to tcg_current_rr_cpu Alex Bennée
2017-01-29 21:04 ` Pranith Kumar [this message]
2017-01-27 10:39 ` [PATCH v8 08/25] tcg: drop global lock during TCG code execution Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] " Alex Bennée
2017-01-29 21:33 ` Pranith Kumar
2017-01-29 21:33 ` [Qemu-devel] " Pranith Kumar
2017-01-30 9:57 ` Alex Bennée
2017-01-30 9:57 ` [Qemu-devel] " Alex Bennée
2017-01-30 16:52 ` Richard Henderson
2017-01-30 16:52 ` [Qemu-devel] " Richard Henderson
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 09/25] tcg: remove global exit_request Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 10/25] tcg: enable tb_lock() for SoftMMU Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 11/25] tcg: enable thread-per-vCPU Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 12/25] tcg: handle EXCP_ATOMIC exception for system emulation Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 13/25] cputlb: add assert_cpu_is_self checks Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 14/25] cputlb: tweak qemu_ram_addr_from_host_nofail reporting Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 15/25] cputlb: introduce tlb_flush_* async work Alex Bennée
2017-01-31 20:04 ` Richard Henderson
2017-01-27 10:39 ` [PATCH v8 16/25] cputlb and arm/sparc targets: convert mmuidx flushes from varg to bitmap Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] " Alex Bennée
2017-01-31 23:09 ` Richard Henderson
2017-01-31 23:09 ` [Qemu-devel] " Richard Henderson
2017-02-01 7:42 ` Alex Bennée
2017-02-01 7:42 ` [Qemu-devel] " Alex Bennée
2017-02-01 11:03 ` Alex Bennée
2017-02-01 11:03 ` [Qemu-devel] " Alex Bennée
2017-02-01 18:03 ` Richard Henderson
2017-02-01 18:03 ` [Qemu-devel] " Richard Henderson
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 17/25] cputlb: add tlb_flush_by_mmuidx async routines Alex Bennée
2017-01-31 23:12 ` Richard Henderson
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 18/25] cputlb: atomically update tlb fields used by tlb_reset_dirty Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] [PATCH v8 19/25] cputlb: introduce tlb_flush_*_all_cpus[_synced] Alex Bennée
2017-01-31 23:35 ` Richard Henderson
2017-01-27 10:39 ` [PATCH v8 20/25] target-arm/powerctl: defer cpu reset work to CPU context Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] " Alex Bennée
2017-01-27 10:39 ` [PATCH v8 21/25] target-arm: don't generate WFE/YIELD calls for MTTCG Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] " Alex Bennée
2017-01-27 10:39 ` [PATCH v8 22/25] target-arm/cpu.h: make ARM_CP defined consistent Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] " Alex Bennée
2017-01-27 10:39 ` [PATCH v8 23/25] target-arm: introduce ARM_CP_EXIT_PC Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] " Alex Bennée
2017-01-27 10:39 ` [PATCH v8 24/25] target-arm: ensure all cross vCPUs TLB flushes complete Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] " Alex Bennée
2017-01-31 23:37 ` Richard Henderson
2017-01-31 23:37 ` [Qemu-devel] " Richard Henderson
2017-01-27 10:39 ` [PATCH v8 25/25] tcg: enable MTTCG by default for ARM on x86 hosts Alex Bennée
2017-01-27 10:39 ` [Qemu-devel] " Alex Bennée
2017-01-31 23:39 ` Richard Henderson
2017-01-31 23:39 ` [Qemu-devel] " Richard Henderson
2017-02-01 7:44 ` Alex Bennée
2017-02-01 7:44 ` [Qemu-devel] " Alex Bennée
2017-01-29 23:05 ` [Qemu-devel] [PATCH v8 00/25] Remaining MTTCG Base patches and ARM enablement Pranith Kumar
2017-01-31 23:44 ` Richard Henderson
[not found] <20170127103505.18606-1-alex.bennee@linaro.org>
2017-01-27 10:34 ` [Qemu-devel] [PATCH v8 07/25] tcg: rename tcg_current_cpu to tcg_current_rr_cpu Alex Bennée
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=8737g1r31b.fsf@gmail.com \
--to=bobby.prani@gmail.com \
--cc=a.rigo@virtualopensystems.com \
--cc=alex.bennee@linaro.org \
--cc=bamvor.zhangjian@linaro.org \
--cc=claudio.fontana@huawei.com \
--cc=cota@braap.org \
--cc=crosthwaite.peter@gmail.com \
--cc=fred.konrad@greensocs.com \
--cc=jan.kiszka@siemens.com \
--cc=mark.burton@greensocs.com \
--cc=mttcg@listserver.greensocs.com \
--cc=nikunj@linux.vnet.ibm.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=serge.fdrv@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.