From: Benjamin Herrenschmidt Date: Thu, 20 Aug 2009 01:07:56 +0000 (+1000) Subject: Merge commit 'paulus-perf/master' into next X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=4f0dbc2781b9dc457159b676289f874ab2dc3560;p=deliverable%2Flinux.git Merge commit 'paulus-perf/master' into next --- 4f0dbc2781b9dc457159b676289f874ab2dc3560 diff --cc arch/powerpc/mm/slb.c index 6bc8b4aeba5c,a685652effeb..07961c5c169e --- a/arch/powerpc/mm/slb.c +++ b/arch/powerpc/mm/slb.c @@@ -184,8 -191,16 +191,16 @@@ void switch_slb(struct task_struct *tsk unsigned long slbie_data = 0; unsigned long pc = KSTK_EIP(tsk); unsigned long stack = KSTK_ESP(tsk); - unsigned long unmapped_base; + unsigned long exec_base; + /* + * We need interrupts hard-disabled here, not just soft-disabled, + * so that a PMU interrupt can't occur, which might try to access + * user memory (to get a stack trace) and possible cause an SLB miss + * which would update the slb_cache/slb_cache_ptr fields in the PACA. + */ + hard_irq_disable(); + offset = get_paca()->slb_cache_ptr; if (!cpu_has_feature(CPU_FTR_NO_SLBIE_B) && offset <= SLB_CACHE_ENTRIES) { int i;