Loading arch/microblaze/kernel/entry-nommu.S +1 −3 Original line number Original line Diff line number Diff line Loading @@ -135,7 +135,6 @@ ret_from_intr: 1: andi r11, r19, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME 1: andi r11, r19, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME beqid r11, no_intr_resched beqid r11, no_intr_resched addk r5, r1, r0 addk r5, r1, r0 addk r7, r0, r0 bralid r15, do_notify_resume bralid r15, do_notify_resume addk r6, r0, r0 addk r6, r0, r0 Loading Loading @@ -485,9 +484,8 @@ work_pending: 1: andi r11, r19, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME 1: andi r11, r19, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME beqi r11, no_work_pending beqi r11, no_work_pending addk r5, r1, r0 addk r5, r1, r0 addik r7, r0, 1 bralid r15, do_notify_resume bralid r15, do_notify_resume addk r6, r0, r0 addik r6, r0, 1 bri no_work_pending bri no_work_pending ENTRY(ret_to_user) ENTRY(ret_to_user) Loading arch/microblaze/kernel/entry.S +4 −8 Original line number Original line Diff line number Diff line Loading @@ -434,9 +434,8 @@ C_ENTRY(ret_from_trap): beqi r11, 1f; /* Signals to handle, handle them */ beqi r11, 1f; /* Signals to handle, handle them */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ addi r7, r0, 1; /* Arg 3: int in_syscall */ bralid r15, do_notify_resume; /* Handle any signals */ bralid r15, do_notify_resume; /* Handle any signals */ add r6, r0, r0; /* Arg 2: sigset_t *oldset */ addi r6, r0, 1; /* Arg 2: int in_syscall */ /* Finally, return to user state. */ /* Finally, return to user state. */ 1: set_bip; /* Ints masked for state restore */ 1: set_bip; /* Ints masked for state restore */ Loading Loading @@ -637,9 +636,8 @@ C_ENTRY(ret_from_exc): * the normal entry sequence, so that it may be safely restored * the normal entry sequence, so that it may be safely restored * (in a possibly modified form) after do_notify_resume returns. */ * (in a possibly modified form) after do_notify_resume returns. */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ addi r7, r0, 0; /* Arg 3: int in_syscall */ bralid r15, do_notify_resume; /* Handle any signals */ bralid r15, do_notify_resume; /* Handle any signals */ add r6, r0, r0; /* Arg 2: sigset_t *oldset */ addi r6, r0, 0; /* Arg 2: int in_syscall */ /* Finally, return to user state. */ /* Finally, return to user state. */ 1: set_bip; /* Ints masked for state restore */ 1: set_bip; /* Ints masked for state restore */ Loading Loading @@ -735,10 +733,9 @@ ret_from_irq: andi r11, r11, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME; andi r11, r11, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME; beqid r11, no_intr_resched beqid r11, no_intr_resched /* Handle a signal return; Pending signals should be in r18. */ /* Handle a signal return; Pending signals should be in r18. */ addi r7, r0, 0; /* Arg 3: int in_syscall */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ bralid r15, do_notify_resume; /* Handle any signals */ bralid r15, do_notify_resume; /* Handle any signals */ add r6, r0, r0; /* Arg 2: sigset_t *oldset */ addi r6, r0, 0; /* Arg 2: int in_syscall */ /* Finally, return to user state. */ /* Finally, return to user state. */ no_intr_resched: no_intr_resched: Loading Loading @@ -873,9 +870,8 @@ dbtrap_call: /* Return point for kernel/user entry + 8 because of rtsd r15, 8 */ beqi r11, 1f; /* Signals to handle, handle them */ beqi r11, 1f; /* Signals to handle, handle them */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ addi r7, r0, 0; /* Arg 3: int in_syscall */ bralid r15, do_notify_resume; /* Handle any signals */ bralid r15, do_notify_resume; /* Handle any signals */ add r6, r0, r0; /* Arg 2: sigset_t *oldset */ addi r6, r0, 0; /* Arg 2: int in_syscall */ /* Finally, return to user state. */ /* Finally, return to user state. */ 1: swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ 1: swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ Loading arch/microblaze/kernel/signal.c +6 −8 Original line number Original line Diff line number Diff line Loading @@ -339,13 +339,14 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, * the kernel can handle, and then we build all the user-level signal handling * the kernel can handle, and then we build all the user-level signal handling * stack-frames in one go after that. * stack-frames in one go after that. */ */ static int do_signal(struct pt_regs *regs, sigset_t *oldset, int in_syscall) static void do_signal(struct pt_regs *regs, int in_syscall) { { siginfo_t info; siginfo_t info; int signr; int signr; struct k_sigaction ka; struct k_sigaction ka; sigset_t *oldset; #ifdef DEBUG_SIG #ifdef DEBUG_SIG printk(KERN_INFO "do signal: %p %p %d\n", regs, oldset, in_syscall); printk(KERN_INFO "do signal: %p %d\n", regs, in_syscall); printk(KERN_INFO "do signal2: %lx %lx %ld [%lx]\n", regs->pc, regs->r1, printk(KERN_INFO "do signal2: %lx %lx %ld [%lx]\n", regs->pc, regs->r1, regs->r12, current_thread_info()->flags); regs->r12, current_thread_info()->flags); #endif #endif Loading @@ -370,7 +371,7 @@ static int do_signal(struct pt_regs *regs, sigset_t *oldset, int in_syscall) current_thread_info()->status &= current_thread_info()->status &= ~TS_RESTORE_SIGMASK; ~TS_RESTORE_SIGMASK; } } return 1; return; } } if (in_syscall) if (in_syscall) Loading @@ -384,12 +385,9 @@ static int do_signal(struct pt_regs *regs, sigset_t *oldset, int in_syscall) current_thread_info()->status &= ~TS_RESTORE_SIGMASK; current_thread_info()->status &= ~TS_RESTORE_SIGMASK; sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); } } /* Did we come from a system call? */ return 0; } } void do_notify_resume(struct pt_regs *regs, sigset_t *oldset, int in_syscall) void do_notify_resume(struct pt_regs *regs, int in_syscall) { { /* /* * We want the common case to go fast, which * We want the common case to go fast, which Loading @@ -401,7 +399,7 @@ void do_notify_resume(struct pt_regs *regs, sigset_t *oldset, int in_syscall) return; return; if (test_thread_flag(TIF_SIGPENDING)) if (test_thread_flag(TIF_SIGPENDING)) do_signal(regs, oldset, in_syscall); do_signal(regs, in_syscall); if (test_and_clear_thread_flag(TIF_NOTIFY_RESUME)) { if (test_and_clear_thread_flag(TIF_NOTIFY_RESUME)) { tracehook_notify_resume(regs); tracehook_notify_resume(regs); Loading Loading
arch/microblaze/kernel/entry-nommu.S +1 −3 Original line number Original line Diff line number Diff line Loading @@ -135,7 +135,6 @@ ret_from_intr: 1: andi r11, r19, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME 1: andi r11, r19, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME beqid r11, no_intr_resched beqid r11, no_intr_resched addk r5, r1, r0 addk r5, r1, r0 addk r7, r0, r0 bralid r15, do_notify_resume bralid r15, do_notify_resume addk r6, r0, r0 addk r6, r0, r0 Loading Loading @@ -485,9 +484,8 @@ work_pending: 1: andi r11, r19, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME 1: andi r11, r19, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME beqi r11, no_work_pending beqi r11, no_work_pending addk r5, r1, r0 addk r5, r1, r0 addik r7, r0, 1 bralid r15, do_notify_resume bralid r15, do_notify_resume addk r6, r0, r0 addik r6, r0, 1 bri no_work_pending bri no_work_pending ENTRY(ret_to_user) ENTRY(ret_to_user) Loading
arch/microblaze/kernel/entry.S +4 −8 Original line number Original line Diff line number Diff line Loading @@ -434,9 +434,8 @@ C_ENTRY(ret_from_trap): beqi r11, 1f; /* Signals to handle, handle them */ beqi r11, 1f; /* Signals to handle, handle them */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ addi r7, r0, 1; /* Arg 3: int in_syscall */ bralid r15, do_notify_resume; /* Handle any signals */ bralid r15, do_notify_resume; /* Handle any signals */ add r6, r0, r0; /* Arg 2: sigset_t *oldset */ addi r6, r0, 1; /* Arg 2: int in_syscall */ /* Finally, return to user state. */ /* Finally, return to user state. */ 1: set_bip; /* Ints masked for state restore */ 1: set_bip; /* Ints masked for state restore */ Loading Loading @@ -637,9 +636,8 @@ C_ENTRY(ret_from_exc): * the normal entry sequence, so that it may be safely restored * the normal entry sequence, so that it may be safely restored * (in a possibly modified form) after do_notify_resume returns. */ * (in a possibly modified form) after do_notify_resume returns. */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ addi r7, r0, 0; /* Arg 3: int in_syscall */ bralid r15, do_notify_resume; /* Handle any signals */ bralid r15, do_notify_resume; /* Handle any signals */ add r6, r0, r0; /* Arg 2: sigset_t *oldset */ addi r6, r0, 0; /* Arg 2: int in_syscall */ /* Finally, return to user state. */ /* Finally, return to user state. */ 1: set_bip; /* Ints masked for state restore */ 1: set_bip; /* Ints masked for state restore */ Loading Loading @@ -735,10 +733,9 @@ ret_from_irq: andi r11, r11, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME; andi r11, r11, _TIF_SIGPENDING | _TIF_NOTIFY_RESUME; beqid r11, no_intr_resched beqid r11, no_intr_resched /* Handle a signal return; Pending signals should be in r18. */ /* Handle a signal return; Pending signals should be in r18. */ addi r7, r0, 0; /* Arg 3: int in_syscall */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ bralid r15, do_notify_resume; /* Handle any signals */ bralid r15, do_notify_resume; /* Handle any signals */ add r6, r0, r0; /* Arg 2: sigset_t *oldset */ addi r6, r0, 0; /* Arg 2: int in_syscall */ /* Finally, return to user state. */ /* Finally, return to user state. */ no_intr_resched: no_intr_resched: Loading Loading @@ -873,9 +870,8 @@ dbtrap_call: /* Return point for kernel/user entry + 8 because of rtsd r15, 8 */ beqi r11, 1f; /* Signals to handle, handle them */ beqi r11, 1f; /* Signals to handle, handle them */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ addik r5, r1, 0; /* Arg 1: struct pt_regs *regs */ addi r7, r0, 0; /* Arg 3: int in_syscall */ bralid r15, do_notify_resume; /* Handle any signals */ bralid r15, do_notify_resume; /* Handle any signals */ add r6, r0, r0; /* Arg 2: sigset_t *oldset */ addi r6, r0, 0; /* Arg 2: int in_syscall */ /* Finally, return to user state. */ /* Finally, return to user state. */ 1: swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ 1: swi CURRENT_TASK, r0, PER_CPU(CURRENT_SAVE); /* save current */ Loading
arch/microblaze/kernel/signal.c +6 −8 Original line number Original line Diff line number Diff line Loading @@ -339,13 +339,14 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, * the kernel can handle, and then we build all the user-level signal handling * the kernel can handle, and then we build all the user-level signal handling * stack-frames in one go after that. * stack-frames in one go after that. */ */ static int do_signal(struct pt_regs *regs, sigset_t *oldset, int in_syscall) static void do_signal(struct pt_regs *regs, int in_syscall) { { siginfo_t info; siginfo_t info; int signr; int signr; struct k_sigaction ka; struct k_sigaction ka; sigset_t *oldset; #ifdef DEBUG_SIG #ifdef DEBUG_SIG printk(KERN_INFO "do signal: %p %p %d\n", regs, oldset, in_syscall); printk(KERN_INFO "do signal: %p %d\n", regs, in_syscall); printk(KERN_INFO "do signal2: %lx %lx %ld [%lx]\n", regs->pc, regs->r1, printk(KERN_INFO "do signal2: %lx %lx %ld [%lx]\n", regs->pc, regs->r1, regs->r12, current_thread_info()->flags); regs->r12, current_thread_info()->flags); #endif #endif Loading @@ -370,7 +371,7 @@ static int do_signal(struct pt_regs *regs, sigset_t *oldset, int in_syscall) current_thread_info()->status &= current_thread_info()->status &= ~TS_RESTORE_SIGMASK; ~TS_RESTORE_SIGMASK; } } return 1; return; } } if (in_syscall) if (in_syscall) Loading @@ -384,12 +385,9 @@ static int do_signal(struct pt_regs *regs, sigset_t *oldset, int in_syscall) current_thread_info()->status &= ~TS_RESTORE_SIGMASK; current_thread_info()->status &= ~TS_RESTORE_SIGMASK; sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); sigprocmask(SIG_SETMASK, ¤t->saved_sigmask, NULL); } } /* Did we come from a system call? */ return 0; } } void do_notify_resume(struct pt_regs *regs, sigset_t *oldset, int in_syscall) void do_notify_resume(struct pt_regs *regs, int in_syscall) { { /* /* * We want the common case to go fast, which * We want the common case to go fast, which Loading @@ -401,7 +399,7 @@ void do_notify_resume(struct pt_regs *regs, sigset_t *oldset, int in_syscall) return; return; if (test_thread_flag(TIF_SIGPENDING)) if (test_thread_flag(TIF_SIGPENDING)) do_signal(regs, oldset, in_syscall); do_signal(regs, in_syscall); if (test_and_clear_thread_flag(TIF_NOTIFY_RESUME)) { if (test_and_clear_thread_flag(TIF_NOTIFY_RESUME)) { tracehook_notify_resume(regs); tracehook_notify_resume(regs); Loading