mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 01:33:56 -06:00
target-arm: kvm: Differentiate registers based on write-back levels
Some registers like the CNTVCT register should only be written to the kernel as part of machine initialization or on vmload operations, but never during runtime, as this can potentially make time go backwards or create inconsistent time observations between VCPUs. Introduce a list of registers that should not be written back at runtime and check this list on syncing the register state to the KVM state. Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org> Message-id: 1437046488-10773-1-git-send-email-christoffer.dall@linaro.org [PMM: tweaked a few comments, added the new argument to the stub write_list_to_kvmstate() in target-arm/kvm-stub.c] Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
a1bc040dab
commit
4b7a6bf402
6 changed files with 76 additions and 6 deletions
|
@ -409,7 +409,7 @@ bool write_kvmstate_to_list(ARMCPU *cpu)
|
|||
return ok;
|
||||
}
|
||||
|
||||
bool write_list_to_kvmstate(ARMCPU *cpu)
|
||||
bool write_list_to_kvmstate(ARMCPU *cpu, int level)
|
||||
{
|
||||
CPUState *cs = CPU(cpu);
|
||||
int i;
|
||||
|
@ -421,6 +421,10 @@ bool write_list_to_kvmstate(ARMCPU *cpu)
|
|||
uint32_t v32;
|
||||
int ret;
|
||||
|
||||
if (kvm_arm_cpreg_level(regidx) > level) {
|
||||
continue;
|
||||
}
|
||||
|
||||
r.id = regidx;
|
||||
switch (regidx & KVM_REG_SIZE_MASK) {
|
||||
case KVM_REG_SIZE_U32:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue