|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 9/9] xen/arm: initialize virt_timer and phys_timer with the same values on all vcpus
Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
---
xen/arch/arm/vtimer.c | 18 ++++++++++++++----
xen/include/asm-arm/domain.h | 26 +++++++++++++++++---------
2 files changed, 31 insertions(+), 13 deletions(-)
diff --git a/xen/arch/arm/vtimer.c b/xen/arch/arm/vtimer.c
index 2444851..49858e7 100644
--- a/xen/arch/arm/vtimer.c
+++ b/xen/arch/arm/vtimer.c
@@ -46,20 +46,30 @@ static void virt_timer_expired(void *data)
int vcpu_vtimer_init(struct vcpu *v)
{
+ struct vtimer_base *b = &v->domain->arch.phys_timer_base;
struct vtimer *t = &v->arch.phys_timer;
+ if ( !b->offset )
+ b->offset = NOW();
+ if ( !b->cval )
+ b->cval = NOW();
init_timer(&t->timer, phys_timer_expired, t, v->processor);
t->ctl = 0;
- t->offset = NOW();
- t->cval = NOW();
+ t->offset = b->offset;
+ t->cval = b->cval;
t->irq = 30;
t->v = v;
+ b = &v->domain->arch.virt_timer_base;
+ if ( !b->offset )
+ b->offset = READ_SYSREG64(CNTVCT_EL0) + READ_SYSREG64(CNTVOFF_EL2);
+ if ( !b->cval )
+ b->cval = 0;
t = &v->arch.virt_timer;
init_timer(&t->timer, virt_timer_expired, t, v->processor);
t->ctl = 0;
- t->offset = READ_SYSREG64(CNTVCT_EL0) + READ_SYSREG64(CNTVOFF_EL2);
- t->cval = 0;
+ t->offset = b->offset;
+ t->cval = b->cval;
t->irq = 27;
t->v = v;
diff --git a/xen/include/asm-arm/domain.h b/xen/include/asm-arm/domain.h
index 85b5d40..410b8e7 100644
--- a/xen/include/asm-arm/domain.h
+++ b/xen/include/asm-arm/domain.h
@@ -47,6 +47,20 @@ enum domain_type {
#define is_pv64_domain(d) (0)
#endif
+struct vtimer {
+ struct vcpu *v;
+ int irq;
+ struct timer timer;
+ uint32_t ctl;
+ uint64_t offset;
+ uint64_t cval;
+};
+
+struct vtimer_base {
+ uint64_t offset;
+ uint64_t cval;
+};
+
struct arch_domain
{
#ifdef CONFIG_ARM_64
@@ -61,6 +75,9 @@ struct arch_domain
uint32_t vpidr;
register_t vmpidr;
+ struct vtimer_base phys_timer_base;
+ struct vtimer_base virt_timer_base;
+
struct {
/*
* Covers access to other members of this struct _except_ for
@@ -91,15 +108,6 @@ struct arch_domain
} __cacheline_aligned;
-struct vtimer {
- struct vcpu *v;
- int irq;
- struct timer timer;
- uint32_t ctl;
- uint64_t offset;
- uint64_t cval;
-};
-
struct arch_vcpu
{
struct {
--
1.7.2.5
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |