2017-06-27 02:18:08

by Stephen Boyd

[permalink] [raw]
Subject: [PATCH] spmi: pmic-arb: Always allocate ppid_to_apid table

After commit 7f1d4e58dabb ("spmi: pmic-arb: optimize table
lookups") we always need the ppid_to_apid table regardless of the
version of pmic arbiter we have. Otherwise, we will try to deref
the array when we don't allocate it on v2 hardware like the
msm8974 SoCs.

Cc: Abhijeet Dharmapurikar <[email protected]>
Cc: Kiran Gunda <[email protected]>
Fixes: 7f1d4e58dabb ("spmi: pmic-arb: optimize table lookups")
Signed-off-by: Stephen Boyd <[email protected]>
---
drivers/spmi/spmi-pmic-arb.c | 17 +++++++----------
1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/drivers/spmi/spmi-pmic-arb.c b/drivers/spmi/spmi-pmic-arb.c
index 2afe3597982e..f4b7a98a7913 100644
--- a/drivers/spmi/spmi-pmic-arb.c
+++ b/drivers/spmi/spmi-pmic-arb.c
@@ -134,7 +134,6 @@ struct apid_data {
* @spmic: SPMI controller object
* @ver_ops: version dependent operations.
* @ppid_to_apid in-memory copy of PPID -> channel (APID) mapping table.
- * v2 only.
*/
struct spmi_pmic_arb {
void __iomem *rd_base;
@@ -1016,6 +1015,13 @@ static int spmi_pmic_arb_probe(struct platform_device *pdev)
goto err_put_ctrl;
}

+ pa->ppid_to_apid = devm_kcalloc(&ctrl->dev, PMIC_ARB_MAX_PPID,
+ sizeof(*pa->ppid_to_apid), GFP_KERNEL);
+ if (!pa->ppid_to_apid) {
+ err = -ENOMEM;
+ goto err_put_ctrl;
+ }
+
hw_ver = readl_relaxed(core + PMIC_ARB_VERSION);

if (hw_ver < PMIC_ARB_VERSION_V2_MIN) {
@@ -1048,15 +1054,6 @@ static int spmi_pmic_arb_probe(struct platform_device *pdev)
err = PTR_ERR(pa->wr_base);
goto err_put_ctrl;
}
-
- pa->ppid_to_apid = devm_kcalloc(&ctrl->dev,
- PMIC_ARB_MAX_PPID,
- sizeof(*pa->ppid_to_apid),
- GFP_KERNEL);
- if (!pa->ppid_to_apid) {
- err = -ENOMEM;
- goto err_put_ctrl;
- }
}

dev_info(&ctrl->dev, "PMIC arbiter version %s (0x%x)\n",
--
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project


2017-06-28 06:58:57

by Kiran Gunda

[permalink] [raw]
Subject: Re: [PATCH] spmi: pmic-arb: Always allocate ppid_to_apid table

On 2017-06-27 07:47, Stephen Boyd wrote:
> After commit 7f1d4e58dabb ("spmi: pmic-arb: optimize table
> lookups") we always need the ppid_to_apid table regardless of the
> version of pmic arbiter we have. Otherwise, we will try to deref
> the array when we don't allocate it on v2 hardware like the
> msm8974 SoCs.
>
> Cc: Abhijeet Dharmapurikar <[email protected]>
> Cc: Kiran Gunda <[email protected]>
> Fixes: 7f1d4e58dabb ("spmi: pmic-arb: optimize table lookups")
> Signed-off-by: Stephen Boyd <[email protected]>
Reviewed-by: Kiran Gunda <[email protected]>
> ---
> drivers/spmi/spmi-pmic-arb.c | 17 +++++++----------
> 1 file changed, 7 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/spmi/spmi-pmic-arb.c
> b/drivers/spmi/spmi-pmic-arb.c
> index 2afe3597982e..f4b7a98a7913 100644
> --- a/drivers/spmi/spmi-pmic-arb.c
> +++ b/drivers/spmi/spmi-pmic-arb.c
> @@ -134,7 +134,6 @@ struct apid_data {
> * @spmic: SPMI controller object
> * @ver_ops: version dependent operations.
> * @ppid_to_apid in-memory copy of PPID -> channel (APID) mapping
> table.
> - * v2 only.
> */
> struct spmi_pmic_arb {
> void __iomem *rd_base;
> @@ -1016,6 +1015,13 @@ static int spmi_pmic_arb_probe(struct
> platform_device *pdev)
> goto err_put_ctrl;
> }
>
> + pa->ppid_to_apid = devm_kcalloc(&ctrl->dev, PMIC_ARB_MAX_PPID,
> + sizeof(*pa->ppid_to_apid), GFP_KERNEL);
> + if (!pa->ppid_to_apid) {
> + err = -ENOMEM;
> + goto err_put_ctrl;
> + }
> +
> hw_ver = readl_relaxed(core + PMIC_ARB_VERSION);
>
> if (hw_ver < PMIC_ARB_VERSION_V2_MIN) {
> @@ -1048,15 +1054,6 @@ static int spmi_pmic_arb_probe(struct
> platform_device *pdev)
> err = PTR_ERR(pa->wr_base);
> goto err_put_ctrl;
> }
> -
> - pa->ppid_to_apid = devm_kcalloc(&ctrl->dev,
> - PMIC_ARB_MAX_PPID,
> - sizeof(*pa->ppid_to_apid),
> - GFP_KERNEL);
> - if (!pa->ppid_to_apid) {
> - err = -ENOMEM;
> - goto err_put_ctrl;
> - }
> }
>
> dev_info(&ctrl->dev, "PMIC arbiter version %s (0x%x)\n",
Thanks for the fix !

2017-07-09 11:39:11

by Luca Weiss

[permalink] [raw]
Subject: Re: spmi: pmic-arb: Always allocate ppid_to_apid table

On Dienstag, 27. Juni 2017 04:17:46 CEST Stephen Boyd wrote:
> After commit 7f1d4e58dabb ("spmi: pmic-arb: optimize table
> lookups") we always need the ppid_to_apid table regardless of the
> version of pmic arbiter we have. Otherwise, we will try to deref
> the array when we don't allocate it on v2 hardware like the
> msm8974 SoCs.
>
> Cc: Abhijeet Dharmapurikar <[email protected]>
> Cc: Kiran Gunda <[email protected]>
> Fixes: 7f1d4e58dabb ("spmi: pmic-arb: optimize table lookups")
> Signed-off-by: Stephen Boyd <[email protected]>
> Reviewed-by: Kiran Gunda <[email protected]>
> ---
> drivers/spmi/spmi-pmic-arb.c | 17 +++++++----------
> 1 file changed, 7 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/spmi/spmi-pmic-arb.c b/drivers/spmi/spmi-pmic-arb.c
> index 2afe3597982e..f4b7a98a7913 100644
> --- a/drivers/spmi/spmi-pmic-arb.c
> +++ b/drivers/spmi/spmi-pmic-arb.c
> @@ -134,7 +134,6 @@ struct apid_data {
> * @spmic: SPMI controller object
> * @ver_ops: version dependent operations.
> * @ppid_to_apid in-memory copy of PPID -> channel (APID) mapping table.
> - * v2 only.
> */
> struct spmi_pmic_arb {
> void __iomem *rd_base;
> @@ -1016,6 +1015,13 @@ static int spmi_pmic_arb_probe(struct platform_device
> *pdev) goto err_put_ctrl;
> }
>
> + pa->ppid_to_apid = devm_kcalloc(&ctrl->dev, PMIC_ARB_MAX_PPID,
> + sizeof(*pa->ppid_to_apid), GFP_KERNEL);
> + if (!pa->ppid_to_apid) {
> + err = -ENOMEM;
> + goto err_put_ctrl;
> + }
> +
> hw_ver = readl_relaxed(core + PMIC_ARB_VERSION);
>
> if (hw_ver < PMIC_ARB_VERSION_V2_MIN) {
> @@ -1048,15 +1054,6 @@ static int spmi_pmic_arb_probe(struct platform_device
> *pdev) err = PTR_ERR(pa->wr_base);
> goto err_put_ctrl;
> }
> -
> - pa->ppid_to_apid = devm_kcalloc(&ctrl->dev,
> - PMIC_ARB_MAX_PPID,
> - sizeof(*pa->ppid_to_apid),
> - GFP_KERNEL);
> - if (!pa->ppid_to_apid) {
> - err = -ENOMEM;
> - goto err_put_ctrl;
> - }
> }
>
> dev_info(&ctrl->dev, "PMIC arbiter version %s (0x%x)\n",

Tested-by: Luca Weiss <[email protected]>

2017-07-14 16:54:57

by Andy Gross

[permalink] [raw]
Subject: Re: [PATCH] spmi: pmic-arb: Always allocate ppid_to_apid table

On Mon, Jun 26, 2017 at 07:17:46PM -0700, Stephen Boyd wrote:
> After commit 7f1d4e58dabb ("spmi: pmic-arb: optimize table
> lookups") we always need the ppid_to_apid table regardless of the
> version of pmic arbiter we have. Otherwise, we will try to deref
> the array when we don't allocate it on v2 hardware like the
> msm8974 SoCs.
>
> Cc: Abhijeet Dharmapurikar <[email protected]>
> Cc: Kiran Gunda <[email protected]>
> Fixes: 7f1d4e58dabb ("spmi: pmic-arb: optimize table lookups")
> Signed-off-by: Stephen Boyd <[email protected]>

Greg,

Can you pick this up? This is an urgent fix for Qualcomm 8x74 platforms.

Thanks!

Andy

2017-07-17 12:57:27

by Greg Kroah-Hartman

[permalink] [raw]
Subject: Re: [PATCH] spmi: pmic-arb: Always allocate ppid_to_apid table

On Fri, Jul 14, 2017 at 11:54:53AM -0500, Andy Gross wrote:
> On Mon, Jun 26, 2017 at 07:17:46PM -0700, Stephen Boyd wrote:
> > After commit 7f1d4e58dabb ("spmi: pmic-arb: optimize table
> > lookups") we always need the ppid_to_apid table regardless of the
> > version of pmic arbiter we have. Otherwise, we will try to deref
> > the array when we don't allocate it on v2 hardware like the
> > msm8974 SoCs.
> >
> > Cc: Abhijeet Dharmapurikar <[email protected]>
> > Cc: Kiran Gunda <[email protected]>
> > Fixes: 7f1d4e58dabb ("spmi: pmic-arb: optimize table lookups")
> > Signed-off-by: Stephen Boyd <[email protected]>
>
> Greg,
>
> Can you pick this up? This is an urgent fix for Qualcomm 8x74 platforms.

Will get it now, thanks.

greg k-h

2017-07-18 23:46:35

by Frank Rowand

[permalink] [raw]
Subject: Re: [PATCH] spmi: pmic-arb: Always allocate ppid_to_apid table

On 06/27/17 23:58, [email protected] wrote:
> On 2017-06-27 07:47, Stephen Boyd wrote:
>> After commit 7f1d4e58dabb ("spmi: pmic-arb: optimize table
>> lookups") we always need the ppid_to_apid table regardless of the
>> version of pmic arbiter we have. Otherwise, we will try to deref
>> the array when we don't allocate it on v2 hardware like the
>> msm8974 SoCs.
>>
>> Cc: Abhijeet Dharmapurikar <[email protected]>
>> Cc: Kiran Gunda <[email protected]>
>> Fixes: 7f1d4e58dabb ("spmi: pmic-arb: optimize table lookups")
>> Signed-off-by: Stephen Boyd <[email protected]>
> Reviewed-by: Kiran Gunda <[email protected]>

Tested on a qcom-apq8074-dragonboard on 4.13-rc1

Tested-by: Frank Rowand <[email protected]>

>> ---
>> drivers/spmi/spmi-pmic-arb.c | 17 +++++++----------
>> 1 file changed, 7 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/spmi/spmi-pmic-arb.c b/drivers/spmi/spmi-pmic-arb.c
>> index 2afe3597982e..f4b7a98a7913 100644
>> --- a/drivers/spmi/spmi-pmic-arb.c
>> +++ b/drivers/spmi/spmi-pmic-arb.c
>> @@ -134,7 +134,6 @@ struct apid_data {
>> * @spmic: SPMI controller object
>> * @ver_ops: version dependent operations.
>> * @ppid_to_apid in-memory copy of PPID -> channel (APID) mapping table.
>> - * v2 only.
>> */
>> struct spmi_pmic_arb {
>> void __iomem *rd_base;
>> @@ -1016,6 +1015,13 @@ static int spmi_pmic_arb_probe(struct
>> platform_device *pdev)
>> goto err_put_ctrl;
>> }
>>
>> + pa->ppid_to_apid = devm_kcalloc(&ctrl->dev, PMIC_ARB_MAX_PPID,
>> + sizeof(*pa->ppid_to_apid), GFP_KERNEL);
>> + if (!pa->ppid_to_apid) {
>> + err = -ENOMEM;
>> + goto err_put_ctrl;
>> + }
>> +
>> hw_ver = readl_relaxed(core + PMIC_ARB_VERSION);
>>
>> if (hw_ver < PMIC_ARB_VERSION_V2_MIN) {
>> @@ -1048,15 +1054,6 @@ static int spmi_pmic_arb_probe(struct
>> platform_device *pdev)
>> err = PTR_ERR(pa->wr_base);
>> goto err_put_ctrl;
>> }
>> -
>> - pa->ppid_to_apid = devm_kcalloc(&ctrl->dev,
>> - PMIC_ARB_MAX_PPID,
>> - sizeof(*pa->ppid_to_apid),
>> - GFP_KERNEL);
>> - if (!pa->ppid_to_apid) {
>> - err = -ENOMEM;
>> - goto err_put_ctrl;
>> - }
>> }
>>
>> dev_info(&ctrl->dev, "PMIC arbiter version %s (0x%x)\n",
> Thanks for the fix !
> --
> To unsubscribe from this list: send the line "unsubscribe linux-arm-msm" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>