All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] target/arm: adjust program counter for wfi exception in AArch32
@ 2020-01-10 18:02 Jeff Kubascik
  2020-01-10 19:19 ` no-reply
  2020-01-14  2:41 ` Richard Henderson
  0 siblings, 2 replies; 4+ messages in thread
From: Jeff Kubascik @ 2020-01-10 18:02 UTC (permalink / raw)
  To: Peter Maydell, qemu-arm, qemu-devel; +Cc: Stewart Hildebrand, Jarvis Roach

The wfi instruction can be configured to be trapped by a higher exception
level, such as the EL2 hypervisor. When the instruction is trapped, the
program counter should contain the address of the wfi instruction that
caused the exception. The program counter is adjusted for this in the wfi op
helper function.

However, this correction is done to env->pc, which only applies to AArch64
mode. For AArch32, the program counter is stored in env->regs[15]. This
adds an if-else statement to modify the correct program counter location
based on the the current CPU mode.

Signed-off-by: Jeff Kubascik <jeff.kubascik@dornerworks.com>
---
Hello,

I am using the ARMv8 version of QEMU to run the Xen hypervisor with a guest
virtual machine compiled for AArch32/Thumb code. I have noticed that when
the AArch32 guest VM executes the wfi instruction, the hypervisor trap of
the wfi instruction sees the program counter contain the address of the
instruction following the wfi. This does not occur for an AARch64 guest VM;
in this case, the program counter contains the address of the wfi
instruction. I am confident the correct behavior in both cases is for the
program counter to contain the address of the wfi instruction, as this works
on actual hardware (Xilinx Zynq UltraScale+ MPSoC).

I have tested the above patch and it works for Xen with both an AArch64
guest (Linux) and an AArch32 guest (RTEMS). I'm still getting accustomed to
the QEMU code base, so it may not be correct. Any feedback would be greatly
appreciated.

Sincerely,
Jeff Kubascik
---
 target/arm/op_helper.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/target/arm/op_helper.c b/target/arm/op_helper.c
index e5a346cb87..7295645854 100644
--- a/target/arm/op_helper.c
+++ b/target/arm/op_helper.c
@@ -295,7 +295,11 @@ void HELPER(wfi)(CPUARMState *env, uint32_t insn_len)
     }
 
     if (target_el) {
-        env->pc -= insn_len;
+        if (env->aarch64)
+            env->pc -= insn_len;
+        else
+            env->regs[15] -= insn_len;
+
         raise_exception(env, EXCP_UDEF, syn_wfx(1, 0xe, 0, insn_len == 2),
                         target_el);
     }
-- 
2.17.1



^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] target/arm: adjust program counter for wfi exception in AArch32
  2020-01-10 18:02 [PATCH] target/arm: adjust program counter for wfi exception in AArch32 Jeff Kubascik
@ 2020-01-10 19:19 ` no-reply
  2020-01-14  2:41 ` Richard Henderson
  1 sibling, 0 replies; 4+ messages in thread
From: no-reply @ 2020-01-10 19:19 UTC (permalink / raw)
  To: jeff.kubascik
  Cc: Stewart.Hildebrand, peter.maydell, qemu-arm, qemu-devel, Jarvis.Roach

Patchew URL: https://patchew.org/QEMU/20200110180211.29025-1-jeff.kubascik@dornerworks.com/



Hi,

This series seems to have some coding style problems. See output below for
more information:

Subject: [PATCH] target/arm: adjust program counter for wfi exception in AArch32
Type: series
Message-id: 20200110180211.29025-1-jeff.kubascik@dornerworks.com

=== TEST SCRIPT BEGIN ===
#!/bin/bash
git rev-parse base > /dev/null || exit 0
git config --local diff.renamelimit 0
git config --local diff.renames True
git config --local diff.algorithm histogram
./scripts/checkpatch.pl --mailback base..
=== TEST SCRIPT END ===

Switched to a new branch 'test'
800339c target/arm: adjust program counter for wfi exception in AArch32

=== OUTPUT BEGIN ===
ERROR: braces {} are necessary for all arms of this statement
#30: FILE: target/arm/op_helper.c:298:
+        if (env->aarch64)
[...]
+        else
[...]

total: 1 errors, 0 warnings, 12 lines checked

Commit 800339c7aaeb (target/arm: adjust program counter for wfi exception in AArch32) has style problems, please review.  If any of these errors
are false positives report them to the maintainer, see
CHECKPATCH in MAINTAINERS.
=== OUTPUT END ===

Test command exited with code: 1


The full log is available at
http://patchew.org/logs/20200110180211.29025-1-jeff.kubascik@dornerworks.com/testing.checkpatch/?type=message.
---
Email generated automatically by Patchew [https://patchew.org/].
Please send your feedback to patchew-devel@redhat.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] target/arm: adjust program counter for wfi exception in AArch32
  2020-01-10 18:02 [PATCH] target/arm: adjust program counter for wfi exception in AArch32 Jeff Kubascik
  2020-01-10 19:19 ` no-reply
@ 2020-01-14  2:41 ` Richard Henderson
  2020-01-14 13:22   ` Jeff Kubascik
  1 sibling, 1 reply; 4+ messages in thread
From: Richard Henderson @ 2020-01-14  2:41 UTC (permalink / raw)
  To: Jeff Kubascik, Peter Maydell, qemu-arm, qemu-devel
  Cc: Stewart Hildebrand, Jarvis Roach

On 1/10/20 8:02 AM, Jeff Kubascik wrote:
> -        env->pc -= insn_len;
> +        if (env->aarch64)
> +            env->pc -= insn_len;
> +        else
> +            env->regs[15] -= insn_len;

QEMU requires all braces.  See CODING_STYLE.

Otherwise,
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] target/arm: adjust program counter for wfi exception in AArch32
  2020-01-14  2:41 ` Richard Henderson
@ 2020-01-14 13:22   ` Jeff Kubascik
  0 siblings, 0 replies; 4+ messages in thread
From: Jeff Kubascik @ 2020-01-14 13:22 UTC (permalink / raw)
  To: Richard Henderson, Peter Maydell, qemu-arm, qemu-devel
  Cc: Stewart Hildebrand, Jarvis Roach

On 1/13/2020 9:41 PM, Richard Henderson wrote:
> On 1/10/20 8:02 AM, Jeff Kubascik wrote:
>> -        env->pc -= insn_len;
>> +        if (env->aarch64)
>> +            env->pc -= insn_len;
>> +        else
>> +            env->regs[15] -= insn_len;
> 
> QEMU requires all braces.  See CODING_STYLE.

I received an automated email from Patchew regarding the coding style issue. I
have submitted a v2 of the patch with this correction yesterday.

> Otherwise,
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> 
> 
> r~
> 

Thanks!
Jeff Kubascik


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-01-14 13:22 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-10 18:02 [PATCH] target/arm: adjust program counter for wfi exception in AArch32 Jeff Kubascik
2020-01-10 19:19 ` no-reply
2020-01-14  2:41 ` Richard Henderson
2020-01-14 13:22   ` Jeff Kubascik

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.