RE: [PATCH imx_4.9.y 1/2] PM / Domains: Fix error path during attach in genpd

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Leonard Crestez
> Sent: Monday, September 3, 2018 6:16 PM
> To: Anson Huang <anson.huang@xxxxxxx>; A.s. Dong
> <aisheng.dong@xxxxxxx>
> Cc: Ranjani Vaidyanathan <ranjani.vaidyanathan@xxxxxxx>; Nitin Garg
> <nitin.garg@xxxxxxx>; Jason Liu <jason.hui.liu@xxxxxxx>; Pete Zhang
> <pete.zhang@xxxxxxx>; Eagle Zhou <eagle.zhou@xxxxxxx>; LnxRevLi
> <LnxRevLi@xxxxxxx>; Ulf Hansson <ulf.hansson@xxxxxxxxxx>; v4 . 11+
> <stable@xxxxxxxxxxxxxxx>; Rafael J . Wysocki <rafael.j.wysocki@xxxxxxxxx>
> Subject: [PATCH imx_4.9.y 1/2] PM / Domains: Fix error path during attach in
> genpd
> 
> From: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
> 
> In case the PM domain fails to be powered on in genpd_dev_pm_attach(), it
> returns -EPROBE_DEFER, but keeping the device attached to its PM domain.
> This leads to problems when the next attempt to attach is re-tried. More
> precisely, in that situation an -EEXIST error code is returned, because the device
> already has its PM domain pointer assigned, from the first attempt.
> 
> Now, because of the sloppy error handling by the existing callers of
> dev_pm_domain_attach(), probing is allowed to continue when -EEXIST is
> returned. However, in such case there are no guarantees that the PM domain is
> powered on by genpd, which may lead to hangs when buses/drivers tried to
> access their devices.
> 
> Let's fix this behaviour, simply by detaching the device when powering on fails
> in genpd_dev_pm_attach().
> 
> Cc: v4.11+ <stable@xxxxxxxxxxxxxxx> # v4.11+

Although this patch is stated only needed for v4.11+, but it seems to me 4.9 has the same issue
and also needs it.

Reviewed-by: Dong Aisheng <Aisheng.dong@xxxxxxx>

Hi Leonard,
I guess you could also try to send it to 4.9 LTS kernel maillist to test maintainer later.

Regards
Dong Aisheng

> Signed-off-by: Ulf Hansson <ulf.hansson@xxxxxxxxxx>
> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx>
> 
> (cherry picked from commit 72038df3c580c4c326b83c86149d7ac34007532a)
> 
> Cherry-picked to imx_4.9.y with minimal conflicts so that we can properly
> handle errors from SCFW pm calls
> Signed-off-by: Leonard Crestez <leonard.crestez@xxxxxxx>
> ---
>  drivers/base/power/domain.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index
> 9c3e535795a0..d9681d372997 100644
> --- a/drivers/base/power/domain.c
> +++ b/drivers/base/power/domain.c
> @@ -1936,10 +1936,13 @@ int genpd_dev_pm_attach(struct device *dev)
>  	dev->pm_domain->sync = genpd_dev_pm_sync;
> 
>  	mutex_lock(&pd->lock);
>  	ret = genpd_poweron(pd, 0);
>  	mutex_unlock(&pd->lock);
> +
> +	if (ret)
> +		genpd_remove_device(pd, dev);
>  out:
>  	return ret ? -EPROBE_DEFER : 0;
>  }
>  EXPORT_SYMBOL_GPL(genpd_dev_pm_attach);
>  #endif /* CONFIG_PM_GENERIC_DOMAINS_OF */
> --
> 2.17.1





[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux