qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Peter Crosthwaite <crosthwaitepeter@gmail.com>, qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, rth@twiddle.net,
	edgar.iglesias@gmail.com, afaerber@suse.de,
	Peter Crosthwaite <crosthwaite.peter@gmail.com>
Subject: Re: [Qemu-devel] [RFC v2 04/34] cpu-exec: Migrate some generic fns to cpus.c
Date: Mon, 01 Jun 2015 09:45:37 +0200	[thread overview]
Message-ID: <556C0DA1.3050108@redhat.com> (raw)
In-Reply-To: <d44e4fb78855b27dce1cbf5a3b4225a88758d4d4.1433052532.git.crosthwaite.peter@gmail.com>



On 31/05/2015 08:11, Peter Crosthwaite wrote:
> The goal is to split the functions such that cpu-exec is CPU specific
> content, while cpus.c is generic code only. The function interface to
> cpu-exec needs to be virtualised to prepare support for multi-arch and
> moving these definitions out saves bloating the QOM interface. So
> move these definitions out of cpu-exec to the architecture independent
> cpus.c.
> 
> Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
> ---
>  cpu-exec.c | 49 -------------------------------------------------
>  cpus.c     | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 49 insertions(+), 49 deletions(-)
> 
> diff --git a/cpu-exec.c b/cpu-exec.c
> index 0266609..dbea47c 100644
> --- a/cpu-exec.c
> +++ b/cpu-exec.c
> @@ -25,7 +25,6 @@
>  #include "sysemu/qtest.h"
>  #include "qemu/timer.h"
>  #include "exec/address-spaces.h"
> -#include "exec/memory-internal.h"
>  #include "qemu/rcu.h"
>  
>  /* -icount align implementation. */
> @@ -127,52 +126,6 @@ static void init_delay_params(SyncClocks *sc, const CPUState *cpu)
>  }
>  #endif /* CONFIG USER ONLY */
>  
> -void cpu_loop_exit(CPUState *cpu)
> -{
> -    cpu->current_tb = NULL;
> -    siglongjmp(cpu->jmp_env, 1);
> -}
> -
> -/* exit the current TB from a signal handler. The host registers are
> -   restored in a state compatible with the CPU emulator
> - */
> -#if defined(CONFIG_SOFTMMU)
> -void cpu_resume_from_signal(CPUState *cpu, void *puc)
> -{
> -    /* XXX: restore cpu registers saved in host registers */
> -
> -    cpu->exception_index = -1;
> -    siglongjmp(cpu->jmp_env, 1);
> -}
> -
> -void cpu_reload_memory_map(CPUState *cpu)

This doesn't really belong in cpus.c...  I don't have a better
suggestion though, so perhaps just add a FIXME in case one day there is
a cpu-exec-common.c.

Paolo

