All of lore.kernel.org
 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 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.