On Mon, Jul 28, 2014 at 03:56:12PM -0700, Paul E. McKenney wrote: > + /* > + * Each pass through the following loop scans the list > + * of holdout tasks, removing any that are no longer > + * holdouts. When the list is empty, we are done. > + */ > + while (!list_empty(&rcu_tasks_holdouts)) { > + schedule_timeout_interruptible(HZ / 10); > + flush_signals(current); > + rcu_read_lock(); > + list_for_each_entry_rcu(t, &rcu_tasks_holdouts, > + rcu_tasks_holdout_list) { > + if (smp_load_acquire(&t->rcu_tasks_holdout)) > + continue; > + list_del_init(&t->rcu_tasks_holdout_list); > + /* @@@ need to check for usermode on CPU. */ > + } > + rcu_read_unlock(); > + }
That's a potential CPU runtime sink.. imagine having to scan 100k tasks 10 times a second. Polling O(nr_tasks) is not good. -- 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/