diff options
author | David Howells <dhowells@redhat.com> | 2012-03-28 18:30:03 +0100 |
---|---|---|
committer | David Howells <dhowells@redhat.com> | 2012-03-28 18:30:03 +0100 |
commit | d550bbd40c0e10aefa05103dadbe0ae42e683707 (patch) | |
tree | c1f32662f605f2b87c73901fbf66d12b2ca69b04 /arch/sparc/include/asm/perfctr.h | |
parent | e839ca528718e68cad32a307dc9aabf01ef3eb05 (diff) | |
download | blackbird-op-linux-d550bbd40c0e10aefa05103dadbe0ae42e683707.tar.gz blackbird-op-linux-d550bbd40c0e10aefa05103dadbe0ae42e683707.zip |
Disintegrate asm/system.h for Sparc
Disintegrate asm/system.h for Sparc.
Signed-off-by: David Howells <dhowells@redhat.com>
cc: sparclinux@vger.kernel.org
Diffstat (limited to 'arch/sparc/include/asm/perfctr.h')
-rw-r--r-- | arch/sparc/include/asm/perfctr.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/arch/sparc/include/asm/perfctr.h b/arch/sparc/include/asm/perfctr.h index 8d8720a8770d..3332d2cba6c1 100644 --- a/arch/sparc/include/asm/perfctr.h +++ b/arch/sparc/include/asm/perfctr.h @@ -168,6 +168,29 @@ struct vcounter_struct { unsigned long long vcnt1; }; +#else /* !(__KERNEL__) */ + +#ifndef CONFIG_SPARC32 + +/* Performance counter register access. */ +#define read_pcr(__p) __asm__ __volatile__("rd %%pcr, %0" : "=r" (__p)) +#define write_pcr(__p) __asm__ __volatile__("wr %0, 0x0, %%pcr" : : "r" (__p)) +#define read_pic(__p) __asm__ __volatile__("rd %%pic, %0" : "=r" (__p)) + +/* Blackbird errata workaround. See commentary in + * arch/sparc64/kernel/smp.c:smp_percpu_timer_interrupt() + * for more information. + */ +#define write_pic(__p) \ + __asm__ __volatile__("ba,pt %%xcc, 99f\n\t" \ + " nop\n\t" \ + ".align 64\n" \ + "99:wr %0, 0x0, %%pic\n\t" \ + "rd %%pic, %%g0" : : "r" (__p)) +#define reset_pic() write_pic(0) + +#endif /* !CONFIG_SPARC32 */ + #endif /* !(__KERNEL__) */ #endif /* !(PERF_COUNTER_API) */ |