workqueue: steal all: only steal from workers when steal flag is set
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 24 Oct 2014 11:07:48 +0000 (07:07 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 24 Oct 2014 11:07:48 +0000 (07:07 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
urcu/workqueue-fifo.h

index ff0c650571a175ae6c809eee41d9f3135131ce36..c2766e5ac85f7c696bc507e996ab5fa94fa3d220 100644 (file)
@@ -514,13 +514,15 @@ bool urcu_workqueue_steal_all(struct urcu_workqueue *queue,
        struct urcu_worker *sibling;
        bool has_work = false;
 
-       rcu_read_lock();
-       /* Steal from each worker */
-       cds_list_for_each_entry_rcu(sibling, &queue->sibling_head,
-                       sibling_node)
-               has_work |= ___urcu_grab_work(worker, &sibling->head,
-                                       &sibling->tail, 1);
-       rcu_read_unlock();
+       if (worker->flags & URCU_WORKER_STEAL) {
+               rcu_read_lock();
+               /* Steal from each worker */
+               cds_list_for_each_entry_rcu(sibling, &queue->sibling_head,
+                               sibling_node)
+                       has_work |= ___urcu_grab_work(worker, &sibling->head,
+                                               &sibling->tail, 1);
+               rcu_read_unlock();
+       }
 
        /* Steal from global workqueue */
        has_work |= ___urcu_grab_work(worker, &queue->head, &queue->tail, 0);
This page took 0.026027 seconds and 4 git commands to generate.