public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] timekeeping fix mismerge
@ 2007-05-14  9:10 Thomas Gleixner
  2007-05-14 18:58 ` Andrew Morton
  2007-05-14 19:25 ` Linus Torvalds
  0 siblings, 2 replies; 5+ messages in thread
From: Thomas Gleixner @ 2007-05-14  9:10 UTC (permalink / raw)
  To: Andrew Morton; +Cc: LKML, Linus Torvalds, john stultz

The time keeping code move to kernel/time/timekeeping.c broke the
clocksource resume logic patch. Fix it up and move the
clocksource_resume() call to the appropriate place.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index f9217bf..3d1042f 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -273,6 +273,8 @@ static int timekeeping_resume(struct sys_device *dev)
 	unsigned long flags;
 	unsigned long now = read_persistent_clock();
 
+	clocksource_resume();
+
 	write_seqlock_irqsave(&xtime_lock, flags);
 
 	if (now && (now > timekeeping_suspend_time)) {
diff --git a/kernel/timer.c b/kernel/timer.c
index a6c580a..5ec5490 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -1499,8 +1499,6 @@ unregister_time_interpolator(struct time_interpolator *ti)
 		prev = &curr->next;
 	}
 
-	clocksource_resume();
-
 	write_seqlock_irqsave(&xtime_lock, flags);
 	if (ti == time_interpolator) {
 		/* we lost the best time-interpolator: */



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] timekeeping fix mismerge
  2007-05-14  9:10 [PATCH] timekeeping fix mismerge Thomas Gleixner
@ 2007-05-14 18:58 ` Andrew Morton
  2007-05-14 19:17   ` Thomas Gleixner
  2007-05-14 19:25 ` Linus Torvalds
  1 sibling, 1 reply; 5+ messages in thread
From: Andrew Morton @ 2007-05-14 18:58 UTC (permalink / raw)
  To: tglx; +Cc: LKML, Linus Torvalds, john stultz

On Mon, 14 May 2007 11:10:02 +0200
Thomas Gleixner <tglx@linutronix.de> wrote:

> The time keeping code move to kernel/time/timekeeping.c broke the
> clocksource resume logic patch. Fix it up and move the
> clocksource_resume() call to the appropriate place.
> 
> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
> 
> diff --git a/kernel/time/clocksource.c b/kernel/time/clocksource.c
> diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
> index f9217bf..3d1042f 100644
> --- a/kernel/time/timekeeping.c
> +++ b/kernel/time/timekeeping.c
> @@ -273,6 +273,8 @@ static int timekeeping_resume(struct sys_device *dev)
>  	unsigned long flags;
>  	unsigned long now = read_persistent_clock();
>  
> +	clocksource_resume();
> +
>  	write_seqlock_irqsave(&xtime_lock, flags);
>  
>  	if (now && (now > timekeeping_suspend_time)) {
> diff --git a/kernel/timer.c b/kernel/timer.c
> index a6c580a..5ec5490 100644
> --- a/kernel/timer.c
> +++ b/kernel/timer.c
> @@ -1499,8 +1499,6 @@ unregister_time_interpolator(struct time_interpolator *ti)
>  		prev = &curr->next;
>  	}
>  
> -	clocksource_resume();
> -
>  	write_seqlock_irqsave(&xtime_lock, flags);
>  	if (ti == time_interpolator) {
>  		/* we lost the best time-interpolator: */
> 

Urgh, that was probably me trying to manage the maelstrom from a million
monkeys mucking in the same code for multiple months, sigh.

So what do "broke" and "fix" mean in this context?  What are the
consequences of this bug, and of its fix?  Is the above appropriate for
2.6.21.x and if so why?

Thanks.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] timekeeping fix mismerge
  2007-05-14 18:58 ` Andrew Morton
