udelay_sched()
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jan 2014 01:25:35 +0000 (17:25 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jan 2014 01:25:35 +0000 (17:25 -0800)
Sleeps a kthread for 'usec' microseconds.

kern/include/time.h
kern/src/time.c

index 28bdec6..92ee9b4 100644 (file)
@@ -23,7 +23,8 @@ struct timeval {
 };
 
 void train_timing();
-void udelay(uint64_t usec);
+void udelay(uint64_t usec);    /* done in arch-specific files */
+void udelay_sched(uint64_t usec);
 uint64_t tsc2sec(uint64_t tsc_time);
 uint64_t tsc2msec(uint64_t tsc_time);
 uint64_t tsc2usec(uint64_t tsc_time);
index b733d27..df30404 100644 (file)
@@ -41,6 +41,16 @@ void train_timing()
        printk("TSC overhead (Min: %llu, Max: %llu)\n", min_overhead, max_overhead);
 }
 
+void udelay_sched(uint64_t usec)
+{
+       struct timer_chain *tchain = &per_cpu_info[core_id()].tchain;
+       struct alarm_waiter a_waiter;
+       init_awaiter(&a_waiter, 0);
+       set_awaiter_rel(&a_waiter, usec);
+       set_alarm(tchain, &a_waiter);
+       sleep_on_awaiter(&a_waiter);
+}
+
 /* Convenience wrapper called when a core's timer interrupt goes off.  Not to be
  * confused with global timers (like the PIC).  Do not put your code here.  If
  * you want something to happen in the future, set an alarm. */