[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 01/18] xen/arm: timer: replace timer_dt_irq by timer_get_irq
The function is nearly only used to retrieve the IRQ number. There is one place where the IRQ type is used (in domain_build.c) but as the timer IRQ is virtualised for guest we might not have the same property (e.g active-low level sensitive interrupt). Replace timer_dt_irq by timer_get_irq which will return the IRQ number. Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx> --- Changes in v2: - Patch added --- xen/arch/arm/domain_build.c | 23 +++++++++++++---------- xen/arch/arm/time.c | 4 ++-- xen/arch/arm/vtimer.c | 4 ++-- xen/include/asm-arm/time.h | 4 ++-- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c index 502db84..2035390 100644 --- a/xen/arch/arm/domain_build.c +++ b/xen/arch/arm/domain_build.c @@ -620,7 +620,7 @@ static int make_timer_node(const struct domain *d, void *fdt, u32 len; const void *compatible; int res; - const struct dt_irq *irq; + unsigned int irq; gic_interrupt_t intrs[3]; DPRINT("Create timer node\n"); @@ -647,17 +647,20 @@ static int make_timer_node(const struct domain *d, void *fdt, if ( res ) return res; - irq = timer_dt_irq(TIMER_PHYS_SECURE_PPI); - DPRINT(" Secure interrupt %u\n", irq->irq); - set_interrupt_ppi(intrs[0], irq->irq, 0xf, irq->type); + /* The timer IRQ is emulated by Xen. It always exposes an active-low + * level-sensitive interrupt */ - irq = timer_dt_irq(TIMER_PHYS_NONSECURE_PPI); - DPRINT(" Non secure interrupt %u\n", irq->irq); - set_interrupt_ppi(intrs[1], irq->irq, 0xf, irq->type); + irq = timer_get_irq(TIMER_PHYS_SECURE_PPI); + DPRINT(" Secure interrupt %u\n", irq); + set_interrupt_ppi(intrs[0], irq, 0xf, DT_IRQ_TYPE_LEVEL_LOW); - irq = timer_dt_irq(TIMER_VIRT_PPI); - DPRINT(" Virt interrupt %u\n", irq->irq); - set_interrupt_ppi(intrs[2], irq->irq, 0xf, irq->type); + irq = timer_get_irq(TIMER_PHYS_NONSECURE_PPI); + DPRINT(" Non secure interrupt %u\n", irq); + set_interrupt_ppi(intrs[1], irq, 0xf, DT_IRQ_TYPE_LEVEL_LOW); + + irq = timer_get_irq(TIMER_VIRT_PPI); + DPRINT(" Virt interrupt %u\n", irq); + set_interrupt_ppi(intrs[2], irq, 0xf, DT_IRQ_TYPE_LEVEL_LOW); res = fdt_property_interrupts(fdt, intrs, 3); if ( res ) diff --git a/xen/arch/arm/time.c b/xen/arch/arm/time.c index 8a55016..2db6148 100644 --- a/xen/arch/arm/time.c +++ b/xen/arch/arm/time.c @@ -50,11 +50,11 @@ unsigned long __read_mostly cpu_khz; /* CPU clock frequency in kHz. */ static struct dt_irq timer_irq[MAX_TIMER_PPI]; -const struct dt_irq *timer_dt_irq(enum timer_ppi ppi) +unsigned int timer_get_irq(enum timer_ppi ppi) { ASSERT(ppi >= TIMER_PHYS_SECURE_PPI && ppi < MAX_TIMER_PPI); - return &timer_irq[ppi]; + return timer_irq[ppi].irq; } /*static inline*/ s_time_t ticks_to_ns(uint64_t ticks) diff --git a/xen/arch/arm/vtimer.c b/xen/arch/arm/vtimer.c index 5603702..4a944dcf 100644 --- a/xen/arch/arm/vtimer.c +++ b/xen/arch/arm/vtimer.c @@ -64,7 +64,7 @@ int vcpu_vtimer_init(struct vcpu *v) t->ctl = 0; t->cval = NOW(); t->irq = d0 - ? timer_dt_irq(TIMER_PHYS_NONSECURE_PPI)->irq + ? timer_get_irq(TIMER_PHYS_NONSECURE_PPI) : GUEST_TIMER_PHYS_NS_PPI; t->v = v; @@ -72,7 +72,7 @@ int vcpu_vtimer_init(struct vcpu *v) init_timer(&t->timer, virt_timer_expired, t, v->processor); t->ctl = 0; t->irq = d0 - ? timer_dt_irq(TIMER_VIRT_PPI)->irq + ? timer_get_irq(TIMER_VIRT_PPI) : GUEST_TIMER_VIRT_PPI; t->v = v; diff --git a/xen/include/asm-arm/time.h b/xen/include/asm-arm/time.h index d10c737..9bbab0b 100644 --- a/xen/include/asm-arm/time.h +++ b/xen/include/asm-arm/time.h @@ -22,8 +22,8 @@ enum timer_ppi MAX_TIMER_PPI = 4, }; -/* Get one of the timer IRQ description */ -const struct dt_irq* timer_dt_irq(enum timer_ppi ppi); +/* Get one of the timer IRQ number */ +unsigned int timer_get_irq(enum timer_ppi ppi); /* Route timer's IRQ on this CPU */ extern void __cpuinit route_timer_interrupt(void); -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |