From: Paul Mackerras Date: Mon, 4 Dec 2006 04:59:07 +0000 (+1100) Subject: Merge branch 'linux-2.6' into for-linus X-Git-Tag: v2.6.20-rc1~34^2~40^2~8^2~143 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79acbb3ff2d8095b692e1502b9eb2ccec348de26;p=linux-2.6 Merge branch 'linux-2.6' into for-linus --- 79acbb3ff2d8095b692e1502b9eb2ccec348de26 diff --cc arch/powerpc/kernel/head_64.S index 76d1c81afe,e720729f3e..8cdff5a1f3 --- a/arch/powerpc/kernel/head_64.S +++ b/arch/powerpc/kernel/head_64.S @@@ -613,27 -597,10 +613,27 @@@ system_call_pSeries /*** pSeries interrupt support ***/ /* moved from 0xf00 */ - STD_EXCEPTION_PSERIES(., performance_monitor) + MASKABLE_EXCEPTION_PSERIES(., performance_monitor) + +/* + * An interrupt came in while soft-disabled; clear EE in SRR1, + * clear paca->hard_enabled and return. + */ +masked_interrupt: + stb r10,PACAHARDIRQEN(r13) + mtcrf 0x80,r9 + ld r9,PACA_EXGEN+EX_R9(r13) + mfspr r10,SPRN_SRR1 + rldicl r10,r10,48,1 /* clear MSR_EE */ + rotldi r10,r10,16 + mtspr SPRN_SRR1,r10 + ld r10,PACA_EXGEN+EX_R10(r13) + mfspr r13,SPRN_SPRG1 + rfid + b . .align 7 - _GLOBAL(do_stab_bolted_pSeries) + do_stab_bolted_pSeries: mtcrf 0x80,r12 mfspr r12,SPRN_SPRG2 EXCEPTION_PROLOG_PSERIES(PACA_EXSLB, .do_stab_bolted) @@@ -1366,17 -1325,7 +1367,17 @@@ BEGIN_FW_FTR_SECTIO * because ret_from_except_lite will check for and handle pending * interrupts if necessary. */ - beq .ret_from_except_lite + beq 13f +END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) +#endif +BEGIN_FW_FTR_SECTION + /* + * Here we have interrupts hard-disabled, so it is sufficient + * to restore paca->{soft,hard}_enable and get out. + */ + beq fast_exc_return_irq /* Return from exception on success */ +END_FW_FTR_SECTION_IFCLR(FW_FEATURE_ISERIES) + /* For a hash failure, we don't bother re-enabling interrupts */ ble- 12f @@@ -1388,9 -1337,17 +1389,9 @@@ ld r3,SOFTE(r1) bl .local_irq_restore b 11f -END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES) -#endif -BEGIN_FW_FTR_SECTION - beq fast_exception_return /* Return from exception on success */ - ble- 12f /* Failure return from hash_page */ - - /* fall through */ -END_FW_FTR_SECTION_IFCLR(FW_FEATURE_ISERIES) /* Here we have a page fault that hash_page can't handle. */ - _GLOBAL(handle_page_fault) + handle_page_fault: ENABLE_INTS 11: ld r4,_DAR(r1) ld r5,_DSISR(r1) @@@ -1405,6 -1362,6 +1406,8 @@@ bl .bad_page_fault b .ret_from_except ++13: b .ret_from_except_lite ++ /* We have a page fault that hash_page could handle but HV refused * the PTE insertion */ @@@ -1414,12 -1371,14 +1417,12 @@@ bl .low_hash_fault b .ret_from_except -13: b .ret_from_except_lite - /* here we have a segment miss */ - _GLOBAL(do_ste_alloc) + do_ste_alloc: bl .ste_allocate /* try to insert stab entry */ cmpdi r3,0 - beq+ fast_exception_return - b .handle_page_fault + bne- handle_page_fault + b fast_exception_return /* * r13 points to the PACA, r9 contains the saved CR,