[PATCH] i2c: exynos5: Properly use the "noirq" variants of suspend/resume

Tomasz Figa tomasz.figa at gmail.com
Mon Jun 23 15:24:23 PDT 2014


On 24.06.2014 00:19, Kevin Hilman wrote:
> Doug Anderson <dianders at chromium.org> writes:
> 
> [...]
> 
>> On Fri, Jun 20, 2014 at 4:59 PM, Tomasz Figa <tomasz.figa at gmail.com> wrote:
>>>
>>> I'm not sure noirq is going to work correctly, at least not with current
>>> callbacks. I can see a call to clk_prepare_enable() there which needs to
>>> acquire a mutex.
>>
>> Nice catch, thanks!  :)
>>
>> OK, looking at that now.  Interestingly this doesn't seem to cause us
>> problems in our ChromeOS 3.8 tree.  I just tried enabling:
>>   CONFIG_DEBUG_ATOMIC_SLEEP=y
>>
>> ...and confirmed that I got it on right:
>>
>> # zgrep -i atomic /proc/config.gz
>> CONFIG_DEBUG_ATOMIC_SLEEP=y
>>
>> I can suspend/resume with no problems.  My bet is that it works fine because:
>>
>> * resume_noirq is not considered "atomic" in the sense enforced by
>> CONFIG_DEBUG_ATOMIC_SLEEP (at least not in 3.8--I haven't tried on
>> ToT)
> 
> The reason is because "noirq" in the suspend/resume path actually means
> no *device* IRQs for that specific device.
> 
> It's often assumed that the "noirq" callbacks are called with *all*
> interrupts disabled, but that's not the case.  Only the IRQs for that
> specific device are disabled when its noirq callbacks run.

Thanks for clarifying this. This means that we should be fine with the
noirq variant then.

Best regards,
Tomasz



More information about the linux-arm-kernel mailing list