fix: warnings on non-Linux platforms
[urcu.git] / src / workqueue.c
index 17ea835779b8bed4f4ab77fc70b0c5ba7d6ca8a3..cadcf874be6c76726dc1a3dd3e082c545b266e8b 100644 (file)
 #include <sched.h>
 
 #include "compat-getcpu.h"
 #include <sched.h>
 
 #include "compat-getcpu.h"
-#include "urcu/wfcqueue.h"
-#include "urcu-call-rcu.h"
-#include "urcu-pointer.h"
-#include "urcu/list.h"
-#include "urcu/futex.h"
-#include "urcu/tls-compat.h"
-#include "urcu/ref.h"
+#include <urcu/wfcqueue.h>
+#include <urcu/pointer.h>
+#include <urcu/list.h>
+#include <urcu/futex.h>
+#include <urcu/tls-compat.h>
+#include <urcu/ref.h>
 #include "urcu-die.h"
 
 #include "workqueue.h"
 #include "urcu-die.h"
 
 #include "workqueue.h"
 struct urcu_workqueue {
        /*
         * We do not align head on a different cache-line than tail
 struct urcu_workqueue {
        /*
         * We do not align head on a different cache-line than tail
-        * mainly because call_rcu callback-invocation threads use
-        * batching ("splice") to get an entire list of callbacks, which
-        * effectively empties the queue, and requires to touch the tail
-        * anyway.
+        * mainly because workqueue threads use batching ("splice") to
+        * get an entire list of callbacks, which effectively empties
+        * the queue, and requires to touch the tail anyway.
         */
        struct cds_wfcq_tail cbs_tail;
        struct cds_wfcq_head cbs_head;
         */
        struct cds_wfcq_tail cbs_tail;
        struct cds_wfcq_head cbs_head;
@@ -94,7 +92,7 @@ struct urcu_workqueue_completion_work {
  * Losing affinity can be caused by CPU hotunplug/hotplug, or by
  * cpuset(7).
  */
  * Losing affinity can be caused by CPU hotunplug/hotplug, or by
  * cpuset(7).
  */
-#if HAVE_SCHED_SETAFFINITY
+#ifdef HAVE_SCHED_SETAFFINITY
 static int set_thread_cpu_affinity(struct urcu_workqueue *workqueue)
 {
        cpu_set_t mask;
 static int set_thread_cpu_affinity(struct urcu_workqueue *workqueue)
 {
        cpu_set_t mask;
@@ -109,11 +107,8 @@ static int set_thread_cpu_affinity(struct urcu_workqueue *workqueue)
 
        CPU_ZERO(&mask);
        CPU_SET(workqueue->cpu_affinity, &mask);
 
        CPU_ZERO(&mask);
        CPU_SET(workqueue->cpu_affinity, &mask);
-#if SCHED_SETAFFINITY_ARGS == 2
-       ret = sched_setaffinity(0, &mask);
-#else
        ret = sched_setaffinity(0, sizeof(mask), &mask);
        ret = sched_setaffinity(0, sizeof(mask), &mask);
-#endif
+
        /*
         * EINVAL is fine: can be caused by hotunplugged CPUs, or by
         * cpuset(7). This is why we should always retry if we detect
        /*
         * EINVAL is fine: can be caused by hotunplugged CPUs, or by
         * cpuset(7). This is why we should always retry if we detect
@@ -126,7 +121,7 @@ static int set_thread_cpu_affinity(struct urcu_workqueue *workqueue)
        return ret;
 }
 #else
        return ret;
 }
 #else
-static int set_thread_cpu_affinity(struct urcu_workqueue *workqueue)
+static int set_thread_cpu_affinity(struct urcu_workqueue *workqueue __attribute__((unused)))
 {
        return 0;
 }
 {
        return 0;
 }
@@ -223,11 +218,11 @@ static void *workqueue_thread(void *arg)
                        cbcount = 0;
                        __cds_wfcq_for_each_blocking_safe(&cbs_tmp_head,
                                        &cbs_tmp_tail, cbs, cbs_tmp_n) {
                        cbcount = 0;
                        __cds_wfcq_for_each_blocking_safe(&cbs_tmp_head,
                                        &cbs_tmp_tail, cbs, cbs_tmp_n) {
-                               struct rcu_head *rhp;
+                               struct urcu_work *uwp;
 
 
-                               rhp = caa_container_of(cbs,
-                                       struct rcu_head, next);
-                               rhp->func(rhp);
+                               uwp = caa_container_of(cbs,
+                                       struct urcu_work, next);
+                               uwp->func(uwp);
                                cbcount++;
                        }
                        uatomic_sub(&workqueue->qlen, cbcount);
                                cbcount++;
                        }
                        uatomic_sub(&workqueue->qlen, cbcount);
@@ -240,25 +235,25 @@ static void *workqueue_thread(void *arg)
                        if (cds_wfcq_empty(&workqueue->cbs_head,
                                        &workqueue->cbs_tail)) {
                                futex_wait(&workqueue->futex);
                        if (cds_wfcq_empty(&workqueue->cbs_head,
                                        &workqueue->cbs_tail)) {
                                futex_wait(&workqueue->futex);
-                               (void) poll(NULL, 0, 10);
                                uatomic_dec(&workqueue->futex);
                                /*
                                 * Decrement futex before reading
                                uatomic_dec(&workqueue->futex);
                                /*
                                 * Decrement futex before reading
-                                * call_rcu list.
+                                * urcu_work list.
                                 */
                                cmm_smp_mb();
                                 */
                                cmm_smp_mb();
-                       } else {
-                               (void) poll(NULL, 0, 10);
                        }
                } else {
                        }
                } else {
-                       (void) poll(NULL, 0, 10);
+                       if (cds_wfcq_empty(&workqueue->cbs_head,
+                                       &workqueue->cbs_tail)) {
+                               (void) poll(NULL, 0, 10);
+                       }
                }
                if (workqueue->worker_after_wake_up_fct)
                        workqueue->worker_after_wake_up_fct(workqueue, workqueue->priv);
        }
        if (!rt) {
                /*
                }
                if (workqueue->worker_after_wake_up_fct)
                        workqueue->worker_after_wake_up_fct(workqueue, workqueue->priv);
        }
        if (!rt) {
                /*
-                * Read call_rcu list before write futex.
+                * Read urcu_work list before write futex.
                 */
                cmm_smp_mb();
                uatomic_set(&workqueue->futex, 0);
                 */
                cmm_smp_mb();
                uatomic_set(&workqueue->futex, 0);
@@ -309,7 +304,7 @@ struct urcu_workqueue *urcu_workqueue_create(unsigned long flags,
 
 static void wake_worker_thread(struct urcu_workqueue *workqueue)
 {
 
 static void wake_worker_thread(struct urcu_workqueue *workqueue)
 {
-       if (!(_CMM_LOAD_SHARED(workqueue->flags) & URCU_CALL_RCU_RT))
+       if (!(_CMM_LOAD_SHARED(workqueue->flags) & URCU_WORKQUEUE_RT))
                futex_wake_up(&workqueue->futex);
 }
 
                futex_wake_up(&workqueue->futex);
 }
 
This page took 0.024583 seconds and 4 git commands to generate.