aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sparc64/kernel/time.c
diff options
context:
space:
mode:
authorDavid S. Miller <davem@sunset.davemloft.net>2006-02-12 02:14:59 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2006-03-20 04:12:27 -0500
commit7aa6264543f19ceea9b5f386242917296d63be05 (patch)
treeca0639f3777fa5a7b553097535fcf505647f6701 /arch/sparc64/kernel/time.c
parentb5a37e96b8dc067b979e44c4e109c9bc49c2f4d8 (diff)
[SPARC64]: Do not try to write to %tick or %stick on SUN4V.
Writes by privileged code are disallowed. The hypervisor manages the non-privileged bit. Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc64/kernel/time.c')
-rw-r--r--arch/sparc64/kernel/time.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/arch/sparc64/kernel/time.c b/arch/sparc64/kernel/time.c
index 24681b9b4426..7041146f86f0 100644
--- a/arch/sparc64/kernel/time.c
+++ b/arch/sparc64/kernel/time.c
@@ -193,16 +193,22 @@ struct sparc64_tick_ops *tick_ops __read_mostly = &tick_operations;
193 193
194static void stick_init_tick(unsigned long offset) 194static void stick_init_tick(unsigned long offset)
195{ 195{
196 tick_disable_protection(); 196 /* Writes to the %tick and %stick register are not
197 197 * allowed on sun4v. The Hypervisor controls that
198 /* Let the user get at STICK too. */ 198 * bit, per-strand.
199 __asm__ __volatile__( 199 */
200 " rd %%asr24, %%g2\n" 200 if (tlb_type != hypervisor) {
201 " andn %%g2, %0, %%g2\n" 201 tick_disable_protection();
202 " wr %%g2, 0, %%asr24" 202
203 : /* no outputs */ 203 /* Let the user get at STICK too. */
204 : "r" (TICK_PRIV_BIT) 204 __asm__ __volatile__(
205 : "g1", "g2"); 205 " rd %%asr24, %%g2\n"
206 " andn %%g2, %0, %%g2\n"
207 " wr %%g2, 0, %%asr24"
208 : /* no outputs */
209 : "r" (TICK_PRIV_BIT)
210 : "g1", "g2");
211 }
206 212
207 __asm__ __volatile__( 213 __asm__ __volatile__(
208 " rd %%asr24, %%g1\n" 214 " rd %%asr24, %%g1\n"