diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2006-02-12 08:14:59 +0100 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-03-20 10:12:27 +0100 |
commit | 7aa6264543f19ceea9b5f386242917296d63be05 (patch) | |
tree | ca0639f3777fa5a7b553097535fcf505647f6701 /arch/sparc64/kernel/time.c | |
parent | [SPARC64]: Fix mondo queue allocations. (diff) | |
download | linux-7aa6264543f19ceea9b5f386242917296d63be05.tar.xz linux-7aa6264543f19ceea9b5f386242917296d63be05.zip |
[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.c | 26 |
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; static void stick_init_tick(unsigned long offset) { - tick_disable_protection(); - - /* Let the user get at STICK too. */ - __asm__ __volatile__( - " rd %%asr24, %%g2\n" - " andn %%g2, %0, %%g2\n" - " wr %%g2, 0, %%asr24" - : /* no outputs */ - : "r" (TICK_PRIV_BIT) - : "g1", "g2"); + /* Writes to the %tick and %stick register are not + * allowed on sun4v. The Hypervisor controls that + * bit, per-strand. + */ + if (tlb_type != hypervisor) { + tick_disable_protection(); + + /* Let the user get at STICK too. */ + __asm__ __volatile__( + " rd %%asr24, %%g2\n" + " andn %%g2, %0, %%g2\n" + " wr %%g2, 0, %%asr24" + : /* no outputs */ + : "r" (TICK_PRIV_BIT) + : "g1", "g2"); + } __asm__ __volatile__( " rd %%asr24, %%g1\n" |