lkml.org 
[lkml]   [2004]   [Aug]   [24]   [last100]   RSS Feed
Views: [more markup]  [less markup]  [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Subjectinterrupt is enabled before it should be when kernel is booted
DateTue, 24 Aug 2004 14:36:19 +0800
From"Zhang, Yanmin" <>
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->writ
e_seqlock_irq. 
The attachment is a patch to fix it in generic source codes against
2.6.8.

Signed-off-by:	Zhang Yanmin <yanmin.zhang@intel.com>
Signed-off-by:	Yao Jun	<junx.yao@intel.com>


diff -Nraup linux-2.6.8/kernel/timer.c linux-2.6.8_fix/kernel/timer.c
--- linux-2.6.8/kernel/timer.c	2004-08-16 07:58:21.000000000 +0800
+++ linux-2.6.8_fix/kernel/timer.c	2004-08-17 17:03:38.364035163
+0800
@@ -1447,11 +1447,13 @@ is_better_time_interpolator(struct time_
 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;
@@ -1462,6 +1464,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;
@@ -1473,7 +1476,7 @@ unregister_time_interpolator(struct time
 		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;
@@ -1482,7 +1485,7 @@ unregister_time_interpolator(struct time
 			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 */


 <<time_init_enable_interrupt.patch.diff>> [unhandled content-type:application/octet-stream]
\
 
 \ /
  Last update: 2005-03-22 14:05    [from the cache]
©2003-2008