lkml.org 
[lkml]   [2006]   [Feb]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH] swsusp: finally solve mysqld problem
Date
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 = &current->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 = &current->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 = &current->blocked;
int signr = 0;

+ try_to_freeze();
+
relock:
spin_lock_irq(&current->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(&current->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/
\
 
 \ /
  Last update: 2006-02-05 13:26    [W:0.050 / U:0.228 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site