Fix signal handling to use store/restore instead of block/unblock
as that may cause IRQ reentrancy

Signed-off-by: Anton Ivanov <aiva...@brocade.com>
---
 arch/um/os-Linux/skas/process.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c
index 13c5a2c..5916267 100644
--- a/arch/um/os-Linux/skas/process.c
+++ b/arch/um/os-Linux/skas/process.c
@@ -313,6 +313,7 @@ void userspace(struct uml_pt_regs *regs)
        int err, status, op, pid = userspace_pid[0];
        /* To prevent races if using_sysemu changes under us.*/
        int local_using_sysemu;
+       unsigned long flags;
        siginfo_t si;
 
        /* Handle any immediate reschedules or signals */
@@ -396,9 +397,9 @@ void userspace(struct uml_pt_regs *regs)
                        case SIGBUS:
                        case SIGFPE:
                        case SIGWINCH:
-                               block_signals();
+                               flags = set_signals(0);
                                (*sig_info[sig])(sig, (struct siginfo *)&si, 
regs);
-                               unblock_signals();
+                               set_signals(flags);
                                break;
                        default:
                                printk(UM_KERN_ERR "userspace - child stopped "
@@ -586,15 +587,16 @@ int start_idle_thread(void *stack, jmp_buf *switch_buf)
 void initial_thread_cb_skas(void (*proc)(void *), void *arg)
 {
        jmp_buf here;
+       unsigned long int flags;
 
        cb_proc = proc;
        cb_arg = arg;
        cb_back = &here;
 
-       block_signals();
+       flags = set_signals(0);
        if (UML_SETJMP(&here) == 0)
                UML_LONGJMP(&initial_jmpbuf, INIT_JMP_CALLBACK);
-       unblock_signals();
+       set_signals(flags);
 
        cb_proc = NULL;
        cb_arg = NULL;
-- 
2.1.4


------------------------------------------------------------------------------
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

Reply via email to