On Thu, Sep 22, 2016 at 02:25:01PM -0400, Mikulas Patocka wrote: > I've found a document that says that cond_resched() is needed on > preemptible kernels to mark RCU quiescent states: > > https://lwn.net/Articles/603252/ > > Paul, is cond_resched() still needed on current RCU implementation? Or not? It can be if you loop in the kernel for a very long time. But cond_resched_rcu_qs() is instead needed in cases where there is only one runnable non-idle non-nohz task on a given CPU. Thanx, Paul > Mikulas > > > > On Thu, 22 Sep 2016, tip-bot for Peter Zijlstra wrote: > > > Commit-ID: 35a773a07926a22bf19d77ee00024522279c4e68 > > Gitweb: http://git.kernel.org/tip/35a773a07926a22bf19d77ee00024522279c4e68 > > Author: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > > AuthorDate: Mon, 19 Sep 2016 12:57:53 +0200 > > Committer: Ingo Molnar <mingo@xxxxxxxxxx> > > CommitDate: Thu, 22 Sep 2016 14:53:46 +0200 > > > > sched/core: Avoid _cond_resched() for PREEMPT=y > > > > On fully preemptible kernels _cond_resched() is pointless, so avoid > > emitting any code for it. > > > > Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> > > Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > > Cc: Mikulas Patocka <mpatocka@xxxxxxxxxx> > > Cc: Oleg Nesterov <oleg@xxxxxxxxxx> > > Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > > Cc: linux-kernel@xxxxxxxxxxxxxxx > > Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx> > > --- > > include/linux/sched.h | 4 ++++ > > kernel/sched/core.c | 2 ++ > > 2 files changed, 6 insertions(+) > > > > diff --git a/include/linux/sched.h b/include/linux/sched.h > > index f00ee8e..b99fcd1 100644 > > --- a/include/linux/sched.h > > +++ b/include/linux/sched.h > > @@ -3209,7 +3209,11 @@ static inline int signal_pending_state(long state, struct task_struct *p) > > * cond_resched_lock() will drop the spinlock before scheduling, > > * cond_resched_softirq() will enable bhs before scheduling. > > */ > > +#ifndef CONFIG_PREEMPT > > extern int _cond_resched(void); > > +#else > > +static inline int _cond_resched(void) { return 0; } > > +#endif > > > > #define cond_resched() ({ \ > > ___might_sleep(__FILE__, __LINE__, 0); \ > > diff --git a/kernel/sched/core.c b/kernel/sched/core.c > > index b2ec53c..d7babcc 100644 > > --- a/kernel/sched/core.c > > +++ b/kernel/sched/core.c > > @@ -4883,6 +4883,7 @@ SYSCALL_DEFINE0(sched_yield) > > return 0; > > } > > > > +#ifndef CONFIG_PREEMPT > > int __sched _cond_resched(void) > > { > > if (should_resched(0)) { > > @@ -4892,6 +4893,7 @@ int __sched _cond_resched(void) > > return 0; > > } > > EXPORT_SYMBOL(_cond_resched); > > +#endif > > > > /* > > * __cond_resched_lock() - if a reschedule is pending, drop the given lock, > > > -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |