From: Samuel Ortiz <sameo@linux.intel.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-arm <qemu-arm@nongnu.org>,
Richard Henderson <richard.henderson@linaro.org>,
QEMU Developers <qemu-devel@nongnu.org>
Subject: Re: [Qemu-arm] [Qemu-devel] [PATCH 04/13] target: arm: Move all interrupt and exception handlers into their own file
Date: Wed, 28 Nov 2018 16:00:16 +0100 [thread overview]
Message-ID: <20181128150016.GA25839@caravaggio> (raw)
In-Reply-To: <20181128135719.GE4393@caravaggio>
On Wed, Nov 28, 2018 at 02:57:19PM +0100, Samuel Ortiz wrote:
> On Wed, Nov 28, 2018 at 11:39:57AM +0000, Peter Maydell wrote:
> > On Wed, 28 Nov 2018 at 10:40, Samuel Ortiz <sameo@linux.intel.com> wrote:
> > > Given that this piece of code effectively builds a dependency to TCG
> > > from the KVM code, I see a few solutions but I need your input here. We
> > > could:
> > >
> > > - Decide we don't want to support --disable-tcg for ARM. We'd then carry
> > > this patch serie from the NEMU code repo. Worst case scenario, at
> > > least for us.
> > > - Manage to implement exception injection from userspace without TCG.
> > > Would it even be possible?
> > > - Offload exception injections back to the kernel in those cases. I feel
> > > this would be the cleanest solution but may need kernel changes.
> >
> > The kernel folk were firmly against 3, IIRC, but you can go
> > and have the discussion if you like.
> >
> > I don't really see what the problem is. This is just a bit
> > of code that's used by both TCG and KVM. Therefore it goes
> > in the binary whether TCG is enabled or not. Other functions
> > and bits of code are TCG only and therefore don't go in a
> > KVM-only binary.
> Keeping this code with --disable-tcg means:
>
> Keep arm_cpu_do_interrupt -> Keep check_for_semihosting -> Keep the arm
> instruction loading code -> Keep a large chunk of the TCG core code
> itself. Does that dependency chain looks fine to you?
A simplified, aarch64 specific arm_cpu_do_interrupt() implementation
would not pull the TCG code in. Something like:
diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c
index 0a502091e7..eba7ced564 100644
--- a/target/arm/kvm64.c
+++ b/target/arm/kvm64.c
@@ -1034,7 +1034,6 @@ bool kvm_arm_handle_debug(CPUState *cs, struct kvm_debug_exit_arch *debug_exit)
{
int hsr_ec = syn_get_ec(debug_exit->hsr);
ARMCPU *cpu = ARM_CPU(cs);
- CPUClass *cc = CPU_GET_CLASS(cs);
CPUARMState *env = &cpu->env;
/* Ensure PC is synchronised */
@@ -1088,7 +1087,22 @@ bool kvm_arm_handle_debug(CPUState *cs, struct kvm_debug_exit_arch *debug_exit)
env->exception.vaddress = debug_exit->far;
env->exception.target_el = 1;
qemu_mutex_lock_iothread();
- cc->do_interrupt(cs);
+
+ /* Hooks may change global state so BQL should be held, also the
+ * BQL needs to be held for any modification of
+ * cs->interrupt_request.
+ */
+ g_assert(qemu_mutex_iothread_locked());
+
+ arm_call_pre_el_change_hook(cpu);
+
+ assert(!excp_is_internal(cs->exception_index));
+ arm_cpu_do_interrupt_aarch64(cs);
+
+ arm_call_el_change_hook(cpu);
+
+ cs->interrupt_request |= CPU_INTERRUPT_EXITTB;
+
qemu_mutex_unlock_iothread();
return false;
WARNING: multiple messages have this Message-ID (diff)
From: Samuel Ortiz <sameo@linux.intel.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-arm <qemu-arm@nongnu.org>,
Richard Henderson <richard.henderson@linaro.org>,
QEMU Developers <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH 04/13] target: arm: Move all interrupt and exception handlers into their own file
Date: Wed, 28 Nov 2018 16:00:16 +0100 [thread overview]
Message-ID: <20181128150016.GA25839@caravaggio> (raw)
In-Reply-To: <20181128135719.GE4393@caravaggio>
On Wed, Nov 28, 2018 at 02:57:19PM +0100, Samuel Ortiz wrote:
> On Wed, Nov 28, 2018 at 11:39:57AM +0000, Peter Maydell wrote:
> > On Wed, 28 Nov 2018 at 10:40, Samuel Ortiz <sameo@linux.intel.com> wrote:
> > > Given that this piece of code effectively builds a dependency to TCG
> > > from the KVM code, I see a few solutions but I need your input here. We
> > > could:
> > >
> > > - Decide we don't want to support --disable-tcg for ARM. We'd then carry
> > > this patch serie from the NEMU code repo. Worst case scenario, at
> > > least for us.
> > > - Manage to implement exception injection from userspace without TCG.
> > > Would it even be possible?
> > > - Offload exception injections back to the kernel in those cases. I feel
> > > this would be the cleanest solution but may need kernel changes.
> >
> > The kernel folk were firmly against 3, IIRC, but you can go
> > and have the discussion if you like.
> >
> > I don't really see what the problem is. This is just a bit
> > of code that's used by both TCG and KVM. Therefore it goes
> > in the binary whether TCG is enabled or not. Other functions
> > and bits of code are TCG only and therefore don't go in a
> > KVM-only binary.
> Keeping this code with --disable-tcg means:
>
> Keep arm_cpu_do_interrupt -> Keep check_for_semihosting -> Keep the arm
> instruction loading code -> Keep a large chunk of the TCG core code
> itself. Does that dependency chain looks fine to you?
A simplified, aarch64 specific arm_cpu_do_interrupt() implementation
would not pull the TCG code in. Something like:
diff --git a/target/arm/kvm64.c b/target/arm/kvm64.c
index 0a502091e7..eba7ced564 100644
--- a/target/arm/kvm64.c
+++ b/target/arm/kvm64.c
@@ -1034,7 +1034,6 @@ bool kvm_arm_handle_debug(CPUState *cs, struct kvm_debug_exit_arch *debug_exit)
{
int hsr_ec = syn_get_ec(debug_exit->hsr);
ARMCPU *cpu = ARM_CPU(cs);
- CPUClass *cc = CPU_GET_CLASS(cs);
CPUARMState *env = &cpu->env;
/* Ensure PC is synchronised */
@@ -1088,7 +1087,22 @@ bool kvm_arm_handle_debug(CPUState *cs, struct kvm_debug_exit_arch *debug_exit)
env->exception.vaddress = debug_exit->far;
env->exception.target_el = 1;
qemu_mutex_lock_iothread();
- cc->do_interrupt(cs);
+
+ /* Hooks may change global state so BQL should be held, also the
+ * BQL needs to be held for any modification of
+ * cs->interrupt_request.
+ */
+ g_assert(qemu_mutex_iothread_locked());
+
+ arm_call_pre_el_change_hook(cpu);
+
+ assert(!excp_is_internal(cs->exception_index));
+ arm_cpu_do_interrupt_aarch64(cs);
+
+ arm_call_el_change_hook(cpu);
+
+ cs->interrupt_request |= CPU_INTERRUPT_EXITTB;
+
qemu_mutex_unlock_iothread();
return false;
next prev parent reply other threads:[~2018-11-28 15:01 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-13 16:52 [Qemu-arm] [PATCH 00/13] Support disabling TCG on ARM Samuel Ortiz
2018-11-13 16:52 ` [Qemu-devel] " Samuel Ortiz
2018-11-13 16:52 ` [Qemu-arm] [PATCH 01/13] target: arm: Add copyright boilerplate Samuel Ortiz
2018-11-13 16:52 ` [Qemu-devel] " Samuel Ortiz
2018-11-13 16:58 ` [Qemu-arm] " Peter Maydell
2018-11-13 16:58 ` [Qemu-devel] " Peter Maydell
2018-11-13 17:00 ` Philippe Mathieu-Daudé
2018-11-13 17:00 ` Philippe Mathieu-Daudé
2018-11-13 23:29 ` [Qemu-arm] " Samuel Ortiz
2018-11-13 23:29 ` Samuel Ortiz
2018-11-13 16:52 ` [Qemu-devel] [PATCH 02/13] target: arm: Remove unused headers Samuel Ortiz
2018-11-13 16:52 ` Samuel Ortiz
2018-11-13 17:01 ` [Qemu-arm] " Peter Maydell
2018-11-13 17:01 ` [Qemu-devel] " Peter Maydell
2018-11-13 18:02 ` [Qemu-arm] " Philippe Mathieu-Daudé
2018-11-13 18:02 ` [Qemu-devel] " Philippe Mathieu-Daudé
2018-11-13 18:07 ` [Qemu-arm] " Peter Maydell
2018-11-13 18:07 ` [Qemu-devel] " Peter Maydell
2018-11-13 18:10 ` Philippe Mathieu-Daudé
2018-11-13 18:10 ` Philippe Mathieu-Daudé
2018-11-13 23:28 ` [Qemu-arm] " Samuel Ortiz
2018-11-13 23:28 ` [Qemu-devel] " Samuel Ortiz
2018-11-13 16:52 ` [Qemu-devel] [PATCH 03/13] target: arm: Move all v7m helpers into their own file Samuel Ortiz
2018-11-13 16:52 ` Samuel Ortiz
2018-11-20 13:54 ` [Qemu-arm] " Peter Maydell
2018-11-20 13:54 ` [Qemu-devel] " Peter Maydell
2018-11-20 19:26 ` [Qemu-arm] " Philippe Mathieu-Daudé
2018-11-20 19:26 ` [Qemu-devel] " Philippe Mathieu-Daudé
2018-11-27 11:45 ` [Qemu-arm] " Samuel Ortiz
2018-11-27 11:45 ` Samuel Ortiz
2018-11-13 16:52 ` [Qemu-devel] [PATCH 04/13] target: arm: Move all interrupt and exception handlers " Samuel Ortiz
2018-11-13 16:52 ` Samuel Ortiz
2018-11-20 13:45 ` [Qemu-arm] " Peter Maydell
2018-11-20 13:45 ` [Qemu-devel] " Peter Maydell
2018-11-27 15:35 ` [Qemu-arm] " Samuel Ortiz
2018-11-27 15:35 ` [Qemu-devel] " Samuel Ortiz
2018-11-27 15:46 ` [Qemu-arm] " Peter Maydell
2018-11-27 15:46 ` [Qemu-devel] " Peter Maydell
2018-11-28 10:40 ` Samuel Ortiz
2018-11-28 11:39 ` Peter Maydell
2018-11-28 13:57 ` Samuel Ortiz
2018-11-28 15:00 ` Samuel Ortiz [this message]
2018-11-28 15:00 ` Samuel Ortiz
2018-11-20 14:03 ` [Qemu-arm] " Peter Maydell
2018-11-20 14:03 ` [Qemu-devel] " Peter Maydell
2018-11-13 16:52 ` [Qemu-arm] [PATCH 05/13] target: arm: Move the DC ZVA helper into op_helper Samuel Ortiz
2018-11-13 16:52 ` [Qemu-devel] " Samuel Ortiz
2018-11-13 16:52 ` [Qemu-devel] [PATCH 06/13] target: arm: Make ARM TLB filling routine static Samuel Ortiz
2018-11-13 16:52 ` Samuel Ortiz
2018-11-13 16:52 ` [Qemu-arm] [PATCH 07/13] target: arm: Remove the LDST headers Samuel Ortiz
2018-11-13 16:52 ` [Qemu-devel] " Samuel Ortiz
2018-11-20 14:00 ` [Qemu-arm] " Peter Maydell
2018-11-20 14:00 ` [Qemu-devel] " Peter Maydell
2018-11-13 16:52 ` [Qemu-arm] [PATCH 08/13] target: arm: Move all VFP helpers into their own file Samuel Ortiz
2018-11-13 16:52 ` [Qemu-devel] " Samuel Ortiz
2018-11-13 16:52 ` [Qemu-arm] [PATCH 09/13] target: arm: Move CPU state dumping routines to helper.c Samuel Ortiz
2018-11-13 16:52 ` [Qemu-devel] " Samuel Ortiz
2018-11-13 16:52 ` [Qemu-arm] [PATCH 10/13] target: arm: Move watchpoints APIs " Samuel Ortiz
2018-11-13 16:52 ` [Qemu-devel] " Samuel Ortiz
2018-11-13 16:52 ` [Qemu-arm] [PATCH 11/13] target: arm: Define TCG dependent functions when TCG is enabled Samuel Ortiz
2018-11-13 16:52 ` [Qemu-devel] " Samuel Ortiz
2018-11-20 14:09 ` [Qemu-arm] " Peter Maydell
2018-11-20 14:09 ` [Qemu-devel] " Peter Maydell
2018-11-13 16:52 ` [Qemu-arm] [PATCH 12/13] target: arm: Makefile cleanup Samuel Ortiz
2018-11-13 16:52 ` [Qemu-devel] " Samuel Ortiz
2018-11-13 16:52 ` [Qemu-devel] [PATCH 13/13] target: arm: Do not build TCG objects when TCG is off Samuel Ortiz
2018-11-13 16:52 ` Samuel Ortiz
2018-11-14 11:56 ` [Qemu-devel] [PATCH 00/13] Support disabling TCG on ARM no-reply
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=20181128150016.GA25839@caravaggio \
--to=sameo@linux.intel.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
/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.