RE: Issues with calling pm_runtime functions in platform_pm_suspend_noirq/IRQ disabled context.

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

 



> Finally, we have omap_sram_idle():
> 
> > In particular, for USB, while executing SRAM_Idle, is we use pm_runtime
> > functions, we see spurious IO-Pad interrupts.
> 
> Your message doesn't specify what PM runtime functions you are executing.
> But if those functions are calling mutex_lock(), then they obviously must
> not be called from omap_sram_idle() in interrupt context.
> 
> It's not clear from your message why you need to call PM runtime functions
> from the idle loop.  I'd suggest that you post the problematic code in
> question to the list.
>

USB issue:

Please refer to the USB patch attached (will be sent to the list as well in a few minutes)
As I mentioned previously, few drivers like GPIO, USB & UART have clock- disable/enable + context save/restore in Idle path(omap_sram_idle()).

In particular, I am referring to calling of the functions pm_runtime_put_sync() & pm_runtime_get_sync() for USB around wfi.

Now, the following call sequence from omap_sram_idle()will enable IRQs: 
pm_runtime_put_sync-->
	__pm_runtime_put-->
		pm_runtime_idle-->
			spin_unlock_irq(),
			__pm_runtime_idle(),-->
			 spin_unlock_irq,
				spin_unlock_irq 

The functions pm_runtime_idle() & __ pm_runtime_idle() do not use spin_lock_irqsave & spin_unlock_irqrestore. This leads to enabling of the interrupts in omap_sram_idle unconditionally, which for USB in particular is leading to IO-pad interrupt being triggered which does not come otherwise.

To work around this problem, instead of using Runtime APIs, we are using omap_device_enable/disable, which in-turn call to __omap_hwmod_enable/idle

Simply put, I am not talking about grabbing a mutex when interrupts are disabled, rather of a scenario where interrupts are getting enabled as a side-effect of calling these functions in   omap_sram_idle().
> 
> - Paul

Attachment: 0008-runtime-pm-changes.patch
Description: 0008-runtime-pm-changes.patch


[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