Messages in this thread Patch in this message | | | Date | Fri, 5 May 2006 17:05:09 +0200 | From | Benoit Boissinot <> | Subject | Re: 2.6.17-rc3-mm1 |
| |
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 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/
| |