diff options
author | Guenter Roeck <linux@roeck-us.net> | 2014-08-09 01:22:12 -0400 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2014-08-13 01:13:25 -0400 |
commit | 11d549048e5bea3055053d8dcf45089b1fd711f1 (patch) | |
tree | c621f0b08610159ba41763cbb80a017b9ba19865 /arch/powerpc | |
parent | 5d61a2172a0142c635ab6d7c3b1589af85a3603e (diff) |
powerpc: Fix "attempt to move .org backwards" error
Once again, we see
arch/powerpc/kernel/exceptions-64s.S: Assembler messages:
arch/powerpc/kernel/exceptions-64s.S:865: Error: attempt to move .org backwards
arch/powerpc/kernel/exceptions-64s.S:866: Error: attempt to move .org backwards
arch/powerpc/kernel/exceptions-64s.S:890: Error: attempt to move .org backwards
when compiling ppc:allmodconfig.
This time the problem has been caused by to commit 0869b6fd209bda
("powerpc/book3s: Add basic infrastructure to handle HMI in Linux"),
which adds functions hmi_exception_early and hmi_exception_after_realmode
into a critical (size-limited) code area, even though that does not appear
to be necessary.
Move those functions to a non-critical area of the file.
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/kernel/exceptions-64s.S | 110 |
1 files changed, 55 insertions, 55 deletions
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index 6144d5a6bfe7..050f79a4a168 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S | |||
@@ -592,61 +592,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_CFAR) | |||
592 | MASKABLE_EXCEPTION_HV_OOL(0xe62, hmi_exception) | 592 | MASKABLE_EXCEPTION_HV_OOL(0xe62, hmi_exception) |
593 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe62) | 593 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe62) |
594 | 594 | ||
595 | .globl hmi_exception_early | ||
596 | hmi_exception_early: | ||
597 | EXCEPTION_PROLOG_1(PACA_EXGEN, NOTEST, 0xe60) | ||
598 | mr r10,r1 /* Save r1 */ | ||
599 | ld r1,PACAEMERGSP(r13) /* Use emergency stack */ | ||
600 | subi r1,r1,INT_FRAME_SIZE /* alloc stack frame */ | ||
601 | std r9,_CCR(r1) /* save CR in stackframe */ | ||
602 | mfspr r11,SPRN_HSRR0 /* Save HSRR0 */ | ||
603 | std r11,_NIP(r1) /* save HSRR0 in stackframe */ | ||
604 | mfspr r12,SPRN_HSRR1 /* Save SRR1 */ | ||
605 | std r12,_MSR(r1) /* save SRR1 in stackframe */ | ||
606 | std r10,0(r1) /* make stack chain pointer */ | ||
607 | std r0,GPR0(r1) /* save r0 in stackframe */ | ||
608 | std r10,GPR1(r1) /* save r1 in stackframe */ | ||
609 | EXCEPTION_PROLOG_COMMON_2(PACA_EXGEN) | ||
610 | EXCEPTION_PROLOG_COMMON_3(0xe60) | ||
611 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
612 | bl hmi_exception_realmode | ||
613 | /* Windup the stack. */ | ||
614 | /* Clear MSR_RI before setting SRR0 and SRR1. */ | ||
615 | li r0,MSR_RI | ||
616 | mfmsr r9 /* get MSR value */ | ||
617 | andc r9,r9,r0 | ||
618 | mtmsrd r9,1 /* Clear MSR_RI */ | ||
619 | /* Move original HSRR0 and HSRR1 into the respective regs */ | ||
620 | ld r9,_MSR(r1) | ||
621 | mtspr SPRN_HSRR1,r9 | ||
622 | ld r3,_NIP(r1) | ||
623 | mtspr SPRN_HSRR0,r3 | ||
624 | ld r9,_CTR(r1) | ||
625 | mtctr r9 | ||
626 | ld r9,_XER(r1) | ||
627 | mtxer r9 | ||
628 | ld r9,_LINK(r1) | ||
629 | mtlr r9 | ||
630 | REST_GPR(0, r1) | ||
631 | REST_8GPRS(2, r1) | ||
632 | REST_GPR(10, r1) | ||
633 | ld r11,_CCR(r1) | ||
634 | mtcr r11 | ||
635 | REST_GPR(11, r1) | ||
636 | REST_2GPRS(12, r1) | ||
637 | /* restore original r1. */ | ||
638 | ld r1,GPR1(r1) | ||
639 | |||
640 | /* | ||
641 | * Go to virtual mode and pull the HMI event information from | ||
642 | * firmware. | ||
643 | */ | ||
644 | .globl hmi_exception_after_realmode | ||
645 | hmi_exception_after_realmode: | ||
646 | SET_SCRATCH0(r13) | ||
647 | EXCEPTION_PROLOG_0(PACA_EXGEN) | ||
648 | b hmi_exception_hv | ||
649 | |||
650 | MASKABLE_EXCEPTION_HV_OOL(0xe82, h_doorbell) | 595 | MASKABLE_EXCEPTION_HV_OOL(0xe82, h_doorbell) |
651 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe82) | 596 | KVM_HANDLER(PACA_EXGEN, EXC_HV, 0xe82) |
652 | 597 | ||
@@ -1306,6 +1251,61 @@ fwnmi_data_area: | |||
1306 | . = 0x8000 | 1251 | . = 0x8000 |
1307 | #endif /* defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV) */ | 1252 | #endif /* defined(CONFIG_PPC_PSERIES) || defined(CONFIG_PPC_POWERNV) */ |
1308 | 1253 | ||
1254 | .globl hmi_exception_early | ||
1255 | hmi_exception_early: | ||
1256 | EXCEPTION_PROLOG_1(PACA_EXGEN, NOTEST, 0xe60) | ||
1257 | mr r10,r1 /* Save r1 */ | ||
1258 | ld r1,PACAEMERGSP(r13) /* Use emergency stack */ | ||
1259 | subi r1,r1,INT_FRAME_SIZE /* alloc stack frame */ | ||
1260 | std r9,_CCR(r1) /* save CR in stackframe */ | ||
1261 | mfspr r11,SPRN_HSRR0 /* Save HSRR0 */ | ||
1262 | std r11,_NIP(r1) /* save HSRR0 in stackframe */ | ||
1263 | mfspr r12,SPRN_HSRR1 /* Save SRR1 */ | ||
1264 | std r12,_MSR(r1) /* save SRR1 in stackframe */ | ||
1265 | std r10,0(r1) /* make stack chain pointer */ | ||
1266 | std r0,GPR0(r1) /* save r0 in stackframe */ | ||
1267 | std r10,GPR1(r1) /* save r1 in stackframe */ | ||
1268 | EXCEPTION_PROLOG_COMMON_2(PACA_EXGEN) | ||
1269 | EXCEPTION_PROLOG_COMMON_3(0xe60) | ||
1270 | addi r3,r1,STACK_FRAME_OVERHEAD | ||
1271 | bl hmi_exception_realmode | ||
1272 | /* Windup the stack. */ | ||
1273 | /* Clear MSR_RI before setting SRR0 and SRR1. */ | ||
1274 | li r0,MSR_RI | ||
1275 | mfmsr r9 /* get MSR value */ | ||
1276 | andc r9,r9,r0 | ||
1277 | mtmsrd r9,1 /* Clear MSR_RI */ | ||
1278 | /* Move original HSRR0 and HSRR1 into the respective regs */ | ||
1279 | ld r9,_MSR(r1) | ||
1280 | mtspr SPRN_HSRR1,r9 | ||
1281 | ld r3,_NIP(r1) | ||
1282 | mtspr SPRN_HSRR0,r3 | ||
1283 | ld r9,_CTR(r1) | ||
1284 | mtctr r9 | ||
1285 | ld r9,_XER(r1) | ||
1286 | mtxer r9 | ||
1287 | ld r9,_LINK(r1) | ||
1288 | mtlr r9 | ||
1289 | REST_GPR(0, r1) | ||
1290 | REST_8GPRS(2, r1) | ||
1291 | REST_GPR(10, r1) | ||
1292 | ld r11,_CCR(r1) | ||
1293 | mtcr r11 | ||
1294 | REST_GPR(11, r1) | ||
1295 | REST_2GPRS(12, r1) | ||
1296 | /* restore original r1. */ | ||
1297 | ld r1,GPR1(r1) | ||
1298 | |||
1299 | /* | ||
1300 | * Go to virtual mode and pull the HMI event information from | ||
1301 | * firmware. | ||
1302 | */ | ||
1303 | .globl hmi_exception_after_realmode | ||
1304 | hmi_exception_after_realmode: | ||
1305 | SET_SCRATCH0(r13) | ||
1306 | EXCEPTION_PROLOG_0(PACA_EXGEN) | ||
1307 | b hmi_exception_hv | ||
1308 | |||
1309 | #ifdef CONFIG_PPC_POWERNV | 1309 | #ifdef CONFIG_PPC_POWERNV |
1310 | _GLOBAL(opal_mc_secondary_handler) | 1310 | _GLOBAL(opal_mc_secondary_handler) |
1311 | HMT_MEDIUM_PPR_DISCARD | 1311 | HMT_MEDIUM_PPR_DISCARD |