From 73e6b2e07ae8195ae8cf633d6f7f458e791c55fa Mon Sep 17 00:00:00 2001 From: Alison Felizzi Date: Tue, 27 Jun 2023 14:23:46 +1000 Subject: [PATCH] arm: Save VCPU virt timer registers when disabled The virtual timer registers managed within a VCPU context are not saved if written to, if the VCPU in question is disabled. This results in any updates to the virtual timer registers being lost/written over when that VCPU is next scheduled and context switched in. Co-authored-by: Gerwin Klein Signed-off-by: Kent McLeod Signed-off-by: Gerwin Klein --- include/arch/arm/armv/armv7-a/armv/vcpu.h | 5 +++++ include/arch/arm/armv/armv8-a/64/armv/vcpu.h | 3 +++ 2 files changed, 8 insertions(+) diff --git a/include/arch/arm/armv/armv7-a/armv/vcpu.h b/include/arch/arm/armv/armv7-a/armv/vcpu.h index 98dd354de..a318bf352 100644 --- a/include/arch/arm/armv/armv7-a/armv/vcpu.h +++ b/include/arch/arm/armv/armv7-a/armv/vcpu.h @@ -848,6 +848,11 @@ static inline bool_t vcpu_reg_saved_when_disabled(word_t field) { switch (field) { case seL4_VCPUReg_SCTLR: + case seL4_VCPUReg_CNTV_CTL: + case seL4_VCPUReg_CNTV_CVALhigh: + case seL4_VCPUReg_CNTV_CVALlow: + case seL4_VCPUReg_CNTVOFFhigh: + case seL4_VCPUReg_CNTVOFFlow: return true; default: return false; diff --git a/include/arch/arm/armv/armv8-a/64/armv/vcpu.h b/include/arch/arm/armv/armv8-a/64/armv/vcpu.h index b2d2f7843..a0804c692 100644 --- a/include/arch/arm/armv/armv8-a/64/armv/vcpu.h +++ b/include/arch/arm/armv/armv8-a/64/armv/vcpu.h @@ -744,6 +744,9 @@ static inline bool_t vcpu_reg_saved_when_disabled(word_t field) switch (field) { case seL4_VCPUReg_SCTLR: case seL4_VCPUReg_CNTV_CTL: + case seL4_VCPUReg_CNTV_CVAL: + case seL4_VCPUReg_CNTVOFF: + case seL4_VCPUReg_CNTKCTL_EL1: #ifdef CONFIG_HAVE_FPU case seL4_VCPUReg_CPACR: #endif