Auger Eric <eric.au...@redhat.com> writes:
> Hi Peter, Alex, > On 2/14/19 8:05 PM, Peter Maydell wrote: >> At the moment the Arm implementations of kvm_arch_{get,put}_registers() >> don't support having QEMU change the values of system registers >> (aka coprocessor registers for AArch32). This is because although >> kvm_arch_get_registers() calls write_list_to_cpustate() to >> update the CPU state struct fields (so QEMU code can read the >> values in the usual way), kvm_arch_put_registers() does not >> call write_cpustate_to_list(), meaning that any changes to >> the CPU state struct fields will not be passed back to KVM. >> >> The rationale for this design is documented in a comment in the >> AArch32 kvm_arch_put_registers() -- writing the values in the >> cpregs list into the CPU state struct is "lossy" because the >> write of a register might not succeed, and so if we blindly >> copy the CPU state values back again we will incorrectly >> change register values for the guest. The assumption was that >> no QEMU code would need to write to the registers. >> >> However, when we implemented debug support for KVM guests, we >> broke that assumption: the code to handle "set the guest up >> to take a breakpoint exception" does so by updating various >> guest registers including ESR_EL1. >> >> Support this by making kvm_arch_put_registers() synchronize >> CPU state back into the list. We sync only those registers >> where the initial write succeeds, which should be sufficient. >> >> Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> >> Reviewed-by: Alex Bennée <alex.ben...@linaro.org> >> Tested-by: Alex Bennée <alex.ben...@linaro.org> >> Tested-by: Dongjiu Geng <gengdong...@huawei.com> > This commit introduces a regression when running with EDK2 FW: > > I get the following traces: > > error: kvm run failed Function not implemented > PC=000000013f5a6208 X00=00000000404003c4 X01=000000000000003a Any chance of attaching to the gdbstub and an x/10i around that PC? -- Alex Bennée