Messages in this thread | | | Date | Fri, 1 Sep 2017 14:24:54 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH 2/2] sched/idle: Use spin loop primitives for polling idle |
| |
On Sun, Aug 20, 2017 at 07:25:02PM +1000, Nicholas Piggin wrote: > Signed-off-by: Nicholas Piggin <npiggin@gmail.com> > --- > kernel/sched/idle.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c > index 6c23e30c0e5c..b884980da8ef 100644 > --- a/kernel/sched/idle.c > +++ b/kernel/sched/idle.c > @@ -11,6 +11,7 @@ > #include <linux/stackprotector.h> > #include <linux/suspend.h> > #include <linux/livepatch.h> > +#include <linux/processor.h> > > #include <asm/tlb.h> > > @@ -64,9 +65,13 @@ static noinline int __cpuidle cpu_idle_poll(void) > trace_cpu_idle_rcuidle(0, smp_processor_id()); > local_irq_enable(); > stop_critical_timings(); > + > + spin_begin(); > while (!tif_need_resched() && > (cpu_idle_force_poll || tick_check_broadcast_expired())) > - cpu_relax(); > + spin_cpu_relax(); > + spin_end();
Do we want at least one tif_need_resched() check before we drop into low prio mode?
> + > start_critical_timings(); > trace_cpu_idle_rcuidle(PWR_EVENT_EXIT, smp_processor_id()); > rcu_idle_exit(); > -- > 2.13.3 >
| |