Re: Warnings: pm branch

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



----- Original Message ----- From: "Kevin Hilman" <khilman@xxxxxxxxxxxxxxxxxxx>
To: "Pandita, Vikram" <vikram.pandita@xxxxxx>
Cc: <linux-omap@xxxxxxxxxxxxxxx>
Sent: Tuesday, August 11, 2009 8:57 PM
Subject: Re: Warnings: pm branch


"Pandita, Vikram" <vikram.pandita@xxxxxx> writes:

Has anyone send these warning logs on the pm branch on kevin's tree [1]
This seems to be some issue in CpuIdle path with interrupts?

<4>WARNING: at arch/arm/kernel/process.c:171 cpu_idle+0x60/0x88()
WARNING: at arch/arm/kernel/process.c:171 cpu_idle+0x60/0x88()
<d>Modules linked in:Modules linked in:
[<c0031344>] [<c0031344>] (unwind_backtrace+0x0/0xdc) (unwind_backtrace+0x0/0xdc
) from [<c0057a08>] from [<c0057a08>] (warn_slowpath_common+0x48/0x60)
(warn_slowpath_common+0x48/0x60)
[<c0057a08>] [<c0057a08>] (warn_slowpath_common+0x48/0x60) (warn_slowpath_common
+0x48/0x60) from [<c002d204>] from [<c002d204>] (cpu_idle+0x60/0x88)
(cpu_idle+0x60/0x88)
[<c002d204>] [<c002d204>] (cpu_idle+0x60/0x88) (cpu_idle+0x60/0x88) from [<c0008
a70>] from [<c0008a70>] (start_kernel+0x234/0x28c)
(start_kernel+0x234/0x28c)
[<c0008a70>] [<c0008a70>] (start_kernel+0x234/0x28c) (start_kernel+0x234/0x28c)
from [<80008034>] from [<80008034>] (0x80008034)
(0x80008034)


Yes, I've seen it, but have yet to debug it.

This warning is from the generic ARM idle loop reporting that the OMAP
idle path is returning with IRQs disabled.

Kevin

I did some more debugging on this. I added the below instrumentation to local_irq_disable to capture
the PC of the last call to local_irq_disable.

extern unsigned long hem_pc;
register unsigned long current_pc asm ("pc");

#define local_irq_disable() \
do { hem_pc = current_pc;raw_local_irq_disable(); trace_hardirqs_off(); } while (0)


When I set a breakpoint at the instruction pointing to WARN_ON(irqs_disabled()) using lauterbach and dump hem_pc, I see that the last call to irq_disable is actuall from cpu_idle itself.
Looks like some recursion is happening. Does anyone have any inputs on this.

void cpu_idle(void)
{

       local_fiq_enable();

       /* endless idle loop with no priority at all */
       while (1) {
               tick_nohz_stop_sched_tick(1);
               leds_event(led_idle_start);
               while (!need_resched()) {
#ifdef CONFIG_HOTPLUG_CPU
                       if (cpu_is_offline(smp_processor_id()))
                               cpu_die();
#endif

                       local_irq_disable();


Thanks
Hemanth
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux