printk: check for user pointers in format string parameters
[akaros.git] / kern / src / time.c
index 7538cba..6dfb2b4 100644 (file)
@@ -19,11 +19,11 @@ static void train_timing(void)
        uint64_t time, diff;
        int8_t irq_state = 0;
 
-       /* Reset this, in case we run it again.  The use of start/stop to determine
-        * the overhead relies on timing_overhead being 0. */
+       /* Reset this, in case we run it again.  The use of start/stop to
+        * determine the overhead relies on timing_overhead being 0. */
        __proc_global_info.tsc_overhead = 0;
-       /* timing might use cpuid, in which case we warm it up to avoid some extra
-        * variance */
+       /* timing might use cpuid, in which case we warm it up to avoid some
+        * extra variance */
        time = start_timing();
        diff = stop_timing(time);
        time = start_timing();
@@ -39,8 +39,8 @@ static void train_timing(void)
        }
        enable_irqsave(&irq_state);
        __proc_global_info.tsc_overhead = min_overhead;
-       printk("TSC overhead (Min: %llu, Max: %llu)\n", min_overhead, max_overhead);
-}
+       printk("TSC overhead (Min: %llu, Max: %llu)\n", min_overhead,
+              max_overhead); }
 
 /* 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
@@ -104,33 +104,21 @@ uint64_t nsec2tsc(uint64_t nsec)
 }
 
 /*
- * Rudimentary timekeeping implementation.
- *
- * Nothing here yet apart from the base walltime and TSC cycle values
- * at system init time.
- */
-static struct {
-       uint64_t        walltime_ns_last;
-       uint64_t        tsc_cycles_last;
-} timekeeping;
-
-
-/*
  * Return nanoseconds since the UNIX epoch, 1st January, 1970.
  */
 uint64_t epoch_nsec(void)
 {
-       uint64_t cycles = read_tsc() - timekeeping.tsc_cycles_last;
+       uint64_t cycles = read_tsc() - __proc_global_info.tsc_cycles_last;
 
-       return timekeeping.walltime_ns_last + tsc2nsec(cycles);
+       return __proc_global_info.walltime_ns_last + tsc2nsec(cycles);
 }
 
 void time_init(void)
 {
        train_timing();
 
-       timekeeping.walltime_ns_last = read_persistent_clock();
-       timekeeping.tsc_cycles_last  = read_tsc();
+       __proc_global_info.walltime_ns_last = read_persistent_clock();
+       __proc_global_info.tsc_cycles_last  = read_tsc();
 
        cycles_to_nsec_init(__proc_global_info.tsc_freq);
        nsec_to_cycles_init(__proc_global_info.tsc_freq);