[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/5] xen: ARM: suspend the tick (if in use) when going idle.
On Thu, 27 Jul 2017, Dario Faggioli wrote: > Since commit 964fae8ac ("cpuidle: suspend/resume scheduler > tick timer during cpu idle state entry/exit"), if a scheduler > has a periodic tick timer, we stop it when going idle. > > This, however, is only true for x86. Make it true for ARM as > well. > > Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> > --- > Cc: Stefano Stabellini <sstabellini@xxxxxxxxxx> > Cc: Julien Grall <julien.grall@xxxxxxx> > --- > xen/arch/arm/domain.c | 29 ++++++++++++++++++++--------- > 1 file changed, 20 insertions(+), 9 deletions(-) > > diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c > index 2dc8b0a..fce29cb 100644 > --- a/xen/arch/arm/domain.c > +++ b/xen/arch/arm/domain.c > @@ -39,6 +39,25 @@ > > DEFINE_PER_CPU(struct vcpu *, curr_vcpu); > > +static void do_idle(void) > +{ > + unsigned int cpu = smp_processor_id(); > + > + sched_tick_suspend(); > + /* sched_tick_suspend() can raise TIMER_SOFTIRQ. Process it now. */ > + process_pending_softirqs(); > + > + local_irq_disable(); > + if ( cpu_is_haltable(cpu) ) > + { > + dsb(sy); > + wfi(); > + } > + local_irq_enable(); > + > + sched_tick_resume(); > +} > + > void idle_loop(void) > { > unsigned int cpu = smp_processor_id(); > @@ -52,15 +71,7 @@ void idle_loop(void) > if ( unlikely(tasklet_work_to_do(cpu)) ) > do_tasklet(); > else > - { > - local_irq_disable(); > - if ( cpu_is_haltable(cpu) ) > - { > - dsb(sy); > - wfi(); > - } > - local_irq_enable(); > - } > + do_idle(); > > do_softirq(); > /* > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |