[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC v2 13/16] hack: arm/domain: simplify context restore from idle vcpu
From: Andrii Anisov <andrii_anisov@xxxxxxxx> Simplify context restore from idle vcpu to the one ran before it. This improves low cpu load but high irq rate use-cases. Signed-off-by: Andrii Anisov <andrii_anisov@xxxxxxxx> --- xen/arch/arm/domain.c | 21 +++++++++++---------- xen/include/xen/sched.h | 1 + 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c index daf7c59..dd97d07 100644 --- a/xen/arch/arm/domain.c +++ b/xen/arch/arm/domain.c @@ -187,9 +187,6 @@ static void ctxt_switch_to(struct vcpu *n) WRITE_SYSREG32(vpidr, VPIDR_EL2); WRITE_SYSREG(n->arch.vmpidr, VMPIDR_EL2); - /* VGIC */ - gic_restore_state(n); - /* VFP */ vfp_restore_state(n); @@ -263,11 +260,6 @@ static void ctxt_switch_to(struct vcpu *n) WRITE_SYSREG(n->arch.csselr, CSSELR_EL1); isb(); - - /* This is could trigger an hardware interrupt from the virtual - * timer. The interrupt needs to be injected into the guest. */ - WRITE_SYSREG32(n->arch.cntkctl, CNTKCTL_EL1); - virt_timer_restore(n); } /* Update per-VCPU guest runstate shared memory area (if registered). */ @@ -302,8 +294,17 @@ static void update_runstate_area(struct vcpu *v) static void schedule_tail(struct vcpu *prev) { ctxt_switch_from(prev); - - ctxt_switch_to(current); + if ( !(is_idle_vcpu(prev) && (prev->prev == current)) ) + ctxt_switch_to(current); + /* VGIC */ + if ( !is_idle_vcpu(current) ) + { + gic_restore_state(current); + WRITE_SYSREG32(current->arch.cntkctl, CNTKCTL_EL1); + virt_timer_restore(current); + } + else + current->prev = prev; local_irq_enable(); diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index 4956a77..8ffdb70 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -272,6 +272,7 @@ struct vcpu struct vpci_vcpu vpci; struct arch_vcpu arch; + struct vcpu *prev; }; /* Per-domain lock can be recursively acquired in fault handlers. */ -- 2.7.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |