All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex Bennée" <alex.bennee@linaro.org>
To: Claudio Fontana <cfontana@suse.de>
Cc: "Paul Durrant" <paul@xen.org>, "Jason Wang" <jasowang@redhat.com>,
	qemu-devel@nongnu.org, "Peter Xu" <peterx@redhat.com>,
	haxm-team@intel.com, "Colin Xu" <colin.xu@intel.com>,
	"Olaf Hering" <ohering@suse.de>,
	"Stefano Stabellini" <sstabellini@kernel.org>,
	"Bruce Rogers" <brogers@suse.com>,
	"Emilio G . Cota" <cota@braap.org>,
	"Anthony Perard" <anthony.perard@citrix.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Laurent Vivier" <lvivier@redhat.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Eduardo Habkost" <ehabkost@redhat.com>,
	"Richard Henderson" <richard.henderson@linaro.org>,
	"Cameron Esfahani" <dirty@apple.com>,
	"Dario Faggioli" <dfaggioli@suse.com>,
	"Roman Bolshakov" <r.bolshakov@yadro.com>,
	"Sunil Muthuswamy" <sunilmut@microsoft.com>,
	"Marcelo Tosatti" <mtosatti@redhat.com>,
	"Wenchao Wang" <wenchao.wang@intel.com>,
	"Paolo Bonzini" <pbonzini@redhat.com>
Subject: Re: [RFC v9 02/32] accel/tcg: split tcg_start_vcpu_thread
Date: Wed, 09 Dec 2020 09:03:22 +0000	[thread overview]
Message-ID: <87sg8ffirf.fsf@linaro.org> (raw)
In-Reply-To: <20201208194839.31305-3-cfontana@suse.de>


Claudio Fontana <cfontana@suse.de> writes:

> after the initial split into 3 tcg variants, we proceed to also
> split tcg_start_vcpu_thread.
>
> We actually split it in 2 this time, since the icount variant
> just uses the round robin function.
>
> Suggested-by: Richard Henderson <richard.henderson@linaro.org>
> Signed-off-by: Claudio Fontana <cfontana@suse.de>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> ---
>  accel/tcg/tcg-all.c         |  5 ++++
>  accel/tcg/tcg-cpus-icount.c |  2 +-
>  accel/tcg/tcg-cpus-mttcg.c  | 29 +++++++++++++++++--
>  accel/tcg/tcg-cpus-mttcg.h  | 21 --------------
>  accel/tcg/tcg-cpus-rr.c     | 39 +++++++++++++++++++++++--
>  accel/tcg/tcg-cpus-rr.h     |  3 +-
>  accel/tcg/tcg-cpus.c        | 58 -------------------------------------
>  accel/tcg/tcg-cpus.h        |  1 -
>  8 files changed, 71 insertions(+), 87 deletions(-)
>  delete mode 100644 accel/tcg/tcg-cpus-mttcg.h
>
> diff --git a/accel/tcg/tcg-all.c b/accel/tcg/tcg-all.c
> index e42a028043..1ac0b76515 100644
> --- a/accel/tcg/tcg-all.c
> +++ b/accel/tcg/tcg-all.c
> @@ -105,6 +105,11 @@ static int tcg_init(MachineState *ms)
>      tcg_exec_init(s->tb_size * 1024 * 1024);
>      mttcg_enabled = s->mttcg_enabled;
>  
> +    /*
> +     * Initialize TCG regions
> +     */
> +    tcg_region_init();
> +

It might be worth noting in the commit log this is OK because the
accelerator is now guaranteed to be initialised so you know the details
of MTTCG when initialising the regions.

>      if (mttcg_enabled) {
>          cpus_register_accel(&tcg_cpus_mttcg);
>      } else if (icount_enabled()) {
> diff --git a/accel/tcg/tcg-cpus-icount.c b/accel/tcg/tcg-cpus-icount.c
> index d3af3afb6d..82dbe2cacf 100644
<snip>
> diff --git a/accel/tcg/tcg-cpus-mttcg.h b/accel/tcg/tcg-cpus-mttcg.h
> deleted file mode 100644
> index d1bd771f49..0000000000
> --- a/accel/tcg/tcg-cpus-mttcg.h
> +++ /dev/null
> @@ -1,21 +0,0 @@
> -/*
> - * QEMU TCG Multi Threaded vCPUs implementation
> - *
> - * Copyright 2020 SUSE LLC
> - *
> - * This work is licensed under the terms of the GNU GPL, version 2 or later.
> - * See the COPYING file in the top-level directory.
> - */
> -
> -#ifndef TCG_CPUS_MTTCG_H
> -#define TCG_CPUS_MTTCG_H
> -
> -/*
> - * In the multi-threaded case each vCPU has its own thread. The TLS
> - * variable current_cpu can be used deep in the code to find the
> - * current CPUState for a given thread.
> - */

Ahh gone now ;-)

> -
> -void *tcg_cpu_thread_fn(void *arg);
> -
> -#endif /* TCG_CPUS_MTTCG_H */
> diff --git a/accel/tcg/tcg-cpus-rr.c b/accel/tcg/tcg-cpus-rr.c
> index ad50a3765f..f3b262bec7 100644
> --- a/accel/tcg/tcg-cpus-rr.c
> +++ b/accel/tcg/tcg-cpus-rr.c
> @@ -144,7 +144,7 @@ static void deal_with_unplugged_cpus(void)
>   * elsewhere.
>   */
>  
> -void *tcg_rr_cpu_thread_fn(void *arg)
> +static void *tcg_rr_cpu_thread_fn(void *arg)
>  {
>      CPUState *cpu = arg;
>  
> @@ -262,8 +262,43 @@ void *tcg_rr_cpu_thread_fn(void *arg)
>      return NULL;
>  }
>  
> +void rr_start_vcpu_thread(CPUState *cpu)
> +{
> +    char thread_name[VCPU_THREAD_NAME_SIZE];
> +    static QemuCond *single_tcg_halt_cond;
> +    static QemuThread *single_tcg_cpu_thread;
> +
> +    g_assert(tcg_enabled());
> +    parallel_cpus = false;
> +
> +    if (!single_tcg_cpu_thread) {
> +        cpu->thread = g_malloc0(sizeof(QemuThread));
> +        cpu->halt_cond = g_malloc0(sizeof(QemuCond));
> +        qemu_cond_init(cpu->halt_cond);
> +
> +        /* share a single thread for all cpus with TCG */
> +        snprintf(thread_name, VCPU_THREAD_NAME_SIZE, "ALL CPUs/TCG");
> +        qemu_thread_create(cpu->thread, thread_name,
> +                           tcg_rr_cpu_thread_fn,
> +                           cpu, QEMU_THREAD_JOINABLE);
> +
> +        single_tcg_halt_cond = cpu->halt_cond;
> +        single_tcg_cpu_thread = cpu->thread;
> +#ifdef _WIN32
> +        cpu->hThread = qemu_thread_get_handle(cpu->thread);
> +#endif
> +    } else {
> +        /* we share the thread */
> +        cpu->thread = single_tcg_cpu_thread;
> +        cpu->halt_cond = single_tcg_halt_cond;
> +        cpu->thread_id = first_cpu->thread_id;
> +        cpu->can_do_io = 1;
> +        cpu->created = true;

I was wonder if we should be duplicating hThread here but on closer
examination it looks like it's only used by HAX/WHPX accelerators so
maybe this is a candidate for accelerator specific CPU data?

Otherwise LGTM:

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>

-- 
Alex Bennée


  reply	other threads:[~2020-12-09  9:11 UTC|newest]

Thread overview: 87+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-08 19:48 [RFC v9 00/22] i386 cleanup Claudio Fontana
2020-12-08 19:48 ` [RFC v9 01/32] accel/tcg: split CpusAccel into three TCG variants Claudio Fontana
2020-12-09  8:34   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 02/32] accel/tcg: split tcg_start_vcpu_thread Claudio Fontana
2020-12-09  9:03   ` Alex Bennée [this message]
2020-12-08 19:48 ` [RFC v9 03/32] accel/tcg: rename tcg-cpus functions to match module name Claudio Fontana
2020-12-09  9:10   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 04/32] i386: move kvm accel files into kvm/ Claudio Fontana
2020-12-09  9:17   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 05/32] i386: move whpx accel files into whpx/ Claudio Fontana
2020-12-09  9:21   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 06/32] i386: move hax accel files into hax/ Claudio Fontana
2020-12-09  9:22   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 07/32] i386: hvf: remove stale MAINTAINERS entry for old hvf stubs Claudio Fontana
2020-12-09  9:22   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 08/32] i386: move TCG accel files into tcg/ Claudio Fontana
2020-12-09  9:30   ` Alex Bennée
2020-12-09 11:05     ` Claudio Fontana
2020-12-08 19:48 ` [RFC v9 09/32] i386: move cpu dump out of helper.c into cpu-dump.c Claudio Fontana
2020-12-09  9:59   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 10/32] i386: move TCG cpu class initialization out of helper.c Claudio Fontana
2020-12-09 10:23   ` Alex Bennée
2020-12-09 11:19     ` Claudio Fontana
2020-12-08 19:48 ` [RFC v9 11/32] tcg: cpu_exec_{enter,exit} helpers Claudio Fontana
2020-12-09 10:33   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 12/32] tcg: make CPUClass.cpu_exec_* optional Claudio Fontana
2020-12-09 10:36   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 13/32] tcg: Make CPUClass.debug_excp_handler optional Claudio Fontana
2020-12-09 10:37   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 14/32] cpu: Remove unnecessary noop methods Claudio Fontana
2020-12-09 10:38   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 15/32] cpu: Introduce TCGCpuOperations struct Claudio Fontana
2020-12-09 10:39   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 16/32] target/riscv: remove CONFIG_TCG, as it is always TCG Claudio Fontana
2020-12-08 22:10   ` Alistair Francis
2020-12-08 19:48 ` [RFC v9 17/32] accel/tcg: split TCG-only code from cpu_exec_realizefn Claudio Fontana
2020-12-09 10:42   ` Alex Bennée
2020-12-09 11:22     ` Claudio Fontana
2020-12-08 19:48 ` [RFC v9 18/32] cpu: Move synchronize_from_tb() to tcg_ops Claudio Fontana
2020-12-09  9:27   ` Philippe Mathieu-Daudé
2020-12-09 14:33     ` Claudio Fontana
2020-12-09 15:06       ` Philippe Mathieu-Daudé
2020-12-09 10:50   ` Alex Bennée
2020-12-09 14:46     ` Eduardo Habkost
2020-12-09 15:51       ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 19/32] cpu: Move cpu_exec_* " Claudio Fontana
2020-12-09  9:28   ` Philippe Mathieu-Daudé
2020-12-09 11:02     ` Claudio Fontana
2020-12-09 11:16   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 20/32] cpu: Move tlb_fill " Claudio Fontana
2020-12-09 11:26   ` Alex Bennée
2020-12-09 14:38     ` Claudio Fontana
2020-12-09 16:12       ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 21/32] cpu: Move debug_excp_handler " Claudio Fontana
2020-12-09 11:29   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 22/32] target/arm: do not use cc->do_interrupt for KVM directly Claudio Fontana
2020-12-09 11:30   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 23/32] cpu: move cc->do_interrupt to tcg_ops Claudio Fontana
2020-12-09 11:43   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 24/32] cpu: move cc->transaction_failed " Claudio Fontana
2020-12-09  9:31   ` Philippe Mathieu-Daudé
2020-12-09 14:43     ` Claudio Fontana
2020-12-09 14:59       ` Eduardo Habkost
2020-12-09 12:03   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 25/32] cpu: move do_unaligned_access " Claudio Fontana
2020-12-09 12:47   ` Alex Bennée
2020-12-08 19:48 ` [RFC v9 26/32] accel: extend AccelState and AccelClass to user-mode Claudio Fontana
2020-12-09 12:51   ` Alex Bennée
2020-12-09 12:58     ` Claudio Fontana
2020-12-08 19:48 ` [RFC v9 27/32] accel: replace struct CpusAccel with AccelOpsClass Claudio Fontana
2020-12-09 12:54   ` Alex Bennée
2020-12-09 14:50     ` Claudio Fontana
2020-12-09 17:28     ` Claudio Fontana
2020-12-09 18:30       ` Alex Bennée
2020-12-09 19:27         ` Claudio Fontana
2020-12-08 19:48 ` [RFC v9 28/32] accel: introduce AccelCPUClass extending CPUClass Claudio Fontana
2020-12-08 19:48 ` [RFC v9 29/32] i386: split cpu accelerators from cpu.c, using AccelCPUClass Claudio Fontana
2020-12-08 19:48 ` [RFC v9 30/32] cpu: call AccelCPUClass::cpu_realizefn in cpu_exec_realizefn Claudio Fontana
2020-12-08 19:48 ` [RFC v9 31/32] hw/core/cpu: call qemu_init_vcpu in cpu_common_realizefn Claudio Fontana
2020-12-08 19:48 ` [RFC v9 32/32] cpu: introduce cpu_accel_instance_init Claudio Fontana
2020-12-08 20:00 ` [RFC v9 00/22] i386 cleanup Philippe Mathieu-Daudé
2020-12-08 22:15   ` Claudio Fontana
2020-12-09  8:47     ` Paolo Bonzini
2020-12-08 22:00 ` no-reply
2020-12-09 10:22   ` Alex Bennée
2020-12-09 12:58 ` Alex Bennée
2020-12-09 14:10   ` Claudio Fontana

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=87sg8ffirf.fsf@linaro.org \
    --to=alex.bennee@linaro.org \
    --cc=anthony.perard@citrix.com \
    --cc=brogers@suse.com \
    --cc=cfontana@suse.de \
    --cc=colin.xu@intel.com \
    --cc=cota@braap.org \
    --cc=dfaggioli@suse.com \
    --cc=dirty@apple.com \
    --cc=ehabkost@redhat.com \
    --cc=haxm-team@intel.com \
    --cc=jasowang@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=mtosatti@redhat.com \
    --cc=ohering@suse.de \
    --cc=paul@xen.org \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=philmd@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=r.bolshakov@yadro.com \
    --cc=richard.henderson@linaro.org \
    --cc=sstabellini@kernel.org \
    --cc=sunilmut@microsoft.com \
    --cc=thuth@redhat.com \
    --cc=wenchao.wang@intel.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.