Re: 2.6.17-rc3-mm1

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, May 03, 2006 at 04:43:18PM +0200, Benoit Boissinot wrote:
> On Wed, May 03, 2006 at 04:15:32PM +0200, Thomas Gleixner wrote:
> > On Wed, 2006-05-03 at 06:48 -0700, Andrew Morton wrote:
> > > > Since a few -mm releases I am seeing processes stuck in a
> > > > nanosleep({0, 0}, NULL) syscall. Sometimes, they unfreeze after
> > > > several hours.
> > >
> > > Thanks.   Yes, please test mainline first - it will probably occur there.
> > > 
> > > And it's a nanosleep(zero) all the time?  The obvious answer would be that
> > > a clock tick came in at the right time and we end up trying to sleep for -1
> > > units.  But if that was the case, things wouldn't unsleep after just
> > > several hours.
> > 
> > I don't see how that should happen. The expiry time is stored in
> > absolute time format when nanosleep is started and compared against
> > current time in the softirq. We might miss one tick, but not more.
> > 
> > Benoit, can you please mail me .config and a boot log ?
> 
> they are attached (the faulting process is urxvtd).
> 
I added the following debug code:

Index: linux/kernel/hrtimer.c
===================================================================
--- linux.orig/kernel/hrtimer.c
+++ linux/kernel/hrtimer.c
@@ -426,6 +426,7 @@ hrtimer_start(struct hrtimer *timer, kti
 	struct hrtimer_base *base, *new_base;
 	unsigned long flags;
 	int ret;
+	ktime_t save = tim;
 
 	base = lock_hrtimer_base(timer, &flags);
 
@@ -437,6 +438,12 @@ hrtimer_start(struct hrtimer *timer, kti
 
 	if (mode == HRTIMER_REL) {
 		tim = ktime_add(tim, new_base->get_time());
+		if(save.tv64 == 0) {
+			char comm[TASK_COMM_LEN];
+			ktime_t curr = new_base->get_time();
+			get_task_comm(comm, current);
+			printk("%s: empty nanosleep %lld %lld\n", comm, curr.tv64, tim.tv64);
+		}
 		/*
 		 * CONFIG_TIME_LOW_RES is a temporary way for architectures
 		 * to signal that they simply return xtime in


and when urxvtd hanged I had the following in dmesg:
[  356.696000] urxvtd: empty nanosleep 356726124322 17948911854451

So I suppose something is wrong in ktime_add()

regards,

Benoit

-- 
powered by bash/screen/(urxvt/fvwm|linux-console)/gentoo/gnu/linux OS
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux