linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: mark.rutland@arm.com (Mark Rutland)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv5 07/16] arm: arch_timer: add isbs to register accessors
Date: Thu, 31 Jan 2013 12:15:30 +0000	[thread overview]
Message-ID: <1359634539-9580-8-git-send-email-mark.rutland@arm.com> (raw)
In-Reply-To: <1359634539-9580-1-git-send-email-mark.rutland@arm.com>

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>
---
 arch/arm/include/asm/arch_timer.h | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/arm/include/asm/arch_timer.h b/arch/arm/include/asm/arch_timer.h
index db0fdc4..75975d9 100644
--- a/arch/arm/include/asm/arch_timer.h
+++ b/arch/arm/include/asm/arch_timer.h
@@ -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)
@@ -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;
 }
@@ -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;
 }
-- 
1.8.1.1

  parent reply	other threads:[~2013-01-31 12:15 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-31 12:15 [PATCHv5 00/16] Unify arm_generic and arch_timer drivers Mark Rutland
2013-01-31 12:15 ` [PATCHv5 01/16] arm: arch_timer: balance device_node refcounting Mark Rutland
2013-01-31 15:33   ` Catalin Marinas
2013-01-31 12:15 ` [PATCHv5 02/16] arm: arch_timer: remove redundant available check Mark Rutland
2013-01-31 12:15 ` [PATCHv5 03/16] arm: arch_timer: use u64/u32 for register data Mark Rutland
2013-01-31 12:15 ` [PATCHv5 04/16] arm: arch_timer: standardise counter reading Mark Rutland
2013-01-31 15:34   ` Catalin Marinas
2013-01-31 12:15 ` [PATCHv5 05/16] arm: arch_timer: split cntfrq accessor Mark Rutland
2013-01-31 12:15 ` [PATCHv5 06/16] arm: arch_timer: factor out register accessors Mark Rutland
2013-01-31 12:15 ` Mark Rutland [this message]
2013-01-31 15:35   ` [PATCHv5 07/16] arm: arch_timer: add isbs to " Catalin Marinas
2013-01-31 12:15 ` [PATCHv5 08/16] arm: arch_timer: divorce from local_timer api Mark Rutland
2013-01-31 12:15 ` [PATCHv5 09/16] arm: arch_timer: add arch_counter_set_user_access Mark Rutland
2013-01-31 15:36   ` Catalin Marinas
2013-01-31 12:15 ` [PATCHv5 10/16] arm: arch_timer: move core to drivers/clocksource Mark Rutland
2013-01-31 12:15 ` [PATCHv5 11/16] arm64: arm_generic: prevent reading stale time Mark Rutland
2013-01-31 15:36   ` Catalin Marinas
2013-01-31 12:15 ` [PATCHv5 12/16] arm64: move from arm_generic to arm_arch_timer Mark Rutland
2013-01-31 12:15 ` [PATCHv5 13/16] Documentation: Add ARMv8 to arch_timer devicetree Mark Rutland
2013-01-31 12:15 ` [PATCHv5 14/16] ARM: arch_timers: switch to physical timers if HYP mode is available Mark Rutland
2013-01-31 15:37   ` Catalin Marinas
2013-01-31 12:15 ` [PATCHv5 15/16] ARM: hyp: initialize CNTVOFF to zero Mark Rutland
2013-02-01 11:13   ` Dave Martin
2013-02-01 11:43     ` Marc Zyngier
2013-02-01 11:46     ` Mark Rutland
2013-02-01 18:07       ` Dave Martin
2013-02-04  9:29         ` Mark Rutland
2013-01-31 12:15 ` [PATCHv5 16/16] clocksource: arch_timer: use virtual counters Mark Rutland
2013-01-31 15:38   ` Catalin Marinas
2013-01-31 17:39 ` [PATCHv5 00/16] Unify arm_generic and arch_timer drivers Stephen Warren

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1359634539-9580-8-git-send-email-mark.rutland@arm.com \
    --to=mark.rutland@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).