@ 2007-05-14 19:17   ` Thomas Gleixner
  0 siblings, 0 replies; 5+ messages in thread
From: Thomas Gleixner @ 2007-05-14 19:17 UTC (permalink / raw)
  To: Andrew Morton; +Cc: LKML, Linus Torvalds, john stultz

On Mon, 2007-05-14 at 11:58 -0700, Andrew Morton wrote:
> Urgh, that was probably me trying to manage the maelstrom from a million
> monkeys mucking in the same code for multiple months, sigh.
> 
> So what do "broke" and "fix" mean in this context?  What are the
> consequences of this bug, and of its fix?  Is the above appropriate for
> 2.6.21.x and if so why?

clocksource_resume() is not called except from
unregister_time_interpolator(), which is definitely the wrong place.

No 2.6.21.x material, as the move of the timekeeping code happened after
2.6.21.

	tglx



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] timekeeping fix mismerge
  2007-05-14  9:10 [PATCH] timekeeping fix mismerge Thomas Gleixner
  2007-05-14 18:58 ` Andrew Morton
@ 2007-05-14 19:25 ` Linus Torvalds
  2007-05-14 20:33   ` Andrew Morton
  1 sibling, 1 reply; 5+ messages in thread
From: Linus Torvalds @ 2007-05-14 19:25 UTC (permalink / raw)
  To: Thomas Gleixner; +Cc: Andrew Morton, LKML, john stultz



On Mon, 14 May 2007, Thomas Gleixner wrote:
>
> The time keeping code move to kernel/time/timekeeping.c broke the
> clocksource resume logic patch. Fix it up and move the
> clocksource_resume() call to the appropriate place.

Yeah, looks obvious enough. It had just enough context in the *wrong* 
place, that the patch would continue to apply if you used the default 
(insane) GNU patch semantics, because GNU patch defaults to --fuzz=2, and 
is thus ok if it can find even just a single line around the patch that is 
valid.

So it looks like Andrew's patch-application scripts happily added the 
"clocksource_resume()" to an insane place, because the one-line context 
was

>  
> +	clocksource_resume();
> +
>  	write_seqlock_irqsave(&xtime_lock, flags);

ie an empty line and a single write_seqlock_irqsave(). And those two lines 
could be found elsewhere in the wrong file.

There's a real reason I consider GNU patch defaults to be totally insane.

I personally use much stricter rules, but what happens is that Andrew's 
scripts will apply the patch to the wrong place, and then the diff gets 
*re-generated*, so by the time I see it, I see a nice diff that applies 
with no fuzz at all.

I don't think re-generating the diff is wrong, and in fact I think you 
have to do it, but I think Andrew should use "--fuzz=0" or at least 
"--fuzz=1" instead of the default 2. Yeah, it obviously causes more patch 
application failures, and it can be very irritating if *most* of those 
patches would have applied cleanly and correctly with --fuzz=2, but 
--fuzz=2 really is very dangerous. It literally just needed two lines to 
match in the wrong place (and as mentioned, those two lines can be 
trivial, like in the example - totally empty, even!)

		Linus

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] timekeeping fix mismerge
  2007-05-14 19:25 ` Linus Torvalds
@ 2007-05-14 20:33   ` Andrew Morton
  0 siblings, 0 replies; 5+ messages in thread
From: Andrew Morton @ 2007-05-14 20:33 UTC (permalink / raw)
  To: Linus Torvalds; +Cc: Thomas Gleixner, LKML, john stultz

On Mon, 14 May 2007 12:25:02 -0700 (PDT)
Linus Torvalds <torvalds@linux-foundation.org> wrote:

> I don't think re-generating the diff is wrong, and in fact I think you 
> have to do it, but I think Andrew should use "--fuzz=0" or at least 
> "--fuzz=1" instead of the default 2. Yeah, it obviously causes more patch 
> application failures, and it can be very irritating if *most* of those 
> patches would have applied cleanly and correctly with --fuzz=2, but 
> --fuzz=2 really is very dangerous. It literally just needed two lines to 
> match in the wrong place (and as mentioned, those two lines can be 
> trivial, like in the example - totally empty, even!)

Yeah I played with that a while back and --fuzz=0 just broken everything.

--fuzz=1 seems acceptable though.  I'll use that from now on.


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2007-05-14 20:34 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-14  9:10 [PATCH] timekeeping fix mismerge Thomas Gleixner
2007-05-14 18:58 ` Andrew Morton
2007-05-14 19:17   ` Thomas Gleixner
2007-05-14 19:25 ` Linus Torvalds
2007-05-14 20:33   ` Andrew Morton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox