* [PATCH] NTP: remove clock_was_set() call to prevent deadlock
@ 2007-07-03 18:05 Thomas Gleixner
2007-07-03 19:41 ` Ingo Molnar
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Thomas Gleixner @ 2007-07-03 18:05 UTC (permalink / raw)
To: Linus Torvalds
Cc: LKML, Dave Jones, Andrew Morton, john stultz, Ingo Molnar,
Stable Team, Fortier,Vincent [Montreal]
The clock_was_set() call in seconds_overflow() which happens only when
leap seconds are inserted / deleted is wrong in two aspects:
1. it results in a call to on_each_cpu() with interrupts disabled
2. it is potential deadlock source vs. call_lock in smp_call_function()
The only possible side effect of the removal might be, that an absolute
CLOCK_REALTIME timer fires 1 second too late, in the rare case of leap
second deletion and an absolute CLOCK_REALTIME timer which expires in
the affected time frame. It will never fire too early.
This was probably observed by the reporter of a June 30th -> July 1st
hang: http://lkml.org/lkml/2007/7/3/
A similar problem was observed by Dave Jones, who provided a screen shot
with a lockdep back trace, which allowed to analyse the problem.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
--- a/kernel/time/ntp.c
+++ b/kernel/time/ntp.c
@@ -122,7 +122,6 @@ void second_overflow(void)
*/
time_interpolator_update(-NSEC_PER_SEC);
time_state = TIME_OOP;
- clock_was_set();
printk(KERN_NOTICE "Clock: inserting leap second "
"23:59:60 UTC\n");
}
@@ -137,7 +136,6 @@ void second_overflow(void)
*/
time_interpolator_update(NSEC_PER_SEC);
time_state = TIME_WAIT;
- clock_was_set();
printk(KERN_NOTICE "Clock: deleting leap second "
"23:59:59 UTC\n");
}
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH] NTP: remove clock_was_set() call to prevent deadlock
2007-07-03 18:05 [PATCH] NTP: remove clock_was_set() call to prevent deadlock Thomas Gleixner
@ 2007-07-03 19:41 ` Ingo Molnar
2007-07-03 19:56 ` Thomas Gleixner
2007-07-04 11:06 ` Roman Zippel
2 siblings, 0 replies; 5+ messages in thread
From: Ingo Molnar @ 2007-07-03 19:41 UTC (permalink / raw)
To: Thomas Gleixner
Cc: Linus Torvalds, LKML, Dave Jones, Andrew Morton, john stultz,
Stable Team, Fortier,Vincent [Montreal]
* Thomas Gleixner <tglx@linutronix.de> wrote:
> The clock_was_set() call in seconds_overflow() which happens only when
> leap seconds are inserted / deleted is wrong in two aspects:
>
> 1. it results in a call to on_each_cpu() with interrupts disabled
> 2. it is potential deadlock source vs. call_lock in smp_call_function()
>
> The only possible side effect of the removal might be, that an
> absolute CLOCK_REALTIME timer fires 1 second too late, in the rare
> case of leap second deletion and an absolute CLOCK_REALTIME timer
> which expires in the affected time frame. It will never fire too
> early.
>
> This was probably observed by the reporter of a June 30th -> July 1st
> hang: http://lkml.org/lkml/2007/7/3/
>
> A similar problem was observed by Dave Jones, who provided a screen
> shot with a lockdep back trace, which allowed to analyse the problem.
>
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
looks good to me.
Acked-by: Ingo Molnar <mingo@elte.hu>
Ingo
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] NTP: remove clock_was_set() call to prevent deadlock
2007-07-03 18:05 [PATCH] NTP: remove clock_was_set() call to prevent deadlock Thomas Gleixner
2007-07-03 19:41 ` Ingo Molnar
@ 2007-07-03 19:56 ` Thomas Gleixner
2007-07-04 11:06 ` Roman Zippel
2 siblings, 0 replies; 5+ messages in thread
From: Thomas Gleixner @ 2007-07-03 19:56 UTC (permalink / raw)
To: Linus Torvalds
Cc: LKML, Dave Jones, Andrew Morton, john stultz, Ingo Molnar,
Stable Team, Fortier,Vincent [Montreal]
On Tue, 2007-07-03 at 20:05 +0200, Thomas Gleixner wrote:
> The clock_was_set() call in seconds_overflow() which happens only when
> leap seconds are inserted / deleted is wrong in two aspects:
>
> 1. it results in a call to on_each_cpu() with interrupts disabled
> 2. it is potential deadlock source vs. call_lock in smp_call_function()
>
> The only possible side effect of the removal might be, that an absolute
> CLOCK_REALTIME timer fires 1 second too late, in the rare case of leap
> second deletion and an absolute CLOCK_REALTIME timer which expires in
> the affected time frame. It will never fire too early.
>
> This was probably observed by the reporter of a June 30th -> July 1st
> hang: http://lkml.org/lkml/2007/7/3/
Ooops, missed the full reference:
http://lkml.org/lkml/2007/7/3/103
tglx
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] NTP: remove clock_was_set() call to prevent deadlock
2007-07-03 18:05 [PATCH] NTP: remove clock_was_set() call to prevent deadlock Thomas Gleixner
2007-07-03 19:41 ` Ingo Molnar
2007-07-03 19:56 ` Thomas Gleixner
@ 2007-07-04 11:06 ` Roman Zippel
2007-07-04 11:15 ` Thomas Gleixner
2 siblings, 1 reply; 5+ messages in thread
From: Roman Zippel @ 2007-07-04 11:06 UTC (permalink / raw)
To: Thomas Gleixner
Cc: Linus Torvalds, LKML, Dave Jones, Andrew Morton, john stultz,
Ingo Molnar, Stable Team, Fortier,Vincent [Montreal]
Hi,
On Tuesday 03 July 2007, Thomas Gleixner wrote:
> The clock_was_set() call in seconds_overflow() which happens only when
> leap seconds are inserted / deleted is wrong in two aspects:
>
> 1. it results in a call to on_each_cpu() with interrupts disabled
> 2. it is potential deadlock source vs. call_lock in smp_call_function()
>
> The only possible side effect of the removal might be, that an absolute
> CLOCK_REALTIME timer fires 1 second too late, in the rare case of leap
> second deletion and an absolute CLOCK_REALTIME timer which expires in
> the affected time frame. It will never fire too early.
That's a bit of an easy solution and doesn't fix the real problem. The
clock_was_set() calls were correct, what's broken is the locking. Why wasn't
that fixed instead?
I would at least like to see a comment there, why these calls were removed.
bye, Roman
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] NTP: remove clock_was_set() call to prevent deadlock
2007-07-04 11:06 ` Roman Zippel
@ 2007-07-04 11:15 ` Thomas Gleixner
0 siblings, 0 replies; 5+ messages in thread
From: Thomas Gleixner @ 2007-07-04 11:15 UTC (permalink / raw)
To: Roman Zippel
Cc: Linus Torvalds, LKML, Dave Jones, Andrew Morton, john stultz,
Ingo Molnar, Stable Team, Fortier,Vincent [Montreal]
On Wed, 2007-07-04 at 13:06 +0200, Roman Zippel wrote:
> Hi,
>
> On Tuesday 03 July 2007, Thomas Gleixner wrote:
>
> > The clock_was_set() call in seconds_overflow() which happens only when
> > leap seconds are inserted / deleted is wrong in two aspects:
> >
> > 1. it results in a call to on_each_cpu() with interrupts disabled
> > 2. it is potential deadlock source vs. call_lock in smp_call_function()
> >
> > The only possible side effect of the removal might be, that an absolute
> > CLOCK_REALTIME timer fires 1 second too late, in the rare case of leap
> > second deletion and an absolute CLOCK_REALTIME timer which expires in
> > the affected time frame. It will never fire too early.
>
> That's a bit of an easy solution and doesn't fix the real problem. The
> clock_was_set() calls were correct, what's broken is the locking. Why wasn't
> that fixed instead?
> I would at least like to see a comment there, why these calls were removed.
We can not fix the locking that late in the cycle. I doubt that we can
fix it at all, as smp_call_function _must_ run with interrupts enabled,
therefor it can not run in interrupt context. It needs to run from
thread context only.
tglx
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-07-04 11:15 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-03 18:05 [PATCH] NTP: remove clock_was_set() call to prevent deadlock Thomas Gleixner
2007-07-03 19:41 ` Ingo Molnar
2007-07-03 19:56 ` Thomas Gleixner
2007-07-04 11:06 ` Roman Zippel
2007-07-04 11:15 ` Thomas Gleixner
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox