Skip to content

Commit

Permalink
arm: arch_timer: add isbs to register accessors
Browse files Browse the repository at this point in the history
Without the isbs in arch_timer_get_cnt{p,v}ct the cpu may speculate
reads and return stale values. This could be bad for code sensitive to
changes in expected deltas between calls (e.g. the delay loop).

Without isbs in arch_timer_reg_write the processor may reorder
instructions around enabling/disabling of the timer or writing the
compare value, which we probably don't want.

This patch adds isbs to prevent those issues.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
  • Loading branch information
Mark Rutland committed Jan 31, 2013
1 parent ec944c9 commit 4580104
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions arch/arm/include/asm/arch_timer.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ static inline void arch_timer_reg_write(const int access, const int reg, u32 val
break;
}
}

isb();
}

static inline u32 arch_timer_reg_read(const int access, const int reg)
Expand Down Expand Up @@ -91,6 +93,7 @@ static inline u64 arch_counter_get_cntpct(void)
{
u64 cval;

isb();
asm volatile("mrrc p15, 0, %Q0, %R0, c14" : "=r" (cval));
return cval;
}
Expand All @@ -99,6 +102,7 @@ static inline u64 arch_counter_get_cntvct(void)
{
u64 cval;

isb();
asm volatile("mrrc p15, 1, %Q0, %R0, c14" : "=r" (cval));
return cval;
}
Expand Down

0 comments on commit 4580104

Please sign in to comment.