GIC and virtual timer context must be saved when the domain suspends. This is done by moving the respective code in ctxt_switch_from() before the return that happens if the domain suspended.
Signed-off-by: Mirela Simonovic <mirela.simono...@aggios.com> Signed-off-by: Saeed Nowshadi <saeed.nowsh...@xilinx.com> --- xen/arch/arm/domain.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c index 7f8105465c..bebe3238e8 100644 --- a/xen/arch/arm/domain.c +++ b/xen/arch/arm/domain.c @@ -97,6 +97,13 @@ static void ctxt_switch_from(struct vcpu *p) if ( is_idle_vcpu(p) ) return; + /* VGIC */ + gic_save_state(p); + + /* Arch timer */ + p->arch.cntkctl = READ_SYSREG32(CNTKCTL_EL1); + virt_timer_save(p); + /* VCPU's context should not be saved if its domain is suspended */ if ( p->domain->is_shut_down && (p->domain->shutdown_code == SHUTDOWN_suspend) ) @@ -115,10 +122,6 @@ static void ctxt_switch_from(struct vcpu *p) p->arch.tpidrro_el0 = READ_SYSREG(TPIDRRO_EL0); p->arch.tpidr_el1 = READ_SYSREG(TPIDR_EL1); - /* Arch timer */ - p->arch.cntkctl = READ_SYSREG32(CNTKCTL_EL1); - virt_timer_save(p); - if ( is_32bit_domain(p->domain) && cpu_has_thumbee ) { p->arch.teecr = READ_SYSREG32(TEECR32_EL1); @@ -170,9 +173,6 @@ static void ctxt_switch_from(struct vcpu *p) /* VFP */ vfp_save_state(p); - /* VGIC */ - gic_save_state(p); - isb(); } -- 2.13.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel