Re: [PATCH v3 23/30] coresight: Add support for releasing platform specific data

2019-05-13 Thread Mathieu Poirier
On Tue, May 07, 2019 at 11:52:50AM +0100, Suzuki K Poulose wrote:
> Add a helper to clean up the platform specific data provided
> by the firmware. This will be later used for dropping the necessary
> references when we switch to the fwnode handles for tracking
> connections.
> 
> Cc: Mathieu Poirier 
> Signed-off-by: Suzuki K Poulose 
> ---
>  drivers/hwtracing/coresight/coresight-platform.c | 6 +-
>  drivers/hwtracing/coresight/coresight-priv.h | 4 
>  drivers/hwtracing/coresight/coresight.c  | 3 +++
>  3 files changed, 12 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/hwtracing/coresight/coresight-platform.c 
> b/drivers/hwtracing/coresight/coresight-platform.c
> index f500de6..53d6eed 100644
> --- a/drivers/hwtracing/coresight/coresight-platform.c
> +++ b/drivers/hwtracing/coresight/coresight-platform.c
> @@ -17,6 +17,7 @@
>  #include 
>  #include 
>  
> +#include "coresight-priv.h"
>  /*
>   * coresight_alloc_conns: Allocate connections record for each output
>   * port from the device.
> @@ -311,7 +312,7 @@ struct coresight_platform_data *
>  coresight_get_platform_data(struct device *dev)
>  {
>   int ret = -ENOENT;
> - struct coresight_platform_data *pdata;
> + struct coresight_platform_data *pdata = NULL;
>   struct fwnode_handle *fwnode = dev_fwnode(dev);
>  
>   if (IS_ERR_OR_NULL(fwnode))
> @@ -329,6 +330,9 @@ coresight_get_platform_data(struct device *dev)
>   if (!ret)
>   return pdata;
>  error:
> + if (!IS_ERR_OR_NULL(pdata))
> + /* Cleanup the connection information */
> + coresight_release_platform_data(pdata);
>   return ERR_PTR(ret);
>  }
>  EXPORT_SYMBOL_GPL(coresight_get_platform_data);
> diff --git a/drivers/hwtracing/coresight/coresight-priv.h 
> b/drivers/hwtracing/coresight/coresight-priv.h
> index e0684d0..c216421 100644
> --- a/drivers/hwtracing/coresight/coresight-priv.h
> +++ b/drivers/hwtracing/coresight/coresight-priv.h
> @@ -200,4 +200,8 @@ static inline void *coresight_get_uci_data(const struct 
> amba_id *id)
>   return 0;
>  }
>  
> +static inline void
> +coresight_release_platform_data(struct coresight_platform_data *pdata)
> +{}
> +
>  #endif
> diff --git a/drivers/hwtracing/coresight/coresight.c 
> b/drivers/hwtracing/coresight/coresight.c
> index 96e1515..526141c 100644
> --- a/drivers/hwtracing/coresight/coresight.c
> +++ b/drivers/hwtracing/coresight/coresight.c
> @@ -1250,6 +1250,8 @@ struct coresight_device *coresight_register(struct 
> coresight_desc *desc)
>  err_free_csdev:
>   kfree(csdev);
>  err_out:
> + /* Cleanup the connection information */
> + coresight_release_platform_data(desc->pdata);
>   return ERR_PTR(ret);
>  }
>  EXPORT_SYMBOL_GPL(coresight_register);
> @@ -1259,6 +1261,7 @@ void coresight_unregister(struct coresight_device 
> *csdev)
>   etm_perf_del_symlink_sink(csdev);
>   /* Remove references of that device in the topology */
>   coresight_remove_conns(csdev);
> + coresight_release_platform_data(csdev->pdata);
>   device_unregister(>dev);
>  }
>  EXPORT_SYMBOL_GPL(coresight_unregister);

Reviewed-by: Mathieu Poirier 

> -- 
> 2.7.4
> 


[PATCH v3 23/30] coresight: Add support for releasing platform specific data

2019-05-07 Thread Suzuki K Poulose
Add a helper to clean up the platform specific data provided
by the firmware. This will be later used for dropping the necessary
references when we switch to the fwnode handles for tracking
connections.

Cc: Mathieu Poirier 
Signed-off-by: Suzuki K Poulose 
---
 drivers/hwtracing/coresight/coresight-platform.c | 6 +-
 drivers/hwtracing/coresight/coresight-priv.h | 4 
 drivers/hwtracing/coresight/coresight.c  | 3 +++
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/hwtracing/coresight/coresight-platform.c 
b/drivers/hwtracing/coresight/coresight-platform.c
index f500de6..53d6eed 100644
--- a/drivers/hwtracing/coresight/coresight-platform.c
+++ b/drivers/hwtracing/coresight/coresight-platform.c
@@ -17,6 +17,7 @@
 #include 
 #include 
 
+#include "coresight-priv.h"
 /*
  * coresight_alloc_conns: Allocate connections record for each output
  * port from the device.
@@ -311,7 +312,7 @@ struct coresight_platform_data *
 coresight_get_platform_data(struct device *dev)
 {
int ret = -ENOENT;
-   struct coresight_platform_data *pdata;
+   struct coresight_platform_data *pdata = NULL;
struct fwnode_handle *fwnode = dev_fwnode(dev);
 
if (IS_ERR_OR_NULL(fwnode))
@@ -329,6 +330,9 @@ coresight_get_platform_data(struct device *dev)
if (!ret)
return pdata;
 error:
+   if (!IS_ERR_OR_NULL(pdata))
+   /* Cleanup the connection information */
+   coresight_release_platform_data(pdata);
return ERR_PTR(ret);
 }
 EXPORT_SYMBOL_GPL(coresight_get_platform_data);
diff --git a/drivers/hwtracing/coresight/coresight-priv.h 
b/drivers/hwtracing/coresight/coresight-priv.h
index e0684d0..c216421 100644
--- a/drivers/hwtracing/coresight/coresight-priv.h
+++ b/drivers/hwtracing/coresight/coresight-priv.h
@@ -200,4 +200,8 @@ static inline void *coresight_get_uci_data(const struct 
amba_id *id)
return 0;
 }
 
+static inline void
+coresight_release_platform_data(struct coresight_platform_data *pdata)
+{}
+
 #endif
diff --git a/drivers/hwtracing/coresight/coresight.c 
b/drivers/hwtracing/coresight/coresight.c
index 96e1515..526141c 100644
--- a/drivers/hwtracing/coresight/coresight.c
+++ b/drivers/hwtracing/coresight/coresight.c
@@ -1250,6 +1250,8 @@ struct coresight_device *coresight_register(struct 
coresight_desc *desc)
 err_free_csdev:
kfree(csdev);
 err_out:
+   /* Cleanup the connection information */
+   coresight_release_platform_data(desc->pdata);
return ERR_PTR(ret);
 }
 EXPORT_SYMBOL_GPL(coresight_register);
@@ -1259,6 +1261,7 @@ void coresight_unregister(struct coresight_device *csdev)
etm_perf_del_symlink_sink(csdev);
/* Remove references of that device in the topology */
coresight_remove_conns(csdev);
+   coresight_release_platform_data(csdev->pdata);
device_unregister(>dev);
 }
 EXPORT_SYMBOL_GPL(coresight_unregister);
-- 
2.7.4