On Fri, Jun 28, 2019 at 10:20:56AM -0700, Paul E. McKenney wrote: > On Fri, Jun 28, 2019 at 06:04:08PM +0200, Peter Zijlstra wrote: > > On Fri, Jun 28, 2019 at 08:54:04AM -0700, Paul E. McKenney wrote: > > > Thank you! Plus it looks like scheduler_ipi() takes an early exit if > > > ->wake_list is empty, regardless of TIF_NEED_RESCHED, right? > > > > Yes, TIF_NEED_RESCHED is checked in the interrupt return path. > > OK, got it. So the following sequence would be a valid way to get the > scheduler's attention on the current CPU shortly after interrupts > are re-enabled, even if the current CPU is already holding some > rq or pi locks, correct? > > set_tsk_need_resched(current); > set_preempt_need_resched(); > smp_send_reschedule(smp_processor_id()); I'm not sure if smp_send_reschedule() can be used as self-IPI, some hardware doesn't particularly like that IIRC. That is, hardware might only have interfaces to IPI _other_ CPUs, but not self. The normal scheduler code takes care to not call smp_send_reschedule() to self.