aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/exceptions-64s.S
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2009-08-19 21:07:56 -0400
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2009-08-19 21:07:56 -0400
commit4f0dbc2781b9dc457159b676289f874ab2dc3560 (patch)
tree2b8af0f301eaf0bc47d643b99d48a84611b4bed3 /arch/powerpc/kernel/exceptions-64s.S
parent3c15a68880023722fc794018768df556f438ae98 (diff)
parent20002ded4d937ca87aca6253b874920a96a763c4 (diff)
Merge commit 'paulus-perf/master' into next
Diffstat (limited to 'arch/powerpc/kernel/exceptions-64s.S')
-rw-r--r--arch/powerpc/kernel/exceptions-64s.S19
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
index 50f2ad36ed09..1808876edcc9 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -731,6 +731,11 @@ BEGIN_FTR_SECTION
731 bne- do_ste_alloc /* If so handle it */ 731 bne- do_ste_alloc /* If so handle it */
732END_FTR_SECTION_IFCLR(CPU_FTR_SLB) 732END_FTR_SECTION_IFCLR(CPU_FTR_SLB)
733 733
734 clrrdi r11,r1,THREAD_SHIFT
735 lwz r0,TI_PREEMPT(r11) /* If we're in an "NMI" */
736 andis. r0,r0,NMI_MASK@h /* (i.e. an irq when soft-disabled) */
737 bne 77f /* then don't call hash_page now */
738
734 /* 739 /*
735 * On iSeries, we soft-disable interrupts here, then 740 * On iSeries, we soft-disable interrupts here, then
736 * hard-enable interrupts so that the hash_page code can spin on 741 * hard-enable interrupts so that the hash_page code can spin on
@@ -835,6 +840,20 @@ handle_page_fault:
835 bl .low_hash_fault 840 bl .low_hash_fault
836 b .ret_from_except 841 b .ret_from_except
837 842
843/*
844 * We come here as a result of a DSI at a point where we don't want
845 * to call hash_page, such as when we are accessing memory (possibly
846 * user memory) inside a PMU interrupt that occurred while interrupts
847 * were soft-disabled. We want to invoke the exception handler for
848 * the access, or panic if there isn't a handler.
849 */
85077: bl .save_nvgprs
851 mr r4,r3
852 addi r3,r1,STACK_FRAME_OVERHEAD
853 li r5,SIGSEGV
854 bl .bad_page_fault
855 b .ret_from_except
856
838 /* here we have a segment miss */ 857 /* here we have a segment miss */
839do_ste_alloc: 858do_ste_alloc:
840 bl .ste_allocate /* try to insert stab entry */ 859 bl .ste_allocate /* try to insert stab entry */