]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
ARM: OMAP: Manual merge after updating to 2.6.16
authorTony Lindgren <tony@atomide.com>
Mon, 20 Mar 2006 16:05:39 +0000 (08:05 -0800)
committerTony Lindgren <tony@atomide.com>
Mon, 20 Mar 2006 16:05:39 +0000 (08:05 -0800)
Manual merge after updating to 2.6.16

kernel/timer.c

index 3fc403131adeb3746080c0db0cc0053e4f649cff..2410c18dbeb1403eafac5449b48676cd6580a387 100644 (file)
@@ -488,7 +488,8 @@ unsigned long next_timer_interrupt(void)
        tvec_base_t *base;
        struct list_head *list;
        struct timer_list *nte;
-       unsigned long expires, hr_expires = MAX_JIFFY_OFFSET;
+       unsigned long expires;
+       unsigned long hr_expires = MAX_JIFFY_OFFSET;
        ktime_t hr_delta;
        tvec_t *varray[4];
        int i, j;
@@ -940,6 +941,8 @@ static inline void update_times(void)
 void do_timer(struct pt_regs *regs)
 {
        jiffies_64++;
+       /* prevent loading jiffies before storing new jiffies_64 value. */
+       barrier();
        update_times();
        softlockup_tick(regs);
 }
@@ -1351,8 +1354,8 @@ void __init init_timers(void)
 
 #ifdef CONFIG_TIME_INTERPOLATION
 
-struct time_interpolator *time_interpolator;
-static struct time_interpolator *time_interpolator_list;
+struct time_interpolator *time_interpolator __read_mostly;
+static struct time_interpolator *time_interpolator_list __read_mostly;
 static DEFINE_SPINLOCK(time_interpolator_lock);
 
 static inline u64 time_interpolator_get_cycles(unsigned int src)
@@ -1366,10 +1369,10 @@ static inline u64 time_interpolator_get_cycles(unsigned int src)
                        return x();
 
                case TIME_SOURCE_MMIO64 :
-                       return readq((void __iomem *) time_interpolator->addr);
+                       return readq_relaxed((void __iomem *)time_interpolator->addr);
 
                case TIME_SOURCE_MMIO32 :
-                       return readl((void __iomem *) time_interpolator->addr);
+                       return readl_relaxed((void __iomem *)time_interpolator->addr);
 
                default: return get_cycles();
        }