fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / arch / v850 / kernel / time.c
index fee3e95..cd06f47 100644 (file)
@@ -10,7 +10,6 @@
  *             "A Kernel Model for Precision Timekeeping" by Dave Mills
  */
 
-#include <linux/config.h> /* CONFIG_HEARTBEAT */
 #include <linux/errno.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 
 #include "mach.h"
 
-u64 jiffies_64 = INITIAL_JIFFIES;
-
-EXPORT_SYMBOL(jiffies_64);
-
 #define TICK_SIZE      (tick_nsec / 1000)
 
 /*
@@ -40,24 +35,6 @@ unsigned long long sched_clock(void)
        return (unsigned long long)jiffies * (1000000000 / HZ);
 }
 
-static inline void do_profile (unsigned long pc)
-{
-       if (prof_buffer && current->pid) {
-               extern int _stext;
-               pc -= (unsigned long) &_stext;
-               pc >>= prof_shift;
-               if (pc < prof_len)
-                       ++prof_buffer[pc];
-               else
-               /*
-                * Don't ignore out-of-bounds PC values silently,
-                * put them into the last histogram slot, so if
-                * present, they will show up as a sharp peak.
-                */
-                       ++prof_buffer[prof_len-1];
-       }
-}
-
 /*
  * timer_interrupt() needs to keep up the real-time clock,
  * as well as call the "do_timer()" routine every clocktick
@@ -73,18 +50,18 @@ static irqreturn_t timer_interrupt (int irq, void *dummy, struct pt_regs *regs)
        if (mach_tick)
          mach_tick ();
 
-       do_timer (regs);
-
-       if (! user_mode (regs))
-               do_profile (regs->pc);
-
+       do_timer (1);
+#ifndef CONFIG_SMP
+       update_process_times(user_mode(regs));
+#endif
+       profile_tick(CPU_PROFILING, regs);
 #if 0
        /*
         * If we have an externally synchronized Linux clock, then update
         * CMOS clock accordingly every ~11 minutes. Set_rtc_mmss() has to be
         * called as close as possible to 500 ms before the new second starts.
         */
-       if ((time_status & STA_UNSYNC) == 0 &&
+       if (ntp_synced() &&
            xtime.tv_sec > last_rtc_update + 660 &&
            (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
            (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) {
@@ -187,10 +164,7 @@ int do_settimeofday(struct timespec *tv)
        xtime.tv_sec = tv->tv_sec;
        xtime.tv_nsec = tv->tv_nsec;
 
-       time_adjust = 0;                /* stop active adjtime () */
-       time_status |= STA_UNSYNC;
-       time_maxerror = NTP_PHASE_LIMIT;
-       time_esterror = NTP_PHASE_LIMIT;
+       ntp_clear();
 
        write_sequnlock_irq (&xtime_lock);
        clock_was_set();
@@ -202,8 +176,8 @@ EXPORT_SYMBOL(do_settimeofday);
 static int timer_dev_id;
 static struct irqaction timer_irqaction = {
        timer_interrupt,
-       SA_INTERRUPT,
-       0,
+       IRQF_DISABLED,
+       CPU_MASK_NONE,
        "timer",
        &timer_dev_id,
        NULL