Messages in this thread Patch in this message | | | From | "Rafael J. Wysocki" <> | Subject | [PATCH] swsusp: finally solve mysqld problem | Date | Sun, 5 Feb 2006 13:21:54 +0100 |
| |
Hi,
This patch from Pavel moves userland freeze signals handling into more logical place. It now hits even with mysqld running.
Please apply.
Greetings, Rafael
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by: Pavel Machek <pavel@suse.cz>
Index: linux-2.6.16-rc1-mm5/arch/i386/kernel/signal.c =================================================================== --- linux-2.6.16-rc1-mm5.orig/arch/i386/kernel/signal.c +++ linux-2.6.16-rc1-mm5/arch/i386/kernel/signal.c @@ -582,9 +582,6 @@ static void fastcall do_signal(struct pt if (!user_mode(regs)) return; - if (try_to_freeze()) - goto no_signal; - if (test_thread_flag(TIF_RESTORE_SIGMASK)) oldset = ¤t->saved_sigmask; else @@ -613,7 +610,6 @@ static void fastcall do_signal(struct pt return; } -no_signal: /* Did we come from a system call? */ if (regs->orig_eax >= 0) { /* Restart the system call - no handlers present */ Index: linux-2.6.16-rc1-mm5/arch/x86_64/kernel/signal.c =================================================================== --- linux-2.6.16-rc1-mm5.orig/arch/x86_64/kernel/signal.c +++ linux-2.6.16-rc1-mm5/arch/x86_64/kernel/signal.c @@ -443,9 +443,6 @@ int do_signal(struct pt_regs *regs, sigs if (!user_mode(regs)) return 1; - if (try_to_freeze()) - goto no_signal; - if (!oldset) oldset = ¤t->blocked; @@ -463,7 +460,6 @@ int do_signal(struct pt_regs *regs, sigs return handle_signal(signr, &info, &ka, oldset, regs); } - no_signal: /* Did we come from a system call? */ if ((long)regs->orig_rax >= 0) { /* Restart the system call - no handlers present */ Index: linux-2.6.16-rc1-mm5/kernel/signal.c =================================================================== --- linux-2.6.16-rc1-mm5.orig/kernel/signal.c +++ linux-2.6.16-rc1-mm5/kernel/signal.c @@ -1922,6 +1922,8 @@ int get_signal_to_deliver(siginfo_t *inf sigset_t *mask = ¤t->blocked; int signr = 0; + try_to_freeze(); + relock: spin_lock_irq(¤t->sighand->siglock); for (;;) { @@ -2307,7 +2309,6 @@ sys_rt_sigtimedwait(const sigset_t __use timeout = schedule_timeout_interruptible(timeout); - try_to_freeze(); spin_lock_irq(¤t->sighand->siglock); sig = dequeue_signal(current, &these, &info); current->blocked = current->real_blocked; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |