From: Lokesh Vutla <a0131933@ti.com>
To: Tero Kristo <t-kristo@ti.com>, Paul Walmsley <paul@pwsan.com>
Cc: Lokesh Vutla <lokeshvutla@ti.com>,
tony@atomide.com, linux-omap@vger.kernel.org, nsekhar@ti.com,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 0/3] ARM: OMAP2+: hwmod: RTC: Add lock and unlock hooks
Date: Thu, 16 Jul 2015 17:56:39 +0530 [thread overview]
Message-ID: <55A7A2FF.2010307@ti.com> (raw)
In-Reply-To: <55A79DA6.4070206@ti.com>
Hi Tero,
On Thursday 16 July 2015 05:33 PM, Tero Kristo wrote:
> On 07/16/2015 01:13 PM, Paul Walmsley wrote:
>> On Thu, 16 Jul 2015, Tero Kristo wrote:
>>
>>> On 07/16/2015 03:15 AM, Paul Walmsley wrote:
>>>> On Tue, 14 Jul 2015, Tero Kristo wrote:
>>>>
>>>>> On 07/14/2015 01:09 PM, Lokesh Vutla wrote:
>>>>>> Hi,
>>>>>> On Wednesday 10 June 2015 02:56 PM, Lokesh Vutla wrote:
>>>>>>> Some IP blocks like RTC, needs an additional unlocking mechanism for
>>>>>>> writing to its registers. This patch adds optional lock and unlock
>>>>>>> function pointers to the IP block's hwmod data which gets executed
>>>>>>> before and after writing into IP sysconfig register.
>>>>>>> And also hook lock and unlock functions to AMx3xx, DRA7 RTC hwmod
>>>>>>> data,
>>>>>>> so that sysconfig registers are updated properly.
>>>>>> ping on this series.
>>>>>>
>>>>>> Thanks and regards,
>>>>>> Lokesh
>>>>>
>>>>
>>>> [...]
>>>>
>>>>> It is also racy, as there is no locking in place to avoid concurrent
>>>>> access to
>>>>> the lock/unlock registers across hwmod+driver.
>>>>
>>>> I don't see the race. Where is it?
>>>
>>> See drivers/rtc/rtc-omap.c, am3352_rtc_unlock and am3352_rtc_lock.
>>>
>>> That code is accessing the exact same registers.
>>
>> I guess my question is, when is it possible that code could race with the
>> hwmod code for the same device?
>
> Hmm yea I think you are right, this only gets potentially called within
> pm_runtime_get/put_sync for RTC.
Yes, sysc is written from hwmod_init code and pm_runtime_get/put_sysnc.
And we write into rtc registers only after pm_runtime_get_sync and
rtc_unlock.
There cannot be a race condition here.
>
> The current sequence is highly inefficient though, as we are doing
> multiple lock/unlock operations to the RTC from multiple sources. See
> following rtcwake trace on am43xx-gp-evm as an example.
Initially I had a patch which leaves rtc unlocked at hwmod_init instead
of doing
unlock and lock for each set of register writes in the driver.
But it was rejected stating that deviates the purpose of locking mechanism.
So I updated the driver for adapting this locking and unlocking mechanism.
Thanks and regards,
Lokesh
>
>
> / # rtcwake -s 4 -m mem
> [ 7.425322] am3352_rtc_unlock
> [ 7.428330] am3352_rtc_lock
> [ 7.431139] am3352_rtc_unlock
> [ 7.434116] am3352_rtc_lock
> wakeup from "mem" at Sat Jan 1 00:00:11 2000
> [ 7.448549] PM: Syncing filesystems ... done.
> [ 7.455425] Freezing user space processes ... (elapsed 0.001 seconds)
> done.
> [ 7.463738] Freezing remaining freezable tasks ... (elapsed 0.001
> seconds) do
> ne.
> [ 7.472532] Suspending console(s) (use no_console_suspend to debug)
> [ 7.481878] am3352_rtc_unlock
> [ 7.481889] am3352_rtc_lock
> [ 7.482307] PM: suspend of devices complete after 2.713 msecs
> [ 7.483479] PM: late suspend of devices complete after 1.153 msecs
> [ 7.484727] omap_hwmod_rtc_unlock
> [ 7.484733] omap_hwmod_rtc_lock
> [ 7.485182] PM: noirq suspend of devices complete after 1.685 msecs
> [ 7.485190] Disabling non-boot CPUs ...
> [ 7.485199] PM: Successfully put all powerdomains to target state
> [ 7.485199] PM: Wakeup source RTC Alarm
> [ 7.499853] PM: noirq resume of devices complete after 14.558 msecs
> [ 7.500047] am3352_rtc_unlock
> [ 7.500052] am3352_rtc_lock
> [ 7.500123] am3352_rtc_unlock
> [ 7.500128] am3352_rtc_lock
> [ 7.501019] PM: early resume of devices complete after 0.809 msecs
> [ 7.501464] am3352_rtc_unlock
> [ 7.501472] am3352_rtc_lock
> [ 7.558046] PM: resume of devices complete after 57.007 msecs
> [ 7.638807] Restarting tasks ... done.
> [ 7.643173] am3352_rtc_unlock
> [ 7.646162] am3352_rtc_lock
>
> But, I guess this is for some interested party to optimize if needed,
> and it is mostly an issue with the RTC driver itself.
>
> -Tero
>
WARNING: multiple messages have this Message-ID (diff)
From: a0131933@ti.com (Lokesh Vutla)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 0/3] ARM: OMAP2+: hwmod: RTC: Add lock and unlock hooks
Date: Thu, 16 Jul 2015 17:56:39 +0530 [thread overview]
Message-ID: <55A7A2FF.2010307@ti.com> (raw)
In-Reply-To: <55A79DA6.4070206@ti.com>
Hi Tero,
On Thursday 16 July 2015 05:33 PM, Tero Kristo wrote:
> On 07/16/2015 01:13 PM, Paul Walmsley wrote:
>> On Thu, 16 Jul 2015, Tero Kristo wrote:
>>
>>> On 07/16/2015 03:15 AM, Paul Walmsley wrote:
>>>> On Tue, 14 Jul 2015, Tero Kristo wrote:
>>>>
>>>>> On 07/14/2015 01:09 PM, Lokesh Vutla wrote:
>>>>>> Hi,
>>>>>> On Wednesday 10 June 2015 02:56 PM, Lokesh Vutla wrote:
>>>>>>> Some IP blocks like RTC, needs an additional unlocking mechanism for
>>>>>>> writing to its registers. This patch adds optional lock and unlock
>>>>>>> function pointers to the IP block's hwmod data which gets executed
>>>>>>> before and after writing into IP sysconfig register.
>>>>>>> And also hook lock and unlock functions to AMx3xx, DRA7 RTC hwmod
>>>>>>> data,
>>>>>>> so that sysconfig registers are updated properly.
>>>>>> ping on this series.
>>>>>>
>>>>>> Thanks and regards,
>>>>>> Lokesh
>>>>>
>>>>
>>>> [...]
>>>>
>>>>> It is also racy, as there is no locking in place to avoid concurrent
>>>>> access to
>>>>> the lock/unlock registers across hwmod+driver.
>>>>
>>>> I don't see the race. Where is it?
>>>
>>> See drivers/rtc/rtc-omap.c, am3352_rtc_unlock and am3352_rtc_lock.
>>>
>>> That code is accessing the exact same registers.
>>
>> I guess my question is, when is it possible that code could race with the
>> hwmod code for the same device?
>
> Hmm yea I think you are right, this only gets potentially called within
> pm_runtime_get/put_sync for RTC.
Yes, sysc is written from hwmod_init code and pm_runtime_get/put_sysnc.
And we write into rtc registers only after pm_runtime_get_sync and
rtc_unlock.
There cannot be a race condition here.
>
> The current sequence is highly inefficient though, as we are doing
> multiple lock/unlock operations to the RTC from multiple sources. See
> following rtcwake trace on am43xx-gp-evm as an example.
Initially I had a patch which leaves rtc unlocked at hwmod_init instead
of doing
unlock and lock for each set of register writes in the driver.
But it was rejected stating that deviates the purpose of locking mechanism.
So I updated the driver for adapting this locking and unlocking mechanism.
Thanks and regards,
Lokesh
>
>
> / # rtcwake -s 4 -m mem
> [ 7.425322] am3352_rtc_unlock
> [ 7.428330] am3352_rtc_lock
> [ 7.431139] am3352_rtc_unlock
> [ 7.434116] am3352_rtc_lock
> wakeup from "mem" at Sat Jan 1 00:00:11 2000
> [ 7.448549] PM: Syncing filesystems ... done.
> [ 7.455425] Freezing user space processes ... (elapsed 0.001 seconds)
> done.
> [ 7.463738] Freezing remaining freezable tasks ... (elapsed 0.001
> seconds) do
> ne.
> [ 7.472532] Suspending console(s) (use no_console_suspend to debug)
> [ 7.481878] am3352_rtc_unlock
> [ 7.481889] am3352_rtc_lock
> [ 7.482307] PM: suspend of devices complete after 2.713 msecs
> [ 7.483479] PM: late suspend of devices complete after 1.153 msecs
> [ 7.484727] omap_hwmod_rtc_unlock
> [ 7.484733] omap_hwmod_rtc_lock
> [ 7.485182] PM: noirq suspend of devices complete after 1.685 msecs
> [ 7.485190] Disabling non-boot CPUs ...
> [ 7.485199] PM: Successfully put all powerdomains to target state
> [ 7.485199] PM: Wakeup source RTC Alarm
> [ 7.499853] PM: noirq resume of devices complete after 14.558 msecs
> [ 7.500047] am3352_rtc_unlock
> [ 7.500052] am3352_rtc_lock
> [ 7.500123] am3352_rtc_unlock
> [ 7.500128] am3352_rtc_lock
> [ 7.501019] PM: early resume of devices complete after 0.809 msecs
> [ 7.501464] am3352_rtc_unlock
> [ 7.501472] am3352_rtc_lock
> [ 7.558046] PM: resume of devices complete after 57.007 msecs
> [ 7.638807] Restarting tasks ... done.
> [ 7.643173] am3352_rtc_unlock
> [ 7.646162] am3352_rtc_lock
>
> But, I guess this is for some interested party to optimize if needed,
> and it is mostly an issue with the RTC driver itself.
>
> -Tero
>
next prev parent reply other threads:[~2015-07-16 12:26 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-10 9:26 [PATCH 0/3] ARM: OMAP2+: hwmod: RTC: Add lock and unlock hooks Lokesh Vutla
2015-06-10 9:26 ` Lokesh Vutla
2015-06-10 9:26 ` [PATCH 1/3] ARM: OMAP2+: hwmod: add support for " Lokesh Vutla
2015-06-10 9:26 ` Lokesh Vutla
2015-07-16 0:07 ` Paul Walmsley
2015-07-16 0:07 ` Paul Walmsley
2015-06-10 9:26 ` [PATCH 2/3] ARM: DRA: hwmod: RTC: Add lock and unlock functions Lokesh Vutla
2015-06-10 9:26 ` Lokesh Vutla
2015-07-16 0:13 ` Paul Walmsley
2015-07-16 0:13 ` Paul Walmsley
2015-07-16 12:34 ` Lokesh Vutla
2015-07-16 12:34 ` Lokesh Vutla
2015-06-10 9:26 ` [PATCH 3/3] ARM: AMx3xx: " Lokesh Vutla
2015-06-10 9:26 ` Lokesh Vutla
2015-07-16 0:14 ` Paul Walmsley
2015-07-16 0:14 ` Paul Walmsley
2015-07-16 12:28 ` Lokesh Vutla
2015-07-16 12:28 ` Lokesh Vutla
2015-07-14 10:09 ` [PATCH 0/3] ARM: OMAP2+: hwmod: RTC: Add lock and unlock hooks Lokesh Vutla
2015-07-14 10:09 ` Lokesh Vutla
2015-07-14 14:51 ` Tero Kristo
2015-07-14 14:51 ` Tero Kristo
2015-07-16 0:15 ` Paul Walmsley
2015-07-16 0:15 ` Paul Walmsley
2015-07-16 7:09 ` Tero Kristo
2015-07-16 7:09 ` Tero Kristo
2015-07-16 10:13 ` Paul Walmsley
2015-07-16 10:13 ` Paul Walmsley
2015-07-16 12:03 ` Tero Kristo
2015-07-16 12:03 ` Tero Kristo
2015-07-16 12:26 ` Lokesh Vutla [this message]
2015-07-16 12:26 ` Lokesh Vutla
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=55A7A2FF.2010307@ti.com \
--to=a0131933@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=lokeshvutla@ti.com \
--cc=nsekhar@ti.com \
--cc=paul@pwsan.com \
--cc=t-kristo@ti.com \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.