On Mon, 13 Jan 2020 at 15:59, Jeff Kubascik <jeff.kubas...@dornerworks.com> wrote: > > 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.kubas...@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 > > Changes in v2: > - Added braces {} to if-else statement, per patchew feedback > ---
Applied to target-arm.next, thanks. -- PMM