On Wed, 12 Apr 2017 16:48:59 -0700
"Paul E. McKenney" <paul...@linux.vnet.ibm.com> wrote:
> 
> I don't understand why schedule_idle() needs a loop given that
> schedule_preempt_disabled() doesn't have one, but other than

But it does:

void __sched schedule_preempt_disabled(void)
{
        sched_preempt_enable_no_resched();
        schedule();
        preempt_disable();
}

Where we have:

asmlinkage __visible void __sched schedule(void)
{
        struct task_struct *tsk = current;

        sched_submit_work(tsk);
        do {
                preempt_disable();
                __schedule(false);
                sched_preempt_enable_no_resched();
        } while (need_resched());
}

Which makes:

void __sched schedule_preempt_disabled(void)
{
        struct task_struct *tsk  = current;

        scehdule_preempt_enable_no_resched();
        sched_submit_work(tsk);
        do {
                preempt_disable();
                __schedule(false);
                schedule_preempt_enable_no_resched();
        } while (need_resched());
        preempt_disable();
}

My schedule_idle() is simply schedule_preempt_disabled() without the
change in preemption and no call to sched_submit_work().


> that, for whatever it is worth, it looks good to me.
> 

Does this mean I can change the Cc: to Acked-by: ?

-- Steve


> > +void __sched schedule_idle(void)
> > +{
> > +   do {
> > +           __schedule(false);
> > +   } while (need_resched());
> > +}
> > +

Reply via email to