* [PATCH 4.19 061/106] PCI: rockchip: Propagate errors for optional regulators [not found] ` <20191006171124.641144086-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org> @ 2019-10-06 17:21 ` Greg Kroah-Hartman 2019-10-08 12:24 ` Pavel Machek 0 siblings, 1 reply; 2+ messages in thread From: Greg Kroah-Hartman @ 2019-10-06 17:21 UTC (permalink / raw) To: linux-kernel-u79uwXL29TY76Z2rM5mHXA Cc: Sasha Levin, Lorenzo Pieralisi, Heiko Stuebner, Greg Kroah-Hartman, Shawn Lin, stable-u79uwXL29TY76Z2rM5mHXA, linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, Andrew Murray, Thierry Reding From: Thierry Reding <treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> [ Upstream commit 0e3ff0ac5f71bdb6be2a698de0ed0c7e6e738269 ] regulator_get_optional() can fail for a number of reasons besides probe deferral. It can for example return -ENOMEM if it runs out of memory as it tries to allocate data structures. Propagating only -EPROBE_DEFER is problematic because it results in these legitimately fatal errors being treated as "regulator not specified in DT". What we really want is to ignore the optional regulators only if they have not been specified in DT. regulator_get_optional() returns -ENODEV in this case, so that's the special case that we need to handle. So we propagate all errors, except -ENODEV, so that real failures will still cause the driver to fail probe. Tested-by: Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org> Signed-off-by: Thierry Reding <treding-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi-5wv7dgnIgG8@public.gmane.org> Reviewed-by: Andrew Murray <andrew.murray-5wv7dgnIgG8@public.gmane.org> Reviewed-by: Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org> Acked-by: Shawn Lin <shawn.lin-TNX95d0MmH7DzftRWevZcw@public.gmane.org> Cc: Shawn Lin <shawn.lin-TNX95d0MmH7DzftRWevZcw@public.gmane.org> Cc: Heiko Stuebner <heiko-4mtYJXux2i+zQB+pC5nmwQ@public.gmane.org> Cc: linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org Signed-off-by: Sasha Levin <sashal-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> --- drivers/pci/controller/pcie-rockchip-host.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/pci/controller/pcie-rockchip-host.c b/drivers/pci/controller/pcie-rockchip-host.c index 1372d270764f9..5ce8e63756875 100644 --- a/drivers/pci/controller/pcie-rockchip-host.c +++ b/drivers/pci/controller/pcie-rockchip-host.c @@ -608,29 +608,29 @@ static int rockchip_pcie_parse_host_dt(struct rockchip_pcie *rockchip) rockchip->vpcie12v = devm_regulator_get_optional(dev, "vpcie12v"); if (IS_ERR(rockchip->vpcie12v)) { - if (PTR_ERR(rockchip->vpcie12v) == -EPROBE_DEFER) - return -EPROBE_DEFER; + if (PTR_ERR(rockchip->vpcie12v) != -ENODEV) + return PTR_ERR(rockchip->vpcie12v); dev_info(dev, "no vpcie12v regulator found\n"); } rockchip->vpcie3v3 = devm_regulator_get_optional(dev, "vpcie3v3"); if (IS_ERR(rockchip->vpcie3v3)) { - if (PTR_ERR(rockchip->vpcie3v3) == -EPROBE_DEFER) - return -EPROBE_DEFER; + if (PTR_ERR(rockchip->vpcie3v3) != -ENODEV) + return PTR_ERR(rockchip->vpcie3v3); dev_info(dev, "no vpcie3v3 regulator found\n"); } rockchip->vpcie1v8 = devm_regulator_get_optional(dev, "vpcie1v8"); if (IS_ERR(rockchip->vpcie1v8)) { - if (PTR_ERR(rockchip->vpcie1v8) == -EPROBE_DEFER) - return -EPROBE_DEFER; + if (PTR_ERR(rockchip->vpcie1v8) != -ENODEV) + return PTR_ERR(rockchip->vpcie1v8); dev_info(dev, "no vpcie1v8 regulator found\n"); } rockchip->vpcie0v9 = devm_regulator_get_optional(dev, "vpcie0v9"); if (IS_ERR(rockchip->vpcie0v9)) { - if (PTR_ERR(rockchip->vpcie0v9) == -EPROBE_DEFER) - return -EPROBE_DEFER; + if (PTR_ERR(rockchip->vpcie0v9) != -ENODEV) + return PTR_ERR(rockchip->vpcie0v9); dev_info(dev, "no vpcie0v9 regulator found\n"); } -- 2.20.1 ^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH 4.19 061/106] PCI: rockchip: Propagate errors for optional regulators 2019-10-06 17:21 ` [PATCH 4.19 061/106] PCI: rockchip: Propagate errors for optional regulators Greg Kroah-Hartman @ 2019-10-08 12:24 ` Pavel Machek 0 siblings, 0 replies; 2+ messages in thread From: Pavel Machek @ 2019-10-08 12:24 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: linux-kernel, stable, Heiko Stuebner, Thierry Reding, Lorenzo Pieralisi, Andrew Murray, Shawn Lin, linux-rockchip, Sasha Levin [-- Attachment #1: Type: text/plain, Size: 2666 bytes --] On Sun 2019-10-06 19:21:07, Greg Kroah-Hartman wrote: > From: Thierry Reding <treding@nvidia.com> > > [ Upstream commit 0e3ff0ac5f71bdb6be2a698de0ed0c7e6e738269 ] > > regulator_get_optional() can fail for a number of reasons besides probe > deferral. It can for example return -ENOMEM if it runs out of memory as > it tries to allocate data structures. Propagating only -EPROBE_DEFER is > problematic because it results in these legitimately fatal errors being > treated as "regulator not specified in DT". > > What we really want is to ignore the optional regulators only if they > have not been specified in DT. regulator_get_optional() returns -ENODEV > in this case, so that's the special case that we need to handle. So we > propagate all errors, except -ENODEV, so that real failures will still > cause the driver to fail probe. 61,62,63,64: Is this fixing any real bug? Why is it suitable for -stable? Pavel > +++ b/drivers/pci/controller/pcie-rockchip-host.c > @@ -608,29 +608,29 @@ static int rockchip_pcie_parse_host_dt(struct rockchip_pcie *rockchip) > > rockchip->vpcie12v = devm_regulator_get_optional(dev, "vpcie12v"); > if (IS_ERR(rockchip->vpcie12v)) { > - if (PTR_ERR(rockchip->vpcie12v) == -EPROBE_DEFER) > - return -EPROBE_DEFER; > + if (PTR_ERR(rockchip->vpcie12v) != -ENODEV) > + return PTR_ERR(rockchip->vpcie12v); > dev_info(dev, "no vpcie12v regulator found\n"); > } > > rockchip->vpcie3v3 = devm_regulator_get_optional(dev, "vpcie3v3"); > if (IS_ERR(rockchip->vpcie3v3)) { > - if (PTR_ERR(rockchip->vpcie3v3) == -EPROBE_DEFER) > - return -EPROBE_DEFER; > + if (PTR_ERR(rockchip->vpcie3v3) != -ENODEV) > + return PTR_ERR(rockchip->vpcie3v3); > dev_info(dev, "no vpcie3v3 regulator found\n"); > } > > rockchip->vpcie1v8 = devm_regulator_get_optional(dev, "vpcie1v8"); > if (IS_ERR(rockchip->vpcie1v8)) { > - if (PTR_ERR(rockchip->vpcie1v8) == -EPROBE_DEFER) > - return -EPROBE_DEFER; > + if (PTR_ERR(rockchip->vpcie1v8) != -ENODEV) > + return PTR_ERR(rockchip->vpcie1v8); > dev_info(dev, "no vpcie1v8 regulator found\n"); > } > > rockchip->vpcie0v9 = devm_regulator_get_optional(dev, "vpcie0v9"); > if (IS_ERR(rockchip->vpcie0v9)) { > - if (PTR_ERR(rockchip->vpcie0v9) == -EPROBE_DEFER) > - return -EPROBE_DEFER; > + if (PTR_ERR(rockchip->vpcie0v9) != -ENODEV) > + return PTR_ERR(rockchip->vpcie0v9); > dev_info(dev, "no vpcie0v9 regulator found\n"); > } > -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 181 bytes --] ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-10-08 12:24 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20191006171124.641144086@linuxfoundation.org>
[not found] ` <20191006171124.641144086-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org>
2019-10-06 17:21 ` [PATCH 4.19 061/106] PCI: rockchip: Propagate errors for optional regulators Greg Kroah-Hartman
2019-10-08 12:24 ` Pavel Machek
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).