From: Rajendra Nayak <rnayak@ti.com>
To: Jean Pihet <jean.pihet@newoldbits.com>
Cc: linux-omap@vger.kernel.org, paul@pwsan.com,
linux-arm-kernel@lists.infradead.org, khilman@ti.com,
Jean Pihet <j-pihet@ti.com>
Subject: Re: [PATCH 1/8] ARM: OMAP2+: PM: protect the power domain state change by a mutex
Date: Wed, 20 Jun 2012 14:47:33 +0530 [thread overview]
Message-ID: <4FE1952D.1020102@ti.com> (raw)
In-Reply-To: <1339685591-11177-2-git-send-email-j-pihet@ti.com>
On Thursday 14 June 2012 08:23 PM, Jean Pihet wrote:
> omap_set_pwrdm_state is intented to be the only API for changing
> a power domain state.
Yes, but there are others which are used to _read_ the power domain
state. Shouldn't those be protected too?
> This patch protects the power domains settings and structs from
> concurrent accesses to the function by using a mutex.
>
> Signed-off-by: Jean Pihet<j-pihet@ti.com>
> ---
> arch/arm/mach-omap2/pm.c | 8 ++++++--
> arch/arm/mach-omap2/powerdomain.c | 1 +
> arch/arm/mach-omap2/powerdomain.h | 3 ++-
> 3 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c
> index 9cb5ced..a05f00c 100644
> --- a/arch/arm/mach-omap2/pm.c
> +++ b/arch/arm/mach-omap2/pm.c
> @@ -100,15 +100,17 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 pwrst)
> if (!pwrdm || IS_ERR(pwrdm))
> return -EINVAL;
>
> + mutex_lock(&pwrdm->lock);
> +
> while (!(pwrdm->pwrsts& (1<< pwrst))) {
> if (pwrst == PWRDM_POWER_OFF)
> - return ret;
> + goto out;
> pwrst--;
> }
>
> next_pwrst = pwrdm_read_next_pwrst(pwrdm);
> if (next_pwrst == pwrst)
> - return ret;
> + goto out;
>
> curr_pwrst = pwrdm_read_pwrst(pwrdm);
> if (curr_pwrst< PWRDM_POWER_ON) {
> @@ -141,6 +143,8 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 pwrst)
> break;
> }
>
> +out:
> + mutex_unlock(&pwrdm->lock);
> return ret;
> }
>
> diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c
> index 9611490..1641e72 100644
> --- a/arch/arm/mach-omap2/powerdomain.c
> +++ b/arch/arm/mach-omap2/powerdomain.c
> @@ -102,6 +102,7 @@ static int _pwrdm_register(struct powerdomain *pwrdm)
> INIT_LIST_HEAD(&pwrdm->voltdm_node);
> voltdm_add_pwrdm(voltdm, pwrdm);
>
> + mutex_init(&pwrdm->lock);
> list_add(&pwrdm->node,&pwrdm_list);
>
> /* Initialize the powerdomain's state counter */
> diff --git a/arch/arm/mach-omap2/powerdomain.h b/arch/arm/mach-omap2/powerdomain.h
> index 8f88d65..bab84fc 100644
> --- a/arch/arm/mach-omap2/powerdomain.h
> +++ b/arch/arm/mach-omap2/powerdomain.h
> @@ -19,7 +19,7 @@
>
> #include<linux/types.h>
> #include<linux/list.h>
> -
> +#include<linux/mutex.h>
> #include<linux/atomic.h>
>
> #include<plat/cpu.h>
> @@ -116,6 +116,7 @@ struct powerdomain {
> struct clockdomain *pwrdm_clkdms[PWRDM_MAX_CLKDMS];
> struct list_head node;
> struct list_head voltdm_node;
> + struct mutex lock;
> int state;
> unsigned state_counter[PWRDM_MAX_PWRSTS];
> unsigned ret_logic_off_counter;
WARNING: multiple messages have this Message-ID (diff)
From: rnayak@ti.com (Rajendra Nayak)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/8] ARM: OMAP2+: PM: protect the power domain state change by a mutex
Date: Wed, 20 Jun 2012 14:47:33 +0530 [thread overview]
Message-ID: <4FE1952D.1020102@ti.com> (raw)
In-Reply-To: <1339685591-11177-2-git-send-email-j-pihet@ti.com>
On Thursday 14 June 2012 08:23 PM, Jean Pihet wrote:
> omap_set_pwrdm_state is intented to be the only API for changing
> a power domain state.
Yes, but there are others which are used to _read_ the power domain
state. Shouldn't those be protected too?
> This patch protects the power domains settings and structs from
> concurrent accesses to the function by using a mutex.
>
> Signed-off-by: Jean Pihet<j-pihet@ti.com>
> ---
> arch/arm/mach-omap2/pm.c | 8 ++++++--
> arch/arm/mach-omap2/powerdomain.c | 1 +
> arch/arm/mach-omap2/powerdomain.h | 3 ++-
> 3 files changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/pm.c b/arch/arm/mach-omap2/pm.c
> index 9cb5ced..a05f00c 100644
> --- a/arch/arm/mach-omap2/pm.c
> +++ b/arch/arm/mach-omap2/pm.c
> @@ -100,15 +100,17 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 pwrst)
> if (!pwrdm || IS_ERR(pwrdm))
> return -EINVAL;
>
> + mutex_lock(&pwrdm->lock);
> +
> while (!(pwrdm->pwrsts& (1<< pwrst))) {
> if (pwrst == PWRDM_POWER_OFF)
> - return ret;
> + goto out;
> pwrst--;
> }
>
> next_pwrst = pwrdm_read_next_pwrst(pwrdm);
> if (next_pwrst == pwrst)
> - return ret;
> + goto out;
>
> curr_pwrst = pwrdm_read_pwrst(pwrdm);
> if (curr_pwrst< PWRDM_POWER_ON) {
> @@ -141,6 +143,8 @@ int omap_set_pwrdm_state(struct powerdomain *pwrdm, u32 pwrst)
> break;
> }
>
> +out:
> + mutex_unlock(&pwrdm->lock);
> return ret;
> }
>
> diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c
> index 9611490..1641e72 100644
> --- a/arch/arm/mach-omap2/powerdomain.c
> +++ b/arch/arm/mach-omap2/powerdomain.c
> @@ -102,6 +102,7 @@ static int _pwrdm_register(struct powerdomain *pwrdm)
> INIT_LIST_HEAD(&pwrdm->voltdm_node);
> voltdm_add_pwrdm(voltdm, pwrdm);
>
> + mutex_init(&pwrdm->lock);
> list_add(&pwrdm->node,&pwrdm_list);
>
> /* Initialize the powerdomain's state counter */
> diff --git a/arch/arm/mach-omap2/powerdomain.h b/arch/arm/mach-omap2/powerdomain.h
> index 8f88d65..bab84fc 100644
> --- a/arch/arm/mach-omap2/powerdomain.h
> +++ b/arch/arm/mach-omap2/powerdomain.h
> @@ -19,7 +19,7 @@
>
> #include<linux/types.h>
> #include<linux/list.h>
> -
> +#include<linux/mutex.h>
> #include<linux/atomic.h>
>
> #include<plat/cpu.h>
> @@ -116,6 +116,7 @@ struct powerdomain {
> struct clockdomain *pwrdm_clkdms[PWRDM_MAX_CLKDMS];
> struct list_head node;
> struct list_head voltdm_node;
> + struct mutex lock;
> int state;
> unsigned state_counter[PWRDM_MAX_PWRSTS];
> unsigned ret_logic_off_counter;
next prev parent reply other threads:[~2012-06-20 9:17 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-14 14:53 [PATCH v4 0/8] ARM: OMAP2+: PM: introduce the power domains functional states Jean Pihet
2012-06-14 14:53 ` Jean Pihet
2012-06-14 14:53 ` [PATCH 1/8] ARM: OMAP2+: PM: protect the power domain state change by a mutex Jean Pihet
2012-06-14 14:53 ` Jean Pihet
2012-06-20 9:17 ` Rajendra Nayak [this message]
2012-06-20 9:17 ` Rajendra Nayak
2012-06-14 14:53 ` [PATCH 2/8] ARM: OMAP2+: PM: introduce power domains functional states Jean Pihet
2012-06-14 14:53 ` Jean Pihet
2012-06-15 11:20 ` Jean Pihet
2012-06-15 11:20 ` Jean Pihet
2012-07-13 3:01 ` Menon, Nishanth
2012-07-13 3:01 ` Menon, Nishanth
2012-07-13 4:39 ` Nishanth Menon
2012-07-13 4:39 ` Nishanth Menon
2012-07-13 5:26 ` Rajendra Nayak
2012-07-13 5:26 ` Rajendra Nayak
2012-07-13 5:29 ` Menon, Nishanth
2012-07-13 5:29 ` Menon, Nishanth
2012-07-13 7:18 ` Jean Pihet
2012-07-13 7:18 ` Jean Pihet
2012-07-13 7:27 ` Menon, Nishanth
2012-07-13 7:27 ` Menon, Nishanth
2012-07-13 7:07 ` Jean Pihet
2012-07-13 7:07 ` Jean Pihet
2012-07-13 7:14 ` Menon, Nishanth
2012-07-13 7:14 ` Menon, Nishanth
2012-06-14 14:53 ` [PATCH 3/8] ARM: OMAP2+: PM: use the functional power states API Jean Pihet
2012-06-14 14:53 ` Jean Pihet
2012-06-14 14:53 ` [PATCH 4/8] ARM: OMAP2+: PM: introduce power domains logic and memory functional states Jean Pihet
2012-06-14 14:53 ` Jean Pihet
2012-06-14 14:53 ` [PATCH 5/8] ARM: OMAP2+: PM: introduce power domains achievable " Jean Pihet
2012-06-14 14:53 ` Jean Pihet
2012-06-15 11:28 ` Jean Pihet
2012-06-15 11:28 ` Jean Pihet
2012-07-19 6:57 ` Menon, Nishanth
2012-07-19 6:57 ` Menon, Nishanth
2012-06-14 14:53 ` [PATCH 6/8] ARM: OMAP2+: PM: use the functional power states API for logic and memory Jean Pihet
2012-06-14 14:53 ` Jean Pihet
2012-06-14 14:53 ` [PATCH 7/8] ARM: OMAP2+: PM: use power domain functional state in stats counters Jean Pihet
2012-06-14 14:53 ` Jean Pihet
2012-06-14 14:53 ` [PATCH 8/8] ARM: OMAP2+: PM debug: trace the functional power domains states Jean Pihet
2012-06-14 14:53 ` Jean Pihet
2012-07-13 13:41 ` [PATCH v4 0/8] ARM: OMAP2+: PM: introduce the power domains functional states Jean Pihet
2012-07-13 13:41 ` Jean Pihet
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=4FE1952D.1020102@ti.com \
--to=rnayak@ti.com \
--cc=j-pihet@ti.com \
--cc=jean.pihet@newoldbits.com \
--cc=khilman@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=paul@pwsan.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.