>-----Original Message-----
>From: [email protected] 
>[mailto:[email protected]] On Behalf Of ext Kevin Hilman
>Sent: 25 February, 2010 17:21
>To: Kristo Tero (Nokia-D/Tampere)
>Cc: [email protected]
>Subject: Re: [PATCHv5] OMAP3: Serial: Improved sleep logic
>
><[email protected]> writes:
>
>[...]
>
>>>Here's my hunch as to what's happening:
>>>
>>>I think the problem is a deadlock in getrawmonotonic().  Nested calls
>>>here will deadlock due to the xtime_lock being held.
>>
>> Looking at the seqlock code, I think a seqlock reader can 
>"hang" only in a case where someone is constantly writing the 
>seqlock. And, as we are inside interrupt, this should not be possible.
>>
>>>When updading the timeout, sleep_timeout_store() does a
>>>getrawmonotonic() to update the expiry time.  While this happening,
>>>the UART interrupt could fire, causing an omap_uart_block_sleep()
>>>which would also getrawmonotonic() and deadlock in interrupt mode.
>>
>> It does not really explain why it hangs after the 5 second 
>period though, as the device has called getrawmonotonic 
>several times by this already. I have not seen this kind of 
>behavior in my testing, even while fiddling with the 
>sleep_timeout_store().
>
>minor clarification...
>
>For me the hang is not after the 5 second timeout.  For me it happens
>as soon as I write a non-zero value to
>/sys/devices/.../serial8250.2/sleep_timeout.

It looks somewhat weird... I did some debugging on this today and I am seeing 
the same hang here, and it actually seems to be caused by the getrawmonotonic() 
somehow, as the system did not hang anymore after I removed the calls. Anyway, 
I figured another way to solve the issues I am seeing. I reverted back to using 
jiffy timers, but added a workqueue for wakeups; now wakeup timers are kicked 
into action after the timebase is restored. I'll post the new patch right away.

There is still one issue with the UART though; some TX is still lost because PM 
code does not currently prevent CORE off while PER is active, basically 
resetting the PER domain when CORE goes off. This would be fixed by the cpuidle 
set I posted a bit back.

Another note, I am seeing really strange behavior for my n900 with current 
linux-omap tree. PM branch boots up nicely, but it does not go into dynamic 
idle until I force it to suspend once.... Also, master branch crashes mid-boot 
to an ubifs caused DMA failure.

-Tero
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to