> -{
> -    AddressSpaceDispatch *d;
> -
> -    if (qemu_in_vcpu_thread()) {
> -        /* Do not let the guest prolong the critical section as much as it
> -         * as it desires.
> -         *
> -         * Currently, this is prevented by the I/O thread's periodinc kicking
> -         * of the VCPU thread (iothread_requesting_mutex, qemu_cpu_kick_thread)
> -         * but this will go away once TCG's execution moves out of the global
> -         * mutex.
> -         *
> -         * This pair matches cpu_exec's rcu_read_lock()/rcu_read_unlock(), which
> -         * only protects cpu->as->dispatch.  Since we reload it below, we can
> -         * split the critical section.
> -         */
> -        rcu_read_unlock();
> -        rcu_read_lock();
> -    }
> -
> -    /* The CPU and TLB are protected by the iothread lock.  */
> -    d = atomic_rcu_read(&cpu->as->dispatch);
> -    cpu->memory_dispatch = d;
> -    tlb_flush(cpu, 1);
> -}
> -#endif
> -
>  /* Execute a TB, and fix up the CPU state afterwards if necessary */
>  static inline tcg_target_ulong cpu_tb_exec(CPUState *cpu, uint8_t *tb_ptr)
>  {
> @@ -344,8 +297,6 @@ static void cpu_handle_debug_exception(CPUState *cpu)
>  
>  /* main execution loop */
>  
> -volatile sig_atomic_t exit_request;
> -
>  int cpu_exec(CPUState *cpu)
>  {
>      CPUClass *cc = CPU_GET_CLASS(cpu);
> diff --git a/cpus.c b/cpus.c
> index c8a2911..2dc4a9a 100644
> --- a/cpus.c
> +++ b/cpus.c
> @@ -28,6 +28,7 @@
>  #include "monitor/monitor.h"
>  #include "qapi/qmp/qerror.h"
>  #include "sysemu/sysemu.h"
> +#include "exec/memory-internal.h"
>  #include "exec/gdbstub.h"
>  #include "sysemu/dma.h"
>  #include "sysemu/kvm.h"
> @@ -64,6 +65,8 @@
>  
>  #endif /* CONFIG_LINUX */
>  
> +volatile sig_atomic_t exit_request;
> +
>  static CPUState *next_cpu;
>  int64_t max_delay;
>  int64_t max_advance;
> @@ -1394,6 +1397,52 @@ static void tcg_exec_all(void)
>      exit_request = 0;
>  }
>  
> +/* exit the current TB from a signal handler. The host registers are
> +   restored in a state compatible with the CPU emulator
> + */
> +#if defined(CONFIG_SOFTMMU)
> +void cpu_resume_from_signal(CPUState *cpu, void *puc)
> +{
> +    /* XXX: restore cpu registers saved in host registers */
> +
> +    cpu->exception_index = -1;
> +    siglongjmp(cpu->jmp_env, 1);
> +}
> +
> +void cpu_reload_memory_map(CPUState *cpu)
> +{
> +    AddressSpaceDispatch *d;
> +
> +    if (qemu_in_vcpu_thread()) {
> +        /* Do not let the guest prolong the critical section as much as it
> +         * as it desires.
> +         *
> +         * Currently, this is prevented by the I/O thread's periodinc kicking
> +         * of the VCPU thread (iothread_requesting_mutex, qemu_cpu_kick_thread)
> +         * but this will go away once TCG's execution moves out of the global
> +         * mutex.
> +         *
> +         * This pair matches cpu_exec's rcu_read_lock()/rcu_read_unlock(), which
> +         * only protects cpu->as->dispatch.  Since we reload it below, we can
> +         * split the critical section.
> +         */
> +        rcu_read_unlock();
> +        rcu_read_lock();
> +    }
> +
> +    /* The CPU and TLB are protected by the iothread lock.  */
> +    d = atomic_rcu_read(&cpu->as->dispatch);
> +    cpu->memory_dispatch = d;
> +    tlb_flush(cpu, 1);
> +}
> +#endif
> +
> +void cpu_loop_exit(CPUState *cpu)
> +{
> +    cpu->current_tb = NULL;
> +    siglongjmp(cpu->jmp_env, 1);
> +}
> +
>  void list_cpus(FILE *f, fprintf_function cpu_fprintf, const char *optarg)
>  {
>      /* XXX: implement xxx_cpu_list for targets that still miss it */
> 

  reply	other threads:[~2015-06-01  7:45 UTC|newest]

Thread overview: 99+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-31  6:11 [Qemu-devel] [RFC v2 00/34] Multi Architecture System Emulation Peter Crosthwaite
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 01/34] cpu-defs: Move CPU_TEMP_BUF_NLONGS to tcg Peter Crosthwaite
2015-06-01 18:57   ` Richard Henderson
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 02/34] cpu-exec: Purge all uses of CPU_GET_ENV Peter Crosthwaite
2015-06-01 19:03   ` Richard Henderson
2015-06-07 22:57     ` Peter Crosthwaite
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 03/34] Makefile.target: Introduce arch-obj Peter Crosthwaite
2015-06-01 19:10   ` Richard Henderson
2015-06-02  9:40     ` Peter Crosthwaite
2015-06-02 10:34       ` Paolo Bonzini
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 04/34] cpu-exec: Migrate some generic fns to cpus.c Peter Crosthwaite
2015-06-01  7:45   ` Paolo Bonzini [this message]
2015-07-10  6:37     ` Peter Crosthwaite
2015-06-01 19:12   ` Richard Henderson
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 05/34] translate: Listify tcg_exec_init Peter Crosthwaite
2015-06-01 19:17   ` Richard Henderson
2015-07-10 10:15   ` Peter Crosthwaite
2015-07-11  9:16     ` Peter Crosthwaite
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 06/34] cpu-common: Define tb_page_addr_t for everyone Peter Crosthwaite
2015-06-01  7:51   ` Paolo Bonzini
2015-06-07 23:06     ` Peter Crosthwaite
2015-06-24  9:48       ` Paolo Bonzini
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 07/34] exec-all: Move cpu_can_do_io to qom/cpu.h Peter Crosthwaite
2015-06-01 19:18   ` Richard Henderson
2015-06-24  9:11   ` Paolo Bonzini
2015-06-24 11:40     ` Pavel Dovgaluk
2015-06-24 11:41       ` Paolo Bonzini
2015-06-24 11:59         ` Pavel Dovgaluk
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 08/34] translate-all: Move tcg_handle_interrupt to -common Peter Crosthwaite
2015-06-01 19:20   ` Richard Henderson
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 09/34] include/exec: Move standard exceptions to cpu-all.h Peter Crosthwaite
2015-06-01 19:20   ` Richard Henderson
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 10/34] include/exec: Split target_long def to new header Peter Crosthwaite
2015-06-01 19:24   ` Richard Henderson
2015-06-01 19:51     ` Paolo Bonzini
2015-06-01 20:25       ` Peter Maydell
2015-06-01 20:27         ` Paolo Bonzini
2015-06-01 20:32       ` Richard Henderson
2015-06-01 20:39         ` Paolo Bonzini
2015-06-02 10:14         ` Peter Crosthwaite
2015-06-03 10:01           ` Paolo Bonzini
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 11/34] include/exec: Move cputlb exec.c defs out Peter Crosthwaite
2015-06-01  7:56   ` Paolo Bonzini
2015-06-02  9:44     ` Peter Crosthwaite
2015-06-02 10:38       ` Paolo Bonzini
2015-06-01 19:25   ` Richard Henderson
2015-06-24  9:25   ` Paolo Bonzini
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 12/34] include/exec: Move tb hash functions out Peter Crosthwaite
2015-06-01  7:56   ` Paolo Bonzini
2015-06-01 19:25   ` Richard Henderson
2015-06-24  9:05   ` Paolo Bonzini
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 13/34] cpu-defs: Move out TB_JMP defines Peter Crosthwaite
2015-06-01 19:25   ` Richard Henderson
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 14/34] cpu-defs: Allow multiple inclusions Peter Crosthwaite
2015-06-01  7:59   ` Paolo Bonzini
2015-06-01 19:29     ` Richard Henderson
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 15/34] HACK: monitor: Comment out TCG profile ops Peter Crosthwaite
2015-06-01  8:03   ` Paolo Bonzini
2015-06-01 18:49     ` Richard Henderson
2015-07-11 20:26     ` Peter Crosthwaite
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 16/34] HACK: Disable list_cpus Peter Crosthwaite
2015-06-01  8:04   ` Paolo Bonzini
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 17/34] HACK: globalise TCG page size variables Peter Crosthwaite
2015-06-01 18:52   ` Richard Henderson
2015-06-01 18:58     ` Peter Crosthwaite
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 18/34] HACK: monitor: uninclude cpu_ldst Peter Crosthwaite
2015-07-09  3:08   ` Peter Crosthwaite
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 19/34] HACK: disas: Defeature print_target_address Peter Crosthwaite
2015-06-01  8:08   ` Paolo Bonzini
2015-06-01 18:55   ` Richard Henderson
2015-06-08  0:21     ` Peter Crosthwaite
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 20/34] HACK: exec: comment out use of cpu_get_tb_cpu_from_state Peter Crosthwaite
2015-06-01  8:09   ` Paolo Bonzini
2015-06-08  0:22     ` Peter Crosthwaite
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 21/34] core: virtualise CPU interfaces completely Peter Crosthwaite
2015-06-01  8:11   ` Paolo Bonzini
2015-06-02  9:52     ` Peter Crosthwaite
2015-06-02 10:38       ` Paolo Bonzini
2015-06-01 19:53   ` Richard Henderson
2015-06-02  9:56     ` Peter Crosthwaite
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 22/34] microblaze: enable multi-arch Peter Crosthwaite
2015-06-01  8:16   ` Paolo Bonzini
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 23/34] arm: cpu: static inline cpu_arm_init Peter Crosthwaite
2015-06-01  8:18   ` Paolo Bonzini
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 24/34] target-arm: Split cp helper API to new C file Peter Crosthwaite
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 25/34] arm: enable multi-arch Peter Crosthwaite
2015-06-01  8:22   ` Paolo Bonzini
2015-05-31  6:11 ` [Qemu-devel] [RFC v2 26/34] core: Introduce multi-arch build Peter Crosthwaite
2015-06-01  8:26   ` Paolo Bonzini
2015-05-31  6:12 ` [Qemu-devel] [RFC v2 27/34] hw: arm: Explicitly include cpu.h for consumers Peter Crosthwaite
2015-05-31  6:12 ` [Qemu-devel] [RFC v2 28/34] arm: Remove ELF_MACHINE from cpu.h Peter Crosthwaite
2015-06-01  8:39   ` Paolo Bonzini
2015-05-31  6:12 ` [Qemu-devel] [RFC v2 29/34] hw: mb: Explicitly include cpu.h for consumers Peter Crosthwaite
2015-05-31  6:12 ` [Qemu-devel] [RFC v2 30/34] mb: Remove ELF_MACHINE from cpu.h Peter Crosthwaite
2015-05-31  6:12 ` [Qemu-devel] [RFC v2 31/34] arm: boot: Don't assume all CPUs are ARM Peter Crosthwaite
2015-05-31  6:12 ` [Qemu-devel] [RFC v2 32/34] arm: xilinx_zynq: Add a Microblaze Peter Crosthwaite
2015-05-31  6:12 ` [Qemu-devel] [RFC v2 33/34] HACK: mb: boot: Assume using -firmware for mb software Peter Crosthwaite
2015-05-31  6:12 ` [Qemu-devel] [RFC v2 34/34] HACK: mb: boot: Disable dtb load in multi-arch Peter Crosthwaite
2015-06-01  8:44 ` [Qemu-devel] [RFC v2 00/34] Multi Architecture System Emulation Paolo Bonzini

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=556C0DA1.3050108@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=afaerber@suse.de \
    --cc=crosthwaite.peter@gmail.com \
    --cc=crosthwaitepeter@gmail.com \
    --cc=edgar.iglesias@gmail.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).