On 07/28, Paul E. McKenney wrote: > > This commit adds a new RCU-tasks flavor of RCU, which provides > call_rcu_tasks(). This RCU flavor's quiescent states are voluntary > context switch (not preemption!), userspace execution, and the idle loop. > Note that unlike other RCU flavors, these quiescent states occur in tasks, > not necessarily CPUs. Includes fixes from Steven Rostedt.
I still hope I will read this series later. Not that I really hope I will understand it ;) Just one question for now, > +static int __noreturn rcu_tasks_kthread(void *arg) > +{ > + unsigned long flags; > + struct task_struct *g, *t; > + struct rcu_head *list; > + struct rcu_head *next; > + > + /* FIXME: Add housekeeping affinity. */ > + > + /* > + * Each pass through the following loop makes one check for > + * newly arrived callbacks, and, if there are some, waits for > + * one RCU-tasks grace period and then invokes the callbacks. > + * This loop is terminated by the system going down. ;-) > + */ > + for (;;) { > + > + /* Pick up any new callbacks. */ > + raw_spin_lock_irqsave(&rcu_tasks_cbs_lock, flags); > + smp_mb__after_unlock_lock(); /* Enforce GP memory ordering. */ > + list = rcu_tasks_cbs_head; > + rcu_tasks_cbs_head = NULL; > + rcu_tasks_cbs_tail = &rcu_tasks_cbs_head; > + raw_spin_unlock_irqrestore(&rcu_tasks_cbs_lock, flags); > + > + /* If there were none, wait a bit and start over. */ > + if (!list) { > + schedule_timeout_interruptible(HZ); > + flush_signals(current); Why? And I see more flush_signals() in the current kernel/rcu/ code. Unless a kthread does allow_signal() it can't have a pending signal? Oleg. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/