From: Krzysztof Kozlowski <k.kozlowski@samsung.com>
To: Lina Iyer <lina.iyer@linaro.org>,
rjw@rjwysocki.net, ulf.hansson@linaro.org, khilman@linaro.org
Cc: geert@linux-m68k.org, linux-pm@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, msivasub@codeaurora.org,
agross@codeaurora.org
Subject: Re: [PATCH RFC v2 01/16] PM / Domains: Allocate memory outside domain locks
Date: Mon, 29 Jun 2015 09:26:27 +0900 [thread overview]
Message-ID: <559090B3.4040502@samsung.com> (raw)
In-Reply-To: <1435374156-19214-2-git-send-email-lina.iyer@linaro.org>
On 27.06.2015 12:02, Lina Iyer wrote:
> In preparation for supporting IRQ-safe domains, allocate domain data
> outside the domain locks. These functions are not called in an atomic
> context, so we can always allocate memory using GFP_KERNEL. By
> allocating memory before the locks, we can safely lock the domain using
> spinlocks instead of mutexes.
>
> Cc: Ulf Hansson <ulf.hansson@linaro.org>
> Cc: Rafael J. Wysocki <rjw@rjwysocki.net>
> Cc: Kevin Hilman <khilman@linaro.org>
> Signed-off-by: Lina Iyer <lina.iyer@linaro.org>
> ---
> Changes in v2:
> - Modify commit text
> ---
> drivers/base/power/domain.c | 27 +++++++++++++--------------
> 1 file changed, 13 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
> index 87d405a..44af889 100644
> --- a/drivers/base/power/domain.c
> +++ b/drivers/base/power/domain.c
> @@ -1379,13 +1379,17 @@ int pm_genpd_remove_device(struct generic_pm_domain *genpd,
> int pm_genpd_add_subdomain(struct generic_pm_domain *genpd,
> struct generic_pm_domain *subdomain)
> {
> - struct gpd_link *link;
> + struct gpd_link *link, *itr;
> int ret = 0;
>
> if (IS_ERR_OR_NULL(genpd) || IS_ERR_OR_NULL(subdomain)
> || genpd == subdomain)
> return -EINVAL;
>
> + link = kzalloc(sizeof(*link), GFP_KERNEL);
> + if (!link)
> + return -ENOMEM;
> +
> mutex_lock(&genpd->lock);
> mutex_lock_nested(&subdomain->lock, SINGLE_DEPTH_NESTING);
>
> @@ -1395,18 +1399,13 @@ int pm_genpd_add_subdomain(struct generic_pm_domain *genpd,
> goto out;
> }
>
> - list_for_each_entry(link, &genpd->master_links, master_node) {
> - if (link->slave == subdomain && link->master == genpd) {
> + list_for_each_entry(itr, &genpd->master_links, master_node) {
> + if (itr->slave == subdomain && itr->master == genpd) {
> ret = -EINVAL;
> goto out;
The same comment as in previous version - where is the kfree()? You
moved the allocation so all error paths have to be checked and adjusted.
Not just one that I pointed in previous review.
> }
> }
>
> - link = kzalloc(sizeof(*link), GFP_KERNEL);
> - if (!link) {
> - ret = -ENOMEM;
> - goto out;
> - }
> link->master = genpd;
> list_add_tail(&link->master_node, &genpd->master_links);
> link->slave = subdomain;
> @@ -1508,17 +1507,17 @@ int pm_genpd_attach_cpuidle(struct generic_pm_domain *genpd, int state)
> if (IS_ERR_OR_NULL(genpd) || state < 0)
> return -EINVAL;
>
> + cpuidle_data = kzalloc(sizeof(*cpuidle_data), GFP_KERNEL);
> + if (!cpuidle_data)
> + return -ENOMEM;
> +
> mutex_lock(&genpd->lock);
>
> if (genpd->cpuidle_data) {
> ret = -EEXIST;
> - goto out;
> - }
> - cpuidle_data = kzalloc(sizeof(*cpuidle_data), GFP_KERNEL);
> - if (!cpuidle_data) {
> - ret = -ENOMEM;
> - goto out;
> + goto err_drv;
Is the mutex freed in this exit path?
Best regards,
Krzysztof
> }
> +
> cpuidle_drv = cpuidle_driver_ref();
> if (!cpuidle_drv) {
> ret = -ENODEV;
>
WARNING: multiple messages have this Message-ID (diff)
From: k.kozlowski@samsung.com (Krzysztof Kozlowski)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH RFC v2 01/16] PM / Domains: Allocate memory outside domain locks
Date: Mon, 29 Jun 2015 09:26:27 +0900 [thread overview]
Message-ID: <559090B3.4040502@samsung.com> (raw)
In-Reply-To: <1435374156-19214-2-git-send-email-lina.iyer@linaro.org>
On 27.06.2015 12:02, Lina Iyer wrote:
> In preparation for supporting IRQ-safe domains, allocate domain data
> outside the domain locks. These functions are not called in an atomic
> context, so we can always allocate memory using GFP_KERNEL. By
> allocating memory before the locks, we can safely lock the domain using
> spinlocks instead of mutexes.
>
> Cc: Ulf Hansson <ulf.hansson@linaro.org>
> Cc: Rafael J. Wysocki <rjw@rjwysocki.net>
> Cc: Kevin Hilman <khilman@linaro.org>
> Signed-off-by: Lina Iyer <lina.iyer@linaro.org>
> ---
> Changes in v2:
> - Modify commit text
> ---
> drivers/base/power/domain.c | 27 +++++++++++++--------------
> 1 file changed, 13 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
> index 87d405a..44af889 100644
> --- a/drivers/base/power/domain.c
> +++ b/drivers/base/power/domain.c
> @@ -1379,13 +1379,17 @@ int pm_genpd_remove_device(struct generic_pm_domain *genpd,
> int pm_genpd_add_subdomain(struct generic_pm_domain *genpd,
> struct generic_pm_domain *subdomain)
> {
> - struct gpd_link *link;
> + struct gpd_link *link, *itr;
> int ret = 0;
>
> if (IS_ERR_OR_NULL(genpd) || IS_ERR_OR_NULL(subdomain)
> || genpd == subdomain)
> return -EINVAL;
>
> + link = kzalloc(sizeof(*link), GFP_KERNEL);
> + if (!link)
> + return -ENOMEM;
> +
> mutex_lock(&genpd->lock);
> mutex_lock_nested(&subdomain->lock, SINGLE_DEPTH_NESTING);
>
> @@ -1395,18 +1399,13 @@ int pm_genpd_add_subdomain(struct generic_pm_domain *genpd,
> goto out;
> }
>
> - list_for_each_entry(link, &genpd->master_links, master_node) {
> - if (link->slave == subdomain && link->master == genpd) {
> + list_for_each_entry(itr, &genpd->master_links, master_node) {
> + if (itr->slave == subdomain && itr->master == genpd) {
> ret = -EINVAL;
> goto out;
The same comment as in previous version - where is the kfree()? You
moved the allocation so all error paths have to be checked and adjusted.
Not just one that I pointed in previous review.
> }
> }
>
> - link = kzalloc(sizeof(*link), GFP_KERNEL);
> - if (!link) {
> - ret = -ENOMEM;
> - goto out;
> - }
> link->master = genpd;
> list_add_tail(&link->master_node, &genpd->master_links);
> link->slave = subdomain;
> @@ -1508,17 +1507,17 @@ int pm_genpd_attach_cpuidle(struct generic_pm_domain *genpd, int state)
> if (IS_ERR_OR_NULL(genpd) || state < 0)
> return -EINVAL;
>
> + cpuidle_data = kzalloc(sizeof(*cpuidle_data), GFP_KERNEL);
> + if (!cpuidle_data)
> + return -ENOMEM;
> +
> mutex_lock(&genpd->lock);
>
> if (genpd->cpuidle_data) {
> ret = -EEXIST;
> - goto out;
> - }
> - cpuidle_data = kzalloc(sizeof(*cpuidle_data), GFP_KERNEL);
> - if (!cpuidle_data) {
> - ret = -ENOMEM;
> - goto out;
> + goto err_drv;
Is the mutex freed in this exit path?
Best regards,
Krzysztof
> }
> +
> cpuidle_drv = cpuidle_driver_ref();
> if (!cpuidle_drv) {
> ret = -ENODEV;
>
next prev parent reply other threads:[~2015-06-29 0:26 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-27 3:02 [PATCH RFC v2 00/16] PM / Domains: Generic PM domains for CPUs Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-27 3:02 ` [PATCH RFC v2 01/16] PM / Domains: Allocate memory outside domain locks Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-29 0:26 ` Krzysztof Kozlowski [this message]
2015-06-29 0:26 ` Krzysztof Kozlowski
2015-06-29 16:36 ` Lina Iyer
2015-06-29 16:36 ` Lina Iyer
2015-06-27 3:02 ` [PATCH RFC v2 02/16] PM / Domains: Remove dev->driver check for runtime PM Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-29 0:40 ` Krzysztof Kozlowski
2015-06-29 0:40 ` Krzysztof Kozlowski
2015-06-27 3:02 ` [PATCH RFC v2 03/16] PM / Domains: Support IRQ safe PM domains Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-29 13:06 ` Geert Uytterhoeven
2015-06-29 13:06 ` Geert Uytterhoeven
2015-06-29 13:10 ` Geert Uytterhoeven
2015-06-29 13:10 ` Geert Uytterhoeven
2015-06-27 3:02 ` [PATCH RFC v2 04/16] WIP: ARM: PM domains for CPUs/clusters Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-27 3:02 ` [PATCH RFC v2 05/16] arm: domain: Remove hack to add dev->driver Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-27 3:02 ` [PATCH RFC v2 06/16] arm: domain: Make CPU genpd IRQ safe Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-27 3:02 ` [PATCH RFC v2 07/16] arm: domain: Synchronize CPU device runtime PM usage with idle state Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-29 13:13 ` Geert Uytterhoeven
2015-06-29 13:13 ` Geert Uytterhoeven
2015-06-27 3:02 ` [PATCH RFC v2 08/16] arm: domain: Handle CPU online reference counting Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-27 3:02 ` [PATCH RFC v2 09/16] arm: domain: Add platform callbacks for domain power on/off Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-29 13:36 ` Geert Uytterhoeven
2015-06-29 13:36 ` Geert Uytterhoeven
2015-06-29 16:32 ` Lina Iyer
2015-06-29 16:32 ` Lina Iyer
2015-06-30 15:10 ` Geert Uytterhoeven
2015-06-30 15:10 ` Geert Uytterhoeven
2015-07-02 19:38 ` Lina Iyer
2015-07-02 19:38 ` Lina Iyer
2015-07-03 11:36 ` Geert Uytterhoeven
2015-07-03 11:36 ` Geert Uytterhoeven
2015-07-06 15:18 ` Lina Iyer
2015-07-06 15:18 ` Lina Iyer
2015-07-13 16:36 ` Lina Iyer
2015-07-13 16:36 ` Lina Iyer
2015-06-27 3:02 ` [PATCH RFC v2 10/16] drivers: cpuidle: Add runtime PM support for CPUIdle Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-27 3:02 ` [PATCH RFC v2 11/16] drivers: qcom: spm: Support cache and coherency SPMs Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-27 3:02 ` [PATCH RFC v2 12/16] drivers: qcom: spm: Enable runtime suspend/resume of CPU PM domain Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-27 3:02 ` [PATCH RFC v2 13/16] drivers: qcom: spm: Add 8084 L2 SPM register data Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-27 3:02 ` [PATCH RFC v2 14/16] arm: dts: Add L2 power-controller device bindings for APQ8084 Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-27 3:02 ` [PATCH RFC v2 15/16] arm: dts: Add power domain " Lina Iyer
2015-06-27 3:02 ` Lina Iyer
2015-06-27 3:02 ` [PATCH RFC v2 16/16] drivers: qcom: Enable genpd on selecting QCOM_PM Lina Iyer
2015-06-27 3:02 ` Lina Iyer
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=559090B3.4040502@samsung.com \
--to=k.kozlowski@samsung.com \
--cc=agross@codeaurora.org \
--cc=geert@linux-m68k.org \
--cc=khilman@linaro.org \
--cc=lina.iyer@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-pm@vger.kernel.org \
--cc=msivasub@codeaurora.org \
--cc=rjw@rjwysocki.net \
--cc=ulf.hansson@linaro.org \
/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.