Messages in this thread Patch in this message | | | Subject | RE: Latency traces I cannot interpret (sa1100, 2.6.15-rc7-rt1) | From | Daniel Walker <> | Date | Tue, 03 Jan 2006 06:16:55 -0800 |
| |
On Tue, 2006-01-03 at 09:00 +0100, kus Kusche Klaus wrote: > > From: Daniel Walker > > Here's a more updated patch, the should replace the other > > patch I sent. > > I think the tracing error is the result of a missed interrupt > > enable in > > the ARM assembly code. I've only compile tested this. > > Compiles, but BUGs immediately after uncompressing (second line of > console output) and then runs into an infinite Oops loop... > Reproducible.
Ok, yet another patch. This one uses the correct lowlevel calls, and I fixed the call ordering.
Daniel Index: linux-2.6.14/arch/arm/kernel/process.c =================================================================== --- linux-2.6.14.orig/arch/arm/kernel/process.c +++ linux-2.6.14/arch/arm/kernel/process.c @@ -89,12 +89,12 @@ void default_idle(void) if (hlt_counter) cpu_relax(); else { - raw_local_irq_disable(); + __raw_local_irq_disable(); if (!need_resched()) { timer_dyn_reprogram(); arch_idle(); } - raw_local_irq_enable(); + __raw_local_irq_enable(); } } @@ -121,8 +121,10 @@ void cpu_idle(void) if (!idle) idle = default_idle; leds_event(led_idle_start); + __preempt_enable_no_resched(); while (!need_resched()) idle(); + preempt_disable(); leds_event(led_idle_end); __preempt_enable_no_resched(); __schedule(); Index: linux-2.6.14/arch/arm/kernel/entry-header.S =================================================================== --- linux-2.6.14.orig/arch/arm/kernel/entry-header.S +++ linux-2.6.14/arch/arm/kernel/entry-header.S @@ -39,17 +39,29 @@ #if __LINUX_ARM_ARCH__ >= 6 .macro disable_irq cpsid i +#ifdef CONFIG_CRITICAL_IRQSOFF_TIMING + b trace_irqs_off_lowlevel +#endif .endm .macro enable_irq +#ifdef CONFIG_CRITICAL_IRQSOFF_TIMING + b trace_irqs_on +#endif cpsie i .endm #else .macro disable_irq msr cpsr_c, #PSR_I_BIT | SVC_MODE +#ifdef CONFIG_CRITICAL_IRQSOFF_TIMING + b trace_irqs_off_lowlevel +#endif .endm .macro enable_irq +#ifdef CONFIG_CRITICAL_IRQSOFF_TIMING + b trace_irqs_on +#endif msr cpsr_c, #SVC_MODE .endm #endif | |