* 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 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