From 1150ea6909f569fbc0b7964c91e16545229ef983 Mon Sep 17 00:00:00 2001 From: Yanmin Zhang Date: Thu, 26 Aug 2004 20:44:17 -0700 Subject: [PATCH] [PATCH] interrupt is enabled before it should be when kernel is booted There is a minor problem in function start_kernel. start_kernel will enable interrupt after calling profile_init. However, before that, function time_init on IA64 platform could enable interrupt. See this call sequence: start_kernel ->time_init ->ia64_init_itm ->register_time_interpolator ->write_seqlock_irq. Signed-off-by: Zhang Yanmin Signed-off-by: Yao Jun Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- kernel/timer.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/kernel/timer.c b/kernel/timer.c index 8f76781b96911..29ecc04d8684c 100644 --- a/kernel/timer.c +++ b/kernel/timer.c @@ -1448,11 +1448,13 @@ is_better_time_interpolator(struct time_interpolator *new) void register_time_interpolator(struct time_interpolator *ti) { + unsigned long flags; + spin_lock(&time_interpolator_lock); - write_seqlock_irq(&xtime_lock); + write_seqlock_irqsave(&xtime_lock, flags); if (is_better_time_interpolator(ti)) time_interpolator = ti; - write_sequnlock_irq(&xtime_lock); + write_sequnlock_irqrestore(&xtime_lock, flags); ti->next = time_interpolator_list; time_interpolator_list = ti; @@ -1463,6 +1465,7 @@ void unregister_time_interpolator(struct time_interpolator *ti) { struct time_interpolator *curr, **prev; + unsigned long flags; spin_lock(&time_interpolator_lock); prev = &time_interpolator_list; @@ -1474,7 +1477,7 @@ unregister_time_interpolator(struct time_interpolator *ti) prev = &curr->next; } - write_seqlock_irq(&xtime_lock); + write_seqlock_irqsave(&xtime_lock, flags); if (ti == time_interpolator) { /* we lost the best time-interpolator: */ time_interpolator = NULL; @@ -1483,7 +1486,7 @@ unregister_time_interpolator(struct time_interpolator *ti) if (is_better_time_interpolator(curr)) time_interpolator = curr; } - write_sequnlock_irq(&xtime_lock); + write_sequnlock_irqrestore(&xtime_lock, flags); spin_unlock(&time_interpolator_lock); } #endif /* CONFIG_TIME_INTERPOLATION */ -- 2.53.0