arm64: arm_generic: prevent reading stale time
authorMark Rutland <mark.rutland@arm.com>
Tue, 15 Jan 2013 11:12:29 +0000 (11:12 +0000)
committerMark Rutland <mark.rutland@arm.com>
Thu, 31 Jan 2013 15:51:49 +0000 (15:51 +0000)
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>
arch/arm64/include/asm/arm_generic.h

index df2aeb82f74e5b57cdb5dddf38b86d812b7415b1..6ece2f107fa0246759a5db446df7986e4fdba4ce 100644 (file)
@@ -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;