diff options
Diffstat (limited to 'arch/powerpc/kernel/entry_64.S')
| -rw-r--r-- | arch/powerpc/kernel/entry_64.S | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index 8741c854e03d..ab15b8d057ad 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S | |||
| @@ -629,21 +629,43 @@ _GLOBAL(ret_from_except_lite) | |||
| 629 | 629 | ||
| 630 | CURRENT_THREAD_INFO(r9, r1) | 630 | CURRENT_THREAD_INFO(r9, r1) |
| 631 | ld r3,_MSR(r1) | 631 | ld r3,_MSR(r1) |
| 632 | #ifdef CONFIG_PPC_BOOK3E | ||
| 633 | ld r10,PACACURRENT(r13) | ||
| 634 | #endif /* CONFIG_PPC_BOOK3E */ | ||
| 632 | ld r4,TI_FLAGS(r9) | 635 | ld r4,TI_FLAGS(r9) |
| 633 | andi. r3,r3,MSR_PR | 636 | andi. r3,r3,MSR_PR |
| 634 | beq resume_kernel | 637 | beq resume_kernel |
| 638 | #ifdef CONFIG_PPC_BOOK3E | ||
| 639 | lwz r3,(THREAD+THREAD_DBCR0)(r10) | ||
| 640 | #endif /* CONFIG_PPC_BOOK3E */ | ||
| 635 | 641 | ||
| 636 | /* Check current_thread_info()->flags */ | 642 | /* Check current_thread_info()->flags */ |
| 637 | andi. r0,r4,_TIF_USER_WORK_MASK | 643 | andi. r0,r4,_TIF_USER_WORK_MASK |
| 644 | #ifdef CONFIG_PPC_BOOK3E | ||
| 645 | bne 1f | ||
| 646 | /* | ||
| 647 | * Check to see if the dbcr0 register is set up to debug. | ||
| 648 | * Use the internal debug mode bit to do this. | ||
| 649 | */ | ||
| 650 | andis. r0,r3,DBCR0_IDM@h | ||
| 638 | beq restore | 651 | beq restore |
| 639 | 652 | mfmsr r0 | |
| 640 | andi. r0,r4,_TIF_NEED_RESCHED | 653 | rlwinm r0,r0,0,~MSR_DE /* Clear MSR.DE */ |
| 641 | beq 1f | 654 | mtmsr r0 |
| 655 | mtspr SPRN_DBCR0,r3 | ||
| 656 | li r10, -1 | ||
| 657 | mtspr SPRN_DBSR,r10 | ||
| 658 | b restore | ||
| 659 | #else | ||
| 660 | beq restore | ||
| 661 | #endif | ||
| 662 | 1: andi. r0,r4,_TIF_NEED_RESCHED | ||
| 663 | beq 2f | ||
| 642 | bl .restore_interrupts | 664 | bl .restore_interrupts |
| 643 | SCHEDULE_USER | 665 | SCHEDULE_USER |
| 644 | b .ret_from_except_lite | 666 | b .ret_from_except_lite |
| 645 | 667 | ||
| 646 | 1: bl .save_nvgprs | 668 | 2: bl .save_nvgprs |
| 647 | bl .restore_interrupts | 669 | bl .restore_interrupts |
| 648 | addi r3,r1,STACK_FRAME_OVERHEAD | 670 | addi r3,r1,STACK_FRAME_OVERHEAD |
| 649 | bl .do_notify_resume | 671 | bl .do_notify_resume |
