]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/sparc/kernel/time.c
USB: MUSB: Better sysconf reg settings on PM point of view
[linux-2.6-omap-h63xx.git] / arch / sparc / kernel / time.c
index 45cb7c5286d7cb327d19d057de0ab07e77fbe2ce..53caacbb3982e20c3feb464facdbe10352122dcf 100644 (file)
@@ -105,7 +105,7 @@ __volatile__ unsigned int *master_l10_limit;
 
 #define TICK_SIZE (tick_nsec / 1000)
 
-irqreturn_t timer_interrupt(int irq, void *dev_id)
+static irqreturn_t timer_interrupt(int dummy, void *dev_id)
 {
        /* last time the cmos clock got updated */
        static long last_rtc_update;
@@ -128,10 +128,6 @@ irqreturn_t timer_interrupt(int irq, void *dev_id)
        clear_clock_irq();
 
        do_timer(1);
-#ifndef CONFIG_SMP
-       update_process_times(user_mode(get_irq_regs()));
-#endif
-
 
        /* Determine when to update the Mostek clock. */
        if (ntp_synced() &&
@@ -145,6 +141,9 @@ irqreturn_t timer_interrupt(int irq, void *dev_id)
        }
        write_sequnlock(&xtime_lock);
 
+#ifndef CONFIG_SMP
+       update_process_times(user_mode(get_irq_regs()));
+#endif
        return IRQ_HANDLED;
 }
 
@@ -436,7 +435,14 @@ void __init time_init(void)
 
 static inline unsigned long do_gettimeoffset(void)
 {
-       return (*master_l10_counter >> 10) & 0x1fffff;
+       unsigned long val = *master_l10_counter;
+       unsigned long usec = (val >> 10) & 0x1fffff;
+
+       /* Limit hit?  */
+       if (val & 0x80000000)
+               usec += 1000000 / HZ;
+
+       return usec;
 }
 
 /* Ok, my cute asm atomicity trick doesn't work anymore.