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] [PATCH v3 01/35] cpu-exec: Migrate some generic fns to cpu-exec-common
Date: Sat, 18 Jul 2015 14:44:06 +0200 [thread overview]
Message-ID: <55AA4A16.10705@redhat.com> (raw)
In-Reply-To: <d3118a2320e86ffd868cf3e217c20ed9cbc76892.1437212383.git.crosthwaite.peter@gmail.com>
On 18/07/2015 11:40, Peter Crosthwaite wrote:
> The goal is to split the functions such that cpu-exec is CPU specific
> content, while cpus-exec-common.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 a new module,
> cpu-exec-common.
>
> Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
> ---
> Changed since RFCv2
> Make a new file instead of move stuff to cpus.c
> ---
> Makefile.target | 1 +
> cpu-exec-common.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> cpu-exec.c | 49 -----------------------------------
> 3 files changed, 77 insertions(+), 49 deletions(-)
> create mode 100644 cpu-exec-common.c
>
> diff --git a/Makefile.target b/Makefile.target
> index 3e7aafd..6435c96 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -85,6 +85,7 @@ all: $(PROGS) stap
> #########################################################
> # cpu emulator library
> obj-y = exec.o translate-all.o cpu-exec.o
> +obj-y += cpu-exec-common.o
> obj-y += tcg/tcg.o tcg/tcg-op.o tcg/optimize.o
> obj-$(CONFIG_TCG_INTERPRETER) += tci.o
> obj-$(CONFIG_TCG_INTERPRETER) += disas/tci.o
> diff --git a/cpu-exec-common.c b/cpu-exec-common.c
> new file mode 100644
> index 0000000..3d87c59
> --- /dev/null
> +++ b/cpu-exec-common.c
> @@ -0,0 +1,76 @@
> +/*
> + * emulator main execution loop
> + *
> + * Copyright (c) 2003-2005 Fabrice Bellard
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see <http://www.gnu.org/licenses/>.
> + */
> +
> +#include "config.h"
> +#include "cpu.h"
> +#include "sysemu/cpus.h"
> +#include "exec/memory-internal.h"
> +
> +volatile sig_atomic_t exit_request;
> +
> +/* 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;
> + CPU_HOOK(cpu, tlb_flush)(cpu, 1);
CPU_HOOK is not defined yet at this point.
Paolo
> +}
> +#endif
> +
> +void cpu_loop_exit(CPUState *cpu)
> +{
> + cpu->current_tb = NULL;
> + siglongjmp(cpu->jmp_env, 1);
> +}
> +
> +typedef struct CPUListFn {
> + void (*do_cpu_list)(FILE *f, fprintf_function cpu_fprintf);
> + QLIST_ENTRY(CPUListFn) list;
> +} CPUListFn;
> diff --git a/cpu-exec.c b/cpu-exec.c
> index 75694f3..14ea6fc 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"
> #include "exec/tb-hash.h"
>
> @@ -128,52 +127,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)
> -{
> - 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)
> {
> @@ -345,8 +298,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);
>
next prev parent reply other threads:[~2015-07-18 12:44 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-18 9:40 [Qemu-devel] [PATCH v3 00/35] Multi Architecture System Emulation Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 01/35] cpu-exec: Migrate some generic fns to cpu-exec-common Peter Crosthwaite
2015-07-18 12:44 ` Paolo Bonzini [this message]
2015-09-07 5:22 ` Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 02/35] translate: Listify tcg_exec_init() Peter Crosthwaite
2015-09-07 5:24 ` Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 03/35] translate-all: Move tcg_handle_interrupt() to -common Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 04/35] tcg: split tcg_op_defs " Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 05/35] tcg: Move tcg_tb_ptr " Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 06/35] translate: move real_host_page setting " Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 07/35] cpus: Listify cpu_list() function Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 08/35] translate-common: Listify tcg_enabled() Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 09/35] core: Convert tcg_enabled() users to tcg_(any|all)_enabled() Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 10/35] exec-all: Move cpu_can_do_io() to qom/cpu.h Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 11/35] cputlb: move CPU_LOOP() for tlb_reset() to exec.c Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 12/35] cputlb: Change tlb_set_dirty() arg to cpu Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 13/35] include/exec: Move cputlb exec.c defs out Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 14/35] cpu-common: Define tb_page_addr_t for everyone Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 15/35] include/exec: Split target_long def to new header Peter Crosthwaite
2015-07-18 12:16 ` Paolo Bonzini
2015-07-18 12:37 ` Paolo Bonzini
2015-07-18 15:37 ` Peter Crosthwaite
2015-07-18 16:01 ` Paolo Bonzini
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 16/35] cpu-defs: Allow multiple inclusions Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 17/35] monitor: uninclude cpu_ldst Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 18/35] target-*: Don't redefine cpu_exec() Peter Crosthwaite
2016-06-21 11:19 ` Paolo Bonzini
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 19/35] target-*: cpu.h: Undefine core code symbols Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 20/35] Makefile.target: Introduce arch-obj Peter Crosthwaite
2015-07-18 12:23 ` Paolo Bonzini
2015-07-18 12:29 ` Paolo Bonzini
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 21/35] core: virtualise CPU interfaces completely Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 22/35] core: Introduce multi-arch build Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 23/35] arm: cpu: static inline cpu_arm_init() Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 24/35] target-arm: Split cp helper API to new C file Peter Crosthwaite
2015-07-18 12:30 ` Paolo Bonzini
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 25/35] arm: register cpu_list() function Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 26/35] arm: enable multi-arch Peter Crosthwaite
2015-07-18 12:32 ` Paolo Bonzini
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 27/35] hw: arm: Explicitly include cpu.h for consumers Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 28/35] arm: Remove ELF_MACHINE from cpu.h Peter Crosthwaite
2015-07-18 12:33 ` Paolo Bonzini
2015-08-15 23:29 ` Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 29/35] hw: mb: Explicitly include cpu.h for consumers Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 30/35] mb: Remove ELF_MACHINE from cpu.h Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 31/35] microblaze: enable multi-arch Peter Crosthwaite
2015-07-18 12:35 ` Paolo Bonzini
2015-07-18 20:04 ` Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 32/35] arm: boot: Don't assume all CPUs are ARM Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 34/35] HACK: mb: boot: Assume using -firmware for mb software Peter Crosthwaite
2015-07-18 9:40 ` [Qemu-devel] [PATCH v3 35/35] HACK: mb: boot: Disable dtb load in multi-arch Peter Crosthwaite
2015-07-18 12:44 ` [Qemu-devel] [PATCH v3 00/35] Multi Architecture System Emulation Paolo Bonzini
2015-07-18 15:45 ` Peter Crosthwaite
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=55AA4A16.10705@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.