summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Rutland <mark.rutland@arm.com>2013-01-15 11:12:29 +0000
committerMark Rutland <mark.rutland@arm.com>2013-01-31 15:51:49 +0000
commit1dac0dd71cdda2bd7395dd47a6b617ed296d4901 (patch)
tree8c5853f5c948ff82f086434771605a0c93b79037
parent8a4da6e36c582ff746191eca85b6c1c068dbfbd6 (diff)
arm64: arm_generic: prevent reading stale time
Currently arch_counter_get_cnt{p,v}ct can be speculated, allowing for stale time values to be read. This could be problematic for the delay loop and other sensitive functions, as the time delta could jump around unexpectedly. This patch adds isbs to arch_counter_get_cnt{p,v}ct, preventing this possibility. Signed-off-by: Mark Rutland <mark.rutland@arm.com> Acked-by: Catalin Marinas <catalin.marinas@arm.com>
-rw-r--r--arch/arm64/include/asm/arm_generic.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/arm64/include/asm/arm_generic.h b/arch/arm64/include/asm/arm_generic.h
index df2aeb82f74e..6ece2f107fa0 100644
--- a/arch/arm64/include/asm/arm_generic.h
+++ b/arch/arm64/include/asm/arm_generic.h
@@ -83,6 +83,7 @@ static inline cycle_t arch_counter_get_cntpct(void)
{
cycle_t cval;
+ isb();
asm volatile("mrs %0, cntpct_el0" : "=r" (cval));
return cval;
@@ -92,6 +93,7 @@ static inline cycle_t arch_counter_get_cntvct(void)
{
cycle_t cval;
+ isb();
asm volatile("mrs %0, cntvct_el0" : "=r" (cval));
return cval;