lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 9 Aug 2017 10:10:48 +0530 From: Arvind Yadav <arvind.yadav.cs@...il.com> To: Krzysztof Kozlowski <krzk@...nel.org> Cc: lee.jones@...aro.org, kgene@...nel.org, linux-kernel@...r.kernel.org, linux-arm-kernel@...ts.infradead.org, linux-samsung-soc@...r.kernel.org Subject: Re: [PATCH] mfd: exynos-lpass: Handle return value of clk_prepare_enable Thanks :) On Tuesday 08 August 2017 11:55 PM, Krzysztof Kozlowski wrote: > On Tue, Aug 08, 2017 at 05:20:55PM +0530, Arvind Yadav wrote: >> clk_prepare_enable() can fail here and we must check its return value. >> we must call pm_runtime_disable() and pm_runtime_set_suspended(), >> If exynos_lpass_probe is not successful. >> >> Signed-off-by: Arvind Yadav <arvind.yadav.cs@...il.com> > This is not a trivial change so please mark all such patches as RFT. > Submit checklist mentions testing in multiple steps and last time your > ASoC changes were not tested. I will ask for RFT. > >> --- >> drivers/mfd/exynos-lpass.c | 23 ++++++++++++++++------- >> 1 file changed, 16 insertions(+), 7 deletions(-) >> >> diff --git a/drivers/mfd/exynos-lpass.c b/drivers/mfd/exynos-lpass.c >> index ca829f8..c74ff62 100644 >> --- a/drivers/mfd/exynos-lpass.c >> +++ b/drivers/mfd/exynos-lpass.c >> @@ -73,9 +73,13 @@ static void exynos_lpass_core_sw_reset(struct exynos_lpass *lpass, int mask) >> regmap_write(lpass->top, SFR_LPASS_CORE_SW_RESET, val); >> } >> >> -static void exynos_lpass_enable(struct exynos_lpass *lpass) >> +static int exynos_lpass_enable(struct exynos_lpass *lpass) >> { >> - clk_prepare_enable(lpass->sfr0_clk); >> + int ret; >> + >> + ret = clk_prepare_enable(lpass->sfr0_clk); >> + if (ret) >> + return ret; >> >> /* Unmask SFR, DMA and I2S interrupt */ >> regmap_write(lpass->top, SFR_LPASS_INTR_CA5_MASK, >> @@ -87,6 +91,8 @@ static void exynos_lpass_enable(struct exynos_lpass *lpass) >> exynos_lpass_core_sw_reset(lpass, LPASS_I2S_SW_RESET); >> exynos_lpass_core_sw_reset(lpass, LPASS_DMA_SW_RESET); >> exynos_lpass_core_sw_reset(lpass, LPASS_MEM_SW_RESET); >> + >> + return 0; >> } >> >> static void exynos_lpass_disable(struct exynos_lpass *lpass) >> @@ -112,6 +118,7 @@ static int exynos_lpass_probe(struct platform_device *pdev) >> struct exynos_lpass *lpass; >> void __iomem *base_top; >> struct resource *res; >> + int ret; >> >> lpass = devm_kzalloc(dev, sizeof(*lpass), GFP_KERNEL); >> if (!lpass) >> @@ -136,8 +143,12 @@ static int exynos_lpass_probe(struct platform_device *pdev) >> platform_set_drvdata(pdev, lpass); >> pm_runtime_set_active(dev); >> pm_runtime_enable(dev); >> - exynos_lpass_enable(lpass); >> - >> + ret = exynos_lpass_enable(lpass); >> + if (ret) { >> + pm_runtime_disable(dev); >> + pm_runtime_set_suspended(dev); > You need also regmap_exit(). > >> + return ret; >> + } > Leave one blank line before return. > > Best regards, > Krzysztof > ~arvind
Powered by blists - more mailing lists