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 | |
| 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>
| -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 |
