diff options
author | Hugh Dickins <hugh@veritas.com> | 2006-10-31 21:44:54 +0300 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-10-03 05:48:44 +0400 |
commit | 048c8bc90e53bf1f5feec020a7d482da94894e93 (patch) | |
tree | 6ca0891ac3320706873006104cde3d4e1039bcfc /include/asm-powerpc/paca.h | |
parent | 5669c3cf19fbadaa9120b59914beec8431277efe (diff) | |
download | linux-048c8bc90e53bf1f5feec020a7d482da94894e93.tar.xz |
[POWERPC] ppc64: support CONFIG_DEBUG_PREEMPT
Add CONFIG_DEBUG_PREEMPT support to ppc64: it was useful for testing
get_paca() preemption. Cheat a little, just use debug_smp_processor_id()
in the debug version of get_paca(): it contains all the right checks and
reporting, though get_paca() doesn't really use smp_processor_id().
Use local_paca for what might have been called __raw_get_paca().
Silence harmless warnings from io.h and lparcfg.c with local_paca -
it is okay for iseries_lparcfg_data to be referencing shared_proc
with preemption enabled: all cpus should show the same value for
shared_proc.
Why do other architectures need TRACE_IRQFLAGS_SUPPORT for DEBUG_PREEMPT?
I don't know, ppc64 appears to get along fine without it.
Signed-off-by: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'include/asm-powerpc/paca.h')
-rw-r--r-- | include/asm-powerpc/paca.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/asm-powerpc/paca.h b/include/asm-powerpc/paca.h index c6a5b1735666..fcd7b428ed0b 100644 --- a/include/asm-powerpc/paca.h +++ b/include/asm-powerpc/paca.h @@ -21,7 +21,18 @@ #include <asm/mmu.h> register struct paca_struct *local_paca asm("r13"); + +#if defined(CONFIG_DEBUG_PREEMPT) && defined(CONFIG_SMP) +extern unsigned int debug_smp_processor_id(void); /* from linux/smp.h */ +/* + * Add standard checks that preemption cannot occur when using get_paca(): + * otherwise the paca_struct it points to may be the wrong one just after. + */ +#define get_paca() ((void) debug_smp_processor_id(), local_paca) +#else #define get_paca() local_paca +#endif + #define get_lppaca() (get_paca()->lppaca_ptr) #define get_slb_shadow() (get_paca()->slb_shadow_ptr) |