From: David S. Miller <davem@davemloft.net>
Date: Mon, 13 Oct 2008 06:56:12 +0000 (-0700)
Subject: chmc: Mark %ver register inline asm with __volatile__
X-Git-Tag: firefly_0821_release~17714^2
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=615c9136b385d5225d3ece20aa30b28a90c438d6;p=firefly-linux-kernel-4.4.55.git

chmc: Mark %ver register inline asm with __volatile__

Otherwise GCC can try to do the register read before the guarding test
on us3mc_platform() being true.

If that happens we can take an exception, because %ver register reads
are not allowed in privileged more on hypervisor platforms.

Signed-off-by: David S. Miller <davem@davemloft.net>
---

diff --git a/arch/sparc64/kernel/chmc.c b/arch/sparc64/kernel/chmc.c
index 967b04886822..3b9f4d6e14a9 100644
--- a/arch/sparc64/kernel/chmc.c
+++ b/arch/sparc64/kernel/chmc.c
@@ -831,7 +831,7 @@ static int __init us3mc_init(void)
 	if (!us3mc_platform())
 		return -ENODEV;
 
-	__asm__ ("rdpr %%ver, %0" : "=r" (ver));
+	__asm__ __volatile__("rdpr %%ver, %0" : "=r" (ver));
 	if ((ver >> 32UL) == __JALAPENO_ID ||
 	    (ver >> 32UL) == __SERRANO_ID) {
 		mc_type = MC_TYPE_JBUS;