From b34178e823f81b43194091d8bfe768c19f7865a8 Mon Sep 17 00:00:00 2001 From: "Isaac J. Manjarres" Date: Thu, 3 Oct 2019 13:54:57 -0700 Subject: [PATCH 1/2] ion: msm: Correct msm_ion_parse_dt() error propagation If a device cannot be created for a child node, or the ID cannot be retrieved for a heap, then msm_ion_parse_dt() will return ret. However, under these circumstances, ret has not been updated to reflect these failures, and as such, msm_ion_probe will erroneously continue as if the call to msm_ion_parse_dt() had been successful. Thus, ensure that ret is set before following the error path in msm_ion_parse_dt(). Change-Id: I241805e2c169fb15bda68c2a375def04790aa20e Signed-off-by: Isaac J. Manjarres --- drivers/staging/android/ion/heaps/msm_ion.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/staging/android/ion/heaps/msm_ion.c b/drivers/staging/android/ion/heaps/msm_ion.c index 535b23cfc2e2..13e51bc61173 100644 --- a/drivers/staging/android/ion/heaps/msm_ion.c +++ b/drivers/staging/android/ion/heaps/msm_ion.c @@ -330,13 +330,13 @@ out: static struct ion_platform_data *msm_ion_parse_dt(struct platform_device *pdev) { - struct ion_platform_data *pdata = 0; + struct ion_platform_data *pdata = NULL; struct ion_platform_heap *heaps = NULL; struct device_node *node; struct platform_device *new_dev = NULL; const struct device_node *dt_node = pdev->dev.of_node; const __be32 *val; - int ret = -EINVAL; + int ret; u32 num_heaps = 0; int idx = 0; @@ -364,6 +364,7 @@ static struct ion_platform_data *msm_ion_parse_dt(struct platform_device *pdev) new_dev = of_platform_device_create(node, NULL, &pdev->dev); if (!new_dev) { pr_err("Failed to create device %s\n", node->name); + ret = -EINVAL; goto free_heaps; } of_dma_configure(&new_dev->dev, node, true); @@ -372,6 +373,7 @@ static struct ion_platform_data *msm_ion_parse_dt(struct platform_device *pdev) val = of_get_address(node, 0, NULL, NULL); if (!val) { pr_err("%s: Unable to find reg key\n", __func__); + ret = -EINVAL; goto free_heaps; } pdata->heaps[idx].id = (u32)of_read_number(val, 1); From 1b851a568ab2e11561aa008dbeb5b967f7dc97eb Mon Sep 17 00:00:00 2001 From: Patrick Daly Date: Thu, 29 Aug 2019 15:07:05 -0700 Subject: [PATCH 2/2] ion: msm: Assume devicetree support Remove support for passing parameters via platform_data now that relevant targets use devicetree. Change-Id: I2d8398163b5a4f358e257f416fd0e0c325664154 Signed-off-by: Patrick Daly [isaacm@codeaurora.org: Relocated changes to correct file] Signed-off-by: Isaac J. Manjarres --- drivers/staging/android/ion/heaps/msm_ion.c | 34 ++++----------------- 1 file changed, 6 insertions(+), 28 deletions(-) diff --git a/drivers/staging/android/ion/heaps/msm_ion.c b/drivers/staging/android/ion/heaps/msm_ion.c index 13e51bc61173..b6a9145e1708 100644 --- a/drivers/staging/android/ion/heaps/msm_ion.c +++ b/drivers/staging/android/ion/heaps/msm_ion.c @@ -32,7 +32,6 @@ struct ion_heap_desc { const char *name; }; -#ifdef CONFIG_OF static struct ion_heap_desc ion_heap_meta[] = { { .id = ION_SYSTEM_HEAP_ID, @@ -79,9 +78,7 @@ static struct ion_heap_desc ion_heap_meta[] = { .name = ION_SECURE_CARVEOUT_HEAP_NAME, } }; -#endif -#ifdef CONFIG_OF #define MAKE_HEAP_TYPE_MAPPING(h) { .name = #h, \ .heap_type = ION_HEAP_TYPE_##h, } @@ -395,16 +392,6 @@ free_heaps: free_pdata(pdata); return ERR_PTR(ret); } -#else -static struct ion_platform_data *msm_ion_parse_dt(struct platform_device *pdev) -{ - return NULL; -} - -static void free_pdata(const struct ion_platform_data *pdata) -{ -} -#endif struct ion_heap *get_ion_heap(int heap_id) { @@ -426,20 +413,13 @@ struct ion_heap *get_ion_heap(int heap_id) static int msm_ion_probe(struct platform_device *pdev) { struct ion_platform_data *pdata; - unsigned int pdata_needs_to_be_freed; int err = -1; int i; - if (pdev->dev.of_node) { - pdata = msm_ion_parse_dt(pdev); - if (IS_ERR(pdata)) { - status = ION_INIT_FAILURE; - return PTR_ERR(pdata); - } - pdata_needs_to_be_freed = 1; - } else { - pdata = pdev->dev.platform_data; - pdata_needs_to_be_freed = 0; + pdata = msm_ion_parse_dt(pdev); + if (IS_ERR(pdata)) { + status = ION_INIT_FAILURE; + return PTR_ERR(pdata); } num_heaps = pdata->nr; @@ -472,8 +452,7 @@ static int msm_ion_probe(struct platform_device *pdev) ion_device_add_heap(heaps[i]); } - if (pdata_needs_to_be_freed) - free_pdata(pdata); + free_pdata(pdata); /* * Publish the status at the end, so our interfaces know that they @@ -485,8 +464,7 @@ static int msm_ion_probe(struct platform_device *pdev) out: kfree(heaps); - if (pdata_needs_to_be_freed) - free_pdata(pdata); + free_pdata(pdata); status = ION_INIT_FAILURE; return err; }