diff options
author | Michael Ellerman <mpe@ellerman.id.au> | 2014-07-15 07:15:38 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2014-07-28 00:11:24 -0400 |
commit | 9daf112bd41ee9ca24a9a87adc70f70400a2ba5b (patch) | |
tree | 1ec965d62a5e41ba6741721327482fd13a3a14e9 | |
parent | a1d711c53f413db330da57bfaf53255a5d62447e (diff) |
powerpc: Remove misleading DISABLE_INTS
DISABLE_INTS has a long and storied history, but for some time now it
has not actually disabled interrupts.
For the open-coded exception handlers, just stop using it, instead call
RECONCILE_IRQ_STATE directly. This has the benefit of removing a level
of indirection, and making it clear that r10 & r11 are used at that
point.
For the addition case we still need a macro, so rename it to clarify
what it actually does.
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
-rw-r--r-- | arch/powerpc/include/asm/exception-64s.h | 11 | ||||
-rw-r--r-- | arch/powerpc/kernel/exceptions-64s.S | 28 |
2 files changed, 21 insertions, 18 deletions
diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h index 066c15cd2837..13a63379e496 100644 --- a/arch/powerpc/include/asm/exception-64s.h +++ b/arch/powerpc/include/asm/exception-64s.h | |||
@@ -513,8 +513,11 @@ label##_relon_hv: \ | |||
513 | * runlatch, etc... | 513 | * runlatch, etc... |
514 | */ | 514 | */ |
515 | 515 | ||
516 | /* Exception addition: Hard disable interrupts */ | 516 | /* |
517 | #define DISABLE_INTS RECONCILE_IRQ_STATE(r10,r11) | 517 | * This addition reconciles our actual IRQ state with the various software |
518 | * flags that track it. This may call C code. | ||
519 | */ | ||
520 | #define ADD_RECONCILE RECONCILE_IRQ_STATE(r10,r11) | ||
518 | 521 | ||
519 | #define ADD_NVGPRS \ | 522 | #define ADD_NVGPRS \ |
520 | bl save_nvgprs | 523 | bl save_nvgprs |
@@ -540,7 +543,7 @@ label##_common: \ | |||
540 | 543 | ||
541 | #define STD_EXCEPTION_COMMON(trap, label, hdlr) \ | 544 | #define STD_EXCEPTION_COMMON(trap, label, hdlr) \ |
542 | EXCEPTION_COMMON(trap, label, hdlr, ret_from_except, \ | 545 | EXCEPTION_COMMON(trap, label, hdlr, ret_from_except, \ |
543 | ADD_NVGPRS;DISABLE_INTS) | 546 | ADD_NVGPRS;ADD_RECONCILE) |
544 | 547 | ||
545 | /* | 548 | /* |
546 | * Like STD_EXCEPTION_COMMON, but for exceptions that can occur | 549 | * Like STD_EXCEPTION_COMMON, but for exceptions that can occur |
@@ -549,7 +552,7 @@ label##_common: \ | |||
549 | */ | 552 | */ |
550 | #define STD_EXCEPTION_COMMON_ASYNC(trap, label, hdlr) \ | 553 | #define STD_EXCEPTION_COMMON_ASYNC(trap, label, hdlr) \ |
551 | EXCEPTION_COMMON(trap, label, hdlr, ret_from_except_lite, \ | 554 | EXCEPTION_COMMON(trap, label, hdlr, ret_from_except_lite, \ |
552 | FINISH_NAP;DISABLE_INTS;RUNLATCH_ON) | 555 | FINISH_NAP;ADD_RECONCILE;RUNLATCH_ON) |
553 | 556 | ||
554 | /* | 557 | /* |
555 | * When the idle code in power4_idle puts the CPU into NAP mode, | 558 | * When the idle code in power4_idle puts the CPU into NAP mode, |
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index 647d6c75ed62..f521b2dac051 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S | |||
@@ -965,7 +965,7 @@ data_access_common: | |||
965 | mfspr r10,SPRN_DSISR | 965 | mfspr r10,SPRN_DSISR |
966 | stw r10,PACA_EXGEN+EX_DSISR(r13) | 966 | stw r10,PACA_EXGEN+EX_DSISR(r13) |
967 | EXCEPTION_PROLOG_COMMON(0x300, PACA_EXGEN) | 967 | EXCEPTION_PROLOG_COMMON(0x300, PACA_EXGEN) |
968 | DISABLE_INTS | 968 | RECONCILE_IRQ_STATE(r10, r11) |
969 | ld r12,_MSR(r1) | 969 | ld r12,_MSR(r1) |
970 | ld r3,PACA_EXGEN+EX_DAR(r13) | 970 | ld r3,PACA_EXGEN+EX_DAR(r13) |
971 | lwz r4,PACA_EXGEN+EX_DSISR(r13) | 971 | lwz r4,PACA_EXGEN+EX_DSISR(r13) |
@@ -981,7 +981,7 @@ h_data_storage_common: | |||
981 | stw r10,PACA_EXGEN+EX_DSISR(r13) | 981 | stw r10,PACA_EXGEN+EX_DSISR(r13) |
982 | EXCEPTION_PROLOG_COMMON(0xe00, PACA_EXGEN) | 982 | EXCEPTION_PROLOG_COMMON(0xe00, PACA_EXGEN) |
983 | bl save_nvgprs | 983 | bl save_nvgprs |
984 | DISABLE_INTS | 984 | RECONCILE_IRQ_STATE(r10, r11) |
985 | addi r3,r1,STACK_FRAME_OVERHEAD | 985 | addi r3,r1,STACK_FRAME_OVERHEAD |
986 | bl unknown_exception | 986 | bl unknown_exception |
987 | b ret_from_except | 987 | b ret_from_except |
@@ -990,7 +990,7 @@ h_data_storage_common: | |||
990 | .globl instruction_access_common | 990 | .globl instruction_access_common |
991 | instruction_access_common: | 991 | instruction_access_common: |
992 | EXCEPTION_PROLOG_COMMON(0x400, PACA_EXGEN) | 992 | EXCEPTION_PROLOG_COMMON(0x400, PACA_EXGEN) |
993 | DISABLE_INTS | 993 | RECONCILE_IRQ_STATE(r10, r11) |
994 | ld r12,_MSR(r1) | 994 | ld r12,_MSR(r1) |
995 | ld r3,_NIP(r1) | 995 | ld r3,_NIP(r1) |
996 | andis. r4,r12,0x5820 | 996 | andis. r4,r12,0x5820 |
@@ -1054,7 +1054,7 @@ slb_miss_fault: | |||
1054 | 1054 | ||
1055 | unrecov_user_slb: | 1055 | unrecov_user_slb: |
1056 | EXCEPTION_PROLOG_COMMON(0x4200, PACA_EXGEN) | 1056 | EXCEPTION_PROLOG_COMMON(0x4200, PACA_EXGEN) |
1057 | DISABLE_INTS | 1057 | RECONCILE_IRQ_STATE(r10, r11) |
1058 | bl save_nvgprs | 1058 | bl save_nvgprs |
1059 | 1: addi r3,r1,STACK_FRAME_OVERHEAD | 1059 | 1: addi r3,r1,STACK_FRAME_OVERHEAD |
1060 | bl unrecoverable_exception | 1060 | bl unrecoverable_exception |
@@ -1077,7 +1077,7 @@ machine_check_common: | |||
1077 | stw r10,PACA_EXGEN+EX_DSISR(r13) | 1077 | stw r10,PACA_EXGEN+EX_DSISR(r13) |
1078 | EXCEPTION_PROLOG_COMMON(0x200, PACA_EXMC) | 1078 | EXCEPTION_PROLOG_COMMON(0x200, PACA_EXMC) |
1079 | FINISH_NAP | 1079 | FINISH_NAP |
1080 | DISABLE_INTS | 1080 | RECONCILE_IRQ_STATE(r10, r11) |
1081 | ld r3,PACA_EXGEN+EX_DAR(r13) | 1081 | ld r3,PACA_EXGEN+EX_DAR(r13) |
1082 | lwz r4,PACA_EXGEN+EX_DSISR(r13) | 1082 | lwz r4,PACA_EXGEN+EX_DSISR(r13) |
1083 | std r3,_DAR(r1) | 1083 | std r3,_DAR(r1) |
@@ -1100,7 +1100,7 @@ alignment_common: | |||
1100 | std r3,_DAR(r1) | 1100 | std r3,_DAR(r1) |
1101 | std r4,_DSISR(r1) | 1101 | std r4,_DSISR(r1) |
1102 | bl save_nvgprs | 1102 | bl save_nvgprs |
1103 | DISABLE_INTS | 1103 | RECONCILE_IRQ_STATE(r10, r11) |
1104 | addi r3,r1,STACK_FRAME_OVERHEAD | 1104 | addi r3,r1,STACK_FRAME_OVERHEAD |
1105 | bl alignment_exception | 1105 | bl alignment_exception |
1106 | b ret_from_except | 1106 | b ret_from_except |
@@ -1110,7 +1110,7 @@ alignment_common: | |||
1110 | program_check_common: | 1110 | program_check_common: |
1111 | EXCEPTION_PROLOG_COMMON(0x700, PACA_EXGEN) | 1111 | EXCEPTION_PROLOG_COMMON(0x700, PACA_EXGEN) |
1112 | bl save_nvgprs | 1112 | bl save_nvgprs |
1113 | DISABLE_INTS | 1113 | RECONCILE_IRQ_STATE(r10, r11) |
1114 | addi r3,r1,STACK_FRAME_OVERHEAD | 1114 | addi r3,r1,STACK_FRAME_OVERHEAD |
1115 | bl program_check_exception | 1115 | bl program_check_exception |
1116 | b ret_from_except | 1116 | b ret_from_except |
@@ -1121,7 +1121,7 @@ fp_unavailable_common: | |||
1121 | EXCEPTION_PROLOG_COMMON(0x800, PACA_EXGEN) | 1121 | EXCEPTION_PROLOG_COMMON(0x800, PACA_EXGEN) |
1122 | bne 1f /* if from user, just load it up */ | 1122 | bne 1f /* if from user, just load it up */ |
1123 | bl save_nvgprs | 1123 | bl save_nvgprs |
1124 | DISABLE_INTS | 1124 | RECONCILE_IRQ_STATE(r10, r11) |
1125 | addi r3,r1,STACK_FRAME_OVERHEAD | 1125 | addi r3,r1,STACK_FRAME_OVERHEAD |
1126 | bl kernel_fp_unavailable_exception | 1126 | bl kernel_fp_unavailable_exception |
1127 | BUG_OPCODE | 1127 | BUG_OPCODE |
@@ -1140,7 +1140,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_TM) | |||
1140 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | 1140 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM |
1141 | 2: /* User process was in a transaction */ | 1141 | 2: /* User process was in a transaction */ |
1142 | bl save_nvgprs | 1142 | bl save_nvgprs |
1143 | DISABLE_INTS | 1143 | RECONCILE_IRQ_STATE(r10, r11) |
1144 | addi r3,r1,STACK_FRAME_OVERHEAD | 1144 | addi r3,r1,STACK_FRAME_OVERHEAD |
1145 | bl fp_unavailable_tm | 1145 | bl fp_unavailable_tm |
1146 | b ret_from_except | 1146 | b ret_from_except |
@@ -1166,7 +1166,7 @@ BEGIN_FTR_SECTION | |||
1166 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | 1166 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM |
1167 | 2: /* User process was in a transaction */ | 1167 | 2: /* User process was in a transaction */ |
1168 | bl save_nvgprs | 1168 | bl save_nvgprs |
1169 | DISABLE_INTS | 1169 | RECONCILE_IRQ_STATE(r10, r11) |
1170 | addi r3,r1,STACK_FRAME_OVERHEAD | 1170 | addi r3,r1,STACK_FRAME_OVERHEAD |
1171 | bl altivec_unavailable_tm | 1171 | bl altivec_unavailable_tm |
1172 | b ret_from_except | 1172 | b ret_from_except |
@@ -1175,7 +1175,7 @@ BEGIN_FTR_SECTION | |||
1175 | END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) | 1175 | END_FTR_SECTION_IFSET(CPU_FTR_ALTIVEC) |
1176 | #endif | 1176 | #endif |
1177 | bl save_nvgprs | 1177 | bl save_nvgprs |
1178 | DISABLE_INTS | 1178 | RECONCILE_IRQ_STATE(r10, r11) |
1179 | addi r3,r1,STACK_FRAME_OVERHEAD | 1179 | addi r3,r1,STACK_FRAME_OVERHEAD |
1180 | bl altivec_unavailable_exception | 1180 | bl altivec_unavailable_exception |
1181 | b ret_from_except | 1181 | b ret_from_except |
@@ -1200,7 +1200,7 @@ BEGIN_FTR_SECTION | |||
1200 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | 1200 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM |
1201 | 2: /* User process was in a transaction */ | 1201 | 2: /* User process was in a transaction */ |
1202 | bl save_nvgprs | 1202 | bl save_nvgprs |
1203 | DISABLE_INTS | 1203 | RECONCILE_IRQ_STATE(r10, r11) |
1204 | addi r3,r1,STACK_FRAME_OVERHEAD | 1204 | addi r3,r1,STACK_FRAME_OVERHEAD |
1205 | bl vsx_unavailable_tm | 1205 | bl vsx_unavailable_tm |
1206 | b ret_from_except | 1206 | b ret_from_except |
@@ -1209,7 +1209,7 @@ BEGIN_FTR_SECTION | |||
1209 | END_FTR_SECTION_IFSET(CPU_FTR_VSX) | 1209 | END_FTR_SECTION_IFSET(CPU_FTR_VSX) |
1210 | #endif | 1210 | #endif |
1211 | bl save_nvgprs | 1211 | bl save_nvgprs |
1212 | DISABLE_INTS | 1212 | RECONCILE_IRQ_STATE(r10, r11) |
1213 | addi r3,r1,STACK_FRAME_OVERHEAD | 1213 | addi r3,r1,STACK_FRAME_OVERHEAD |
1214 | bl vsx_unavailable_exception | 1214 | bl vsx_unavailable_exception |
1215 | b ret_from_except | 1215 | b ret_from_except |
@@ -1468,7 +1468,7 @@ slb_miss_realmode: | |||
1468 | 1468 | ||
1469 | unrecov_slb: | 1469 | unrecov_slb: |
1470 | EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB) | 1470 | EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB) |
1471 | DISABLE_INTS | 1471 | RECONCILE_IRQ_STATE(r10, r11) |
1472 | bl save_nvgprs | 1472 | bl save_nvgprs |
1473 | 1: addi r3,r1,STACK_FRAME_OVERHEAD | 1473 | 1: addi r3,r1,STACK_FRAME_OVERHEAD |
1474 | bl unrecoverable_exception | 1474 | bl unrecoverable_exception |