diff options
Diffstat (limited to 'arch/microblaze/kernel/entry.S')
-rw-r--r-- | arch/microblaze/kernel/entry.S | 30 |
1 files changed, 13 insertions, 17 deletions
diff --git a/arch/microblaze/kernel/entry.S b/arch/microblaze/kernel/entry.S index 66e34a3bfe1b..daff9e5e4a1f 100644 --- a/arch/microblaze/kernel/entry.S +++ b/arch/microblaze/kernel/entry.S | |||
@@ -430,13 +430,12 @@ C_ENTRY(ret_from_trap): | |||
430 | 5: /* get thread info from current task*/ | 430 | 5: /* get thread info from current task*/ |
431 | lwi r11, CURRENT_TASK, TS_THREAD_INFO; | 431 | lwi r11, CURRENT_TASK, TS_THREAD_INFO; |
432 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ | 432 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ |
433 | andi r11, r11, _TIF_SIGPENDING; | 433 | andi r11, r11, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME; |
434 | beqi r11, 1f; /* Signals to handle, handle them */ | 434 | beqi r11, 1f; /* Signals to handle, handle them */ |
435 | 435 | ||
436 | addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ | 436 | addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ |
437 | addi r7, r0, 1; /* Arg 3: int in_syscall */ | 437 | bralid r15, do_notify_resume; /* Handle any signals */ |
438 | bralid r15, do_signal; /* Handle any signals */ | 438 | addi r6, r0, 1; /* Arg 2: int in_syscall */ |
439 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ | ||
440 | 439 | ||
441 | /* Finally, return to user state. */ | 440 | /* Finally, return to user state. */ |
442 | 1: set_bip; /* Ints masked for state restore */ | 441 | 1: set_bip; /* Ints masked for state restore */ |
@@ -622,7 +621,7 @@ C_ENTRY(ret_from_exc): | |||
622 | /* Maybe handle a signal */ | 621 | /* Maybe handle a signal */ |
623 | 5: lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* get thread info */ | 622 | 5: lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* get thread info */ |
624 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ | 623 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ |
625 | andi r11, r11, _TIF_SIGPENDING; | 624 | andi r11, r11, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME; |
626 | beqi r11, 1f; /* Signals to handle, handle them */ | 625 | beqi r11, 1f; /* Signals to handle, handle them */ |
627 | 626 | ||
628 | /* | 627 | /* |
@@ -635,11 +634,10 @@ C_ENTRY(ret_from_exc): | |||
635 | * traps), but signal handlers may want to examine or change the | 634 | * traps), but signal handlers may want to examine or change the |
636 | * complete register state. Here we save anything not saved by | 635 | * complete register state. Here we save anything not saved by |
637 | * the normal entry sequence, so that it may be safely restored | 636 | * the normal entry sequence, so that it may be safely restored |
638 | * (in a possibly modified form) after do_signal returns. */ | 637 | * (in a possibly modified form) after do_notify_resume returns. */ |
639 | addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ | 638 | addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ |
640 | addi r7, r0, 0; /* Arg 3: int in_syscall */ | 639 | bralid r15, do_notify_resume; /* Handle any signals */ |
641 | bralid r15, do_signal; /* Handle any signals */ | 640 | addi r6, r0, 0; /* Arg 2: int in_syscall */ |
642 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ | ||
643 | 641 | ||
644 | /* Finally, return to user state. */ | 642 | /* Finally, return to user state. */ |
645 | 1: set_bip; /* Ints masked for state restore */ | 643 | 1: set_bip; /* Ints masked for state restore */ |
@@ -732,13 +730,12 @@ ret_from_irq: | |||
732 | /* Maybe handle a signal */ | 730 | /* Maybe handle a signal */ |
733 | 5: lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* MS: get thread info */ | 731 | 5: lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* MS: get thread info */ |
734 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ | 732 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ |
735 | andi r11, r11, _TIF_SIGPENDING; | 733 | andi r11, r11, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME; |
736 | beqid r11, no_intr_resched | 734 | beqid r11, no_intr_resched |
737 | /* Handle a signal return; Pending signals should be in r18. */ | 735 | /* Handle a signal return; Pending signals should be in r18. */ |
738 | addi r7, r0, 0; /* Arg 3: int in_syscall */ | ||
739 | addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ | 736 | addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ |
740 | bralid r15, do_signal; /* Handle any signals */ | 737 | bralid r15, do_notify_resume; /* Handle any signals */ |
741 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ | 738 | addi r6, r0, 0; /* Arg 2: int in_syscall */ |
742 | 739 | ||
743 | /* Finally, return to user state. */ | 740 | /* Finally, return to user state. */ |
744 | no_intr_resched: | 741 | no_intr_resched: |
@@ -869,13 +866,12 @@ dbtrap_call: /* Return point for kernel/user entry + 8 because of rtsd r15, 8 */ | |||
869 | /* Maybe handle a signal */ | 866 | /* Maybe handle a signal */ |
870 | 5: lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* get thread info */ | 867 | 5: lwi r11, CURRENT_TASK, TS_THREAD_INFO; /* get thread info */ |
871 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ | 868 | lwi r11, r11, TI_FLAGS; /* get flags in thread info */ |
872 | andi r11, r11, _TIF_SIGPENDING; | 869 | andi r11, r11, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME; |
873 | beqi r11, 1f; /* Signals to handle, handle them */ | 870 | beqi r11, 1f; /* Signals to handle, handle them */ |
874 | 871 | ||
875 | addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ | 872 | addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ |
876 | addi r7, r0, 0; /* Arg 3: int in_syscall */ | 873 | bralid r15, do_notify_resume; /* Handle any signals */ |
877 | bralid r15, do_signal; /* Handle any signals */ | 874 | addi r6, r0, 0; /* Arg 2: int in_syscall */ |
878 | add r6, r0, r0; /* Arg 2: sigset_t *oldset */ | ||
879 | 875 | ||
880 | /* Finally, return to user state. */ | 876 | /* Finally, return to user state. */ |
881 | 1: swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ | 877 | 1: swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ |