Have rendez_sleep_timeout() take usec, not msec
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 28 Aug 2015 20:52:43 +0000 (16:52 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 28 Sep 2015 19:14:00 +0000 (15:14 -0400)
This keeps the timeout more in line the alarm subsystem, which uses
usecs.

kern/include/rendez.h
kern/src/ktest/pb_ktests.c
kern/src/rendez.c
scripts/spatch/rendez.cocci

index f48a704..d1bbad7 100644 (file)
@@ -12,7 +12,7 @@
  * Sleeper usage:
  *             rendez_sleep(&rv, some_func_taking_void*, void *arg);
  *                     or
  * Sleeper usage:
  *             rendez_sleep(&rv, some_func_taking_void*, void *arg);
  *                     or
- *             rendez_sleep_timeout(&rv, some_func_taking_void*, void *arg, msec);
+ *             rendez_sleep_timeout(&rv, some_func_taking_void*, void *arg, usec);
  *
  * Waker usage: (can be used from IRQ context)
  *             // set the condition to TRUE, then:
  *
  * Waker usage: (can be used from IRQ context)
  *             // set the condition to TRUE, then:
@@ -48,7 +48,7 @@ struct rendez {
 void rendez_init(struct rendez *rv);
 void rendez_sleep(struct rendez *rv, int (*cond)(void*), void *arg);
 void rendez_sleep_timeout(struct rendez *rv, int (*cond)(void*), void *arg,
 void rendez_init(struct rendez *rv);
 void rendez_sleep(struct rendez *rv, int (*cond)(void*), void *arg);
 void rendez_sleep_timeout(struct rendez *rv, int (*cond)(void*), void *arg,
-                          unsigned int msec);
+                          uint64_t usec);
 bool rendez_wakeup(struct rendez *rv);
 
 #endif /* ROS_KERN_RENDEZ_H */
 bool rendez_wakeup(struct rendez *rv);
 
 #endif /* ROS_KERN_RENDEZ_H */
index 35d0803..a40d713 100644 (file)
@@ -1890,7 +1890,7 @@ bool test_rv(void)
                int cpu = (i % (num_cores - 1)) + 1;
                /* timeouts from 0ms ..5000ms (enough that they should wake via cond */
                if (atomic_read(&counter) % 5)
                int cpu = (i % (num_cores - 1)) + 1;
                /* timeouts from 0ms ..5000ms (enough that they should wake via cond */
                if (atomic_read(&counter) % 5)
-                       send_kernel_message(cpu, __test_rv_sleeper_timeout, i * 4, 0, 0,
+                       send_kernel_message(cpu, __test_rv_sleeper_timeout, i * 4000, 0, 0,
                                            KMSG_ROUTINE);
                else
                        send_kernel_message(cpu, __test_rv_sleeper, 0, 0, 0, KMSG_ROUTINE);
                                            KMSG_ROUTINE);
                else
                        send_kernel_message(cpu, __test_rv_sleeper, 0, 0, 0, KMSG_ROUTINE);
index 3421193..1fb75b7 100644 (file)
@@ -59,16 +59,16 @@ static void rendez_alarm_handler(struct alarm_waiter *awaiter)
        rendez_wakeup(rv);
 }
 
        rendez_wakeup(rv);
 }
 
-/* Like sleep, but it will timeout in 'msec' milliseconds. */
+/* Like sleep, but it will timeout in 'usec' microseconds. */
 void rendez_sleep_timeout(struct rendez *rv, int (*cond)(void*), void *arg,
 void rendez_sleep_timeout(struct rendez *rv, int (*cond)(void*), void *arg,
-                          unsigned int msec)
+                          uint64_t usec)
 {
        int8_t irq_state = 0;
        struct alarm_waiter awaiter;
        struct cv_lookup_elm cle;
        struct timer_chain *pcpui_tchain = &per_cpu_info[core_id()].tchain;
 
 {
        int8_t irq_state = 0;
        struct alarm_waiter awaiter;
        struct cv_lookup_elm cle;
        struct timer_chain *pcpui_tchain = &per_cpu_info[core_id()].tchain;
 
-       assert((int)msec > 0);
+       assert(usec > 0);
        /* Doing this cond check early, but then unlocking again.  Mostly just to
         * avoid weird issues with the CV lock and the alarm tchain lock. */
        cv_lock_irqsave(&rv->cv, &irq_state);
        /* Doing this cond check early, but then unlocking again.  Mostly just to
         * avoid weird issues with the CV lock and the alarm tchain lock. */
        cv_lock_irqsave(&rv->cv, &irq_state);
@@ -81,7 +81,7 @@ void rendez_sleep_timeout(struct rendez *rv, int (*cond)(void*), void *arg,
         * state.  It's enough to break us out of cv_wait() to see .on_tchain. */
        init_awaiter(&awaiter, rendez_alarm_handler);
        awaiter.data = rv;
         * state.  It's enough to break us out of cv_wait() to see .on_tchain. */
        init_awaiter(&awaiter, rendez_alarm_handler);
        awaiter.data = rv;
-       set_awaiter_rel(&awaiter, msec * 1000);
+       set_awaiter_rel(&awaiter, usec);
        /* Set our alarm on this cpu's tchain.  Note that when we sleep in cv_wait,
         * we could be migrated, and later on we could be unsetting the alarm
         * remotely. */
        /* Set our alarm on this cpu's tchain.  Note that when we sleep in cv_wait,
         * we could be migrated, and later on we could be unsetting the alarm
         * remotely. */
index 962cacf..0ea7d41 100644 (file)
@@ -23,7 +23,7 @@ expression RVFA;
 expression RVTO;
 @@
 -tsleep(RV, RVF, RVFA, RVTO);
 expression RVTO;
 @@
 -tsleep(RV, RVF, RVFA, RVTO);
-+rendez_sleep_timeout(RV, RVF, RVFA, RVTO);
++rendez_sleep_timeout(RV, RVF, RVFA, RVTO * 1000);
 
 @@
 expression RV;
 
 @@
 expression RV;