From: Shaohua Li <shaohua.li-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: Pavel Machek <pavel-+ZI9xUNit7I@public.gmane.org>
Cc: Sanjoy Mahajan <sanjoy-Bhlo64W4KxTQzY9nttDBhA@public.gmane.org>,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
Subject: Re: S3 and sigwait (was Re: 2.6.13-rc3: swsusp works (TP 600X))
Date: Mon, 01 Aug 2005 14:51:34 +0800 [thread overview]
Message-ID: <1122879094.3285.2.camel@linux-hp.sh.intel.com> (raw)
In-Reply-To: <20050730103034.GC1942-I/5MKhXcvmPrBKCeMvbIDA@public.gmane.org>
On Sat, 2005-07-30 at 18:30 +0800, Pavel Machek wrote:
> Hi!
>
> > >> One other glitch is that pdnsd (a nameserver caching daemon) has
> crashed
> > >> when the system wakes up from swsusp. It also happens when
> waking up
> > >> from S3, which was working with 2.6.11.4 although not with
> 2.6.13-rc3.
> > >> Many people have said mysql also does not suspend well. Is their
> use of
> > >> a named pipe or socket causing the problem?
> >
> > > No idea, strace?
> >
> > The upshot of stracing is in tthe Debian BTS <bugs.debian.org>
> > #319572. Paul Rombouts, an author of pdnsd, reproduced the strace
> > crash and found the problem:
> >
> > > Apparently strace causes sigwait to return EINTR, which is
> > > inconsistent with the documentation I could find on sigwait.
> >
> > Which is true. The sigwait man entry (Debian 'etch') says:
> > The !sigwait! function never returns an error.
> >
> > His patch (available in the BTS and included below) fixed the
> problem
> > of strace or S3 sleep crashing pdnsd.
>
> If you think it is a linux bug, can you produce small test case doing
> just the sigwait, and post it on l-k with big title "sigwait() breaks
> when straced, and on suspend"?
>
> That way it is going to get some attetion, and you'll get either
> documentation or kernel fixed.
Looks like a linux bug to me. The refrigerator fake signal waked the
task up and without restart for the sigwait case. How about below patch:
Thanks,
Shaohua
---
linux-2.6.13-rc4-root/kernel/signal.c | 11 ++++++++++-
1 files changed, 10 insertions(+), 1 deletion(-)
diff -puN kernel/signal.c~sigwait-suspend-resume kernel/signal.c
--- linux-2.6.13-rc4/kernel/signal.c~sigwait-suspend-resume 2005-08-01 14:00:39.089460688 +0800
+++ linux-2.6.13-rc4-root/kernel/signal.c 2005-08-01 14:30:13.821660384 +0800
@@ -2188,6 +2188,7 @@ sys_rt_sigtimedwait(const sigset_t __use
struct timespec ts;
siginfo_t info;
long timeout = 0;
+ int recover = 0;
/* XXX: Don't preclude handling different sized sigset_t's. */
if (sigsetsize != sizeof(sigset_t))
@@ -2225,15 +2226,23 @@ sys_rt_sigtimedwait(const sigset_t __use
* be awakened when they arrive. */
current->real_blocked = current->blocked;
sigandsets(¤t->blocked, ¤t->blocked, &these);
+do_recover:
recalc_sigpending();
spin_unlock_irq(¤t->sighand->siglock);
current->state = TASK_INTERRUPTIBLE;
timeout = schedule_timeout(timeout);
- try_to_freeze();
+ if (try_to_freeze())
+ recover = 1;
spin_lock_irq(¤t->sighand->siglock);
sig = dequeue_signal(current, &these, &info);
+ if (!sig && recover) {
+ if (timeout == 0)
+ timeout = MAX_SCHEDULE_TIMEOUT;
+ recover = 0;
+ goto do_recover;
+ }
current->blocked = current->real_blocked;
siginitset(¤t->real_blocked, 0);
recalc_sigpending();
_
-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
WARNING: multiple messages have this Message-ID (diff)
From: Shaohua Li <shaohua.li@intel.com>
To: Pavel Machek <pavel@ucw.cz>
Cc: Sanjoy Mahajan <sanjoy@mrao.cam.ac.uk>,
linux-kernel@vger.kernel.org, acpi-devel@lists.sourceforge.net
Subject: Re: [ACPI] S3 and sigwait (was Re: 2.6.13-rc3: swsusp works (TP 600X))
Date: Mon, 01 Aug 2005 14:51:34 +0800 [thread overview]
Message-ID: <1122879094.3285.2.camel@linux-hp.sh.intel.com> (raw)
In-Reply-To: <20050730103034.GC1942@elf.ucw.cz>
On Sat, 2005-07-30 at 18:30 +0800, Pavel Machek wrote:
> Hi!
>
> > >> One other glitch is that pdnsd (a nameserver caching daemon) has
> crashed
> > >> when the system wakes up from swsusp. It also happens when
> waking up
> > >> from S3, which was working with 2.6.11.4 although not with
> 2.6.13-rc3.
> > >> Many people have said mysql also does not suspend well. Is their
> use of
> > >> a named pipe or socket causing the problem?
> >
> > > No idea, strace?
> >
> > The upshot of stracing is in tthe Debian BTS <bugs.debian.org>
> > #319572. Paul Rombouts, an author of pdnsd, reproduced the strace
> > crash and found the problem:
> >
> > > Apparently strace causes sigwait to return EINTR, which is
> > > inconsistent with the documentation I could find on sigwait.
> >
> > Which is true. The sigwait man entry (Debian 'etch') says:
> > The !sigwait! function never returns an error.
> >
> > His patch (available in the BTS and included below) fixed the
> problem
> > of strace or S3 sleep crashing pdnsd.
>
> If you think it is a linux bug, can you produce small test case doing
> just the sigwait, and post it on l-k with big title "sigwait() breaks
> when straced, and on suspend"?
>
> That way it is going to get some attetion, and you'll get either
> documentation or kernel fixed.
Looks like a linux bug to me. The refrigerator fake signal waked the
task up and without restart for the sigwait case. How about below patch:
Thanks,
Shaohua
---
linux-2.6.13-rc4-root/kernel/signal.c | 11 ++++++++++-
1 files changed, 10 insertions(+), 1 deletion(-)
diff -puN kernel/signal.c~sigwait-suspend-resume kernel/signal.c
--- linux-2.6.13-rc4/kernel/signal.c~sigwait-suspend-resume 2005-08-01 14:00:39.089460688 +0800
+++ linux-2.6.13-rc4-root/kernel/signal.c 2005-08-01 14:30:13.821660384 +0800
@@ -2188,6 +2188,7 @@ sys_rt_sigtimedwait(const sigset_t __use
struct timespec ts;
siginfo_t info;
long timeout = 0;
+ int recover = 0;
/* XXX: Don't preclude handling different sized sigset_t's. */
if (sigsetsize != sizeof(sigset_t))
@@ -2225,15 +2226,23 @@ sys_rt_sigtimedwait(const sigset_t __use
* be awakened when they arrive. */
current->real_blocked = current->blocked;
sigandsets(¤t->blocked, ¤t->blocked, &these);
+do_recover:
recalc_sigpending();
spin_unlock_irq(¤t->sighand->siglock);
current->state = TASK_INTERRUPTIBLE;
timeout = schedule_timeout(timeout);
- try_to_freeze();
+ if (try_to_freeze())
+ recover = 1;
spin_lock_irq(¤t->sighand->siglock);
sig = dequeue_signal(current, &these, &info);
+ if (!sig && recover) {
+ if (timeout == 0)
+ timeout = MAX_SCHEDULE_TIMEOUT;
+ recover = 0;
+ goto do_recover;
+ }
current->blocked = current->real_blocked;
siginitset(¤t->real_blocked, 0);
recalc_sigpending();
_
next prev parent reply other threads:[~2005-08-01 6:51 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-23 0:19 2.6.13-rc3: swsusp works (TP 600X) Sanjoy Mahajan
2005-07-23 0:35 ` Pavel Machek
2005-07-28 20:17 ` Sanjoy Mahajan
2005-07-28 21:36 ` Pavel Machek
2005-07-28 21:55 ` Rafael J. Wysocki
2005-07-29 3:48 ` Sanjoy Mahajan
2005-07-29 4:33 ` Sanjoy Mahajan
[not found] ` <20050723003544.GC1988-I/5MKhXcvmPrBKCeMvbIDA@public.gmane.org>
2005-07-30 0:50 ` S3 and sigwait (was Re: 2.6.13-rc3: swsusp works (TP 600X)) Sanjoy Mahajan
2005-07-30 0:50 ` Sanjoy Mahajan
[not found] ` <E1DyfYO-0006oI-00-KmINTRm7+bkRAIupTkoUWTYRy0cijUJx@public.gmane.org>
2005-07-30 10:30 ` Pavel Machek
2005-07-30 10:30 ` [ACPI] " Pavel Machek
[not found] ` <20050730103034.GC1942-I/5MKhXcvmPrBKCeMvbIDA@public.gmane.org>
2005-08-01 6:51 ` Shaohua Li [this message]
2005-08-01 6:51 ` Shaohua Li
[not found] ` <1122879094.3285.2.camel-ECwVeV2eNyQD0+JXs3kMbRL4W9x8LtSr@public.gmane.org>
2005-08-01 7:09 ` Pavel Machek
2005-08-01 7:09 ` [ACPI] " Pavel Machek
2005-08-02 5:16 ` Shaohua Li
-- strict thread matches above, loose matches on Subject: below --
2005-08-01 12:36 Li, Shaohua
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1122879094.3285.2.camel@linux-hp.sh.intel.com \
--to=shaohua.li-ral2jqcrhueavxtiumwx3w@public.gmane.org \
--cc=acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=pavel-+ZI9xUNit7I@public.gmane.org \
--cc=sanjoy-Bhlo64W4KxTQzY9nttDBhA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.