From: Tony Lindgren Date: Mon, 20 Mar 2006 16:05:39 +0000 (-0800) Subject: ARM: OMAP: Manual merge after updating to 2.6.16 X-Git-Tag: v2.6.16-omap1~30^2~1 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=8a02469001f79def59515164541a78ec2d20c9ba;p=linux-2.6-omap-h63xx.git ARM: OMAP: Manual merge after updating to 2.6.16 Manual merge after updating to 2.6.16 --- diff --git a/kernel/timer.c b/kernel/timer.c index 3fc403131ad..2410c18dbeb 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -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(); }