|
[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 |