Hi,

I noticed this on an older kernel and reproduced it on -rc6: I boot the
(RT) kernel with
        isolcpus=4-15 nohz=on nohz_full=4-15 rcu_nocbs=4-15 rcu_nocb_poll

and compiled a NOHZ_FULL kernel. If I pin a shell onto the isolated CPU
and do nothing then everything seems fine. If I issue commands, this
happens:
   tick_nohz_handler() -> update_process_times() -> rcu_sched_clock_irq()

rcu_sched_clock_irq() invokes rcu_pending() which returns true due to
|         /* Have RCU grace period completed or started?  */
|         if (rcu_seq_current(&rnp->gp_seq) != rdp->gp_seq ||
|             unlikely(READ_ONCE(rdp->gpwrap))) /* outside lock */
|                 return 1;

And it is the first check of the two. Later I see 
|         /* Is the RCU core waiting for a quiescent state from this CPU? */
|         gp_in_progress = rcu_gp_in_progress();
|         if (rdp->core_needs_qs && !rdp->cpu_no_qs.b.norm && gp_in_progress)
|                 return 1;

which triggers it but then "later" it fallbacks to the first case again.
In both cases it wakes the rcuc/ thread on the isolated CPU.

Is this something that needs to happen on the isolated CPU or can this
be excluded for rcu_rdp_is_offloaded() CPUs?

Sebastian

Reply via email to