devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mathieu Poirier <mathieu.poirier@linaro.org>
To: Suzuki K Poulose <suzuki.poulose@arm.com>
Cc: linux-arm-kernel@lists.infradead.org, robh@kernel.org,
	frowand.list@gmail.com, mark.rutland@arm.com,
	sudeep.holla@arm.com, arm@kernel.org,
	linux-kernel@vger.kernel.org, matt.sealey@arm.com,
	john.horley@arm.com, charles.garcia-tobin@arm.com,
	coresight@lists.linaro.org, devicetree@vger.kernel.org,
	mike.leach@linaro.org
Subject: Re: [PATCH 05/20] coresight: platform: Cleanup coresight connection handling
Date: Fri, 8 Jun 2018 14:18:29 -0600	[thread overview]
Message-ID: <20180608201829.GD30587@xps15> (raw)
In-Reply-To: <1528235011-30691-6-git-send-email-suzuki.poulose@arm.com>

On Tue, Jun 05, 2018 at 10:43:16PM +0100, Suzuki K Poulose wrote:
> The platform code parses the component connections and populates
> a platform-description of the output connections in arrays of fields
> (which is never freed). This is later copied in the coresight_register
> to a newly allocated area, represented by coresight_connection(s).
> 
> This patch cleans up the code dealing with connections by making
> use of the "coresight_connection" structure right at the platform
> code and lets the generic driver simply re-use information provided
> by the platform.
> 
> Thus making it reader friendly as well as avoiding the wastage of
> unused memory.
> 
> Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
> Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
> ---
>  drivers/hwtracing/coresight/coresight.c    | 21 +-----------
>  drivers/hwtracing/coresight/of_coresight.c | 51 ++++++++++++------------------
>  include/linux/coresight.h                  |  9 ++----
>  3 files changed, 23 insertions(+), 58 deletions(-)
> 
> diff --git a/drivers/hwtracing/coresight/coresight.c b/drivers/hwtracing/coresight/coresight.c
> index 2893cfe..69e9136 100644
> --- a/drivers/hwtracing/coresight/coresight.c
> +++ b/drivers/hwtracing/coresight/coresight.c
> @@ -953,13 +953,11 @@ postcore_initcall(coresight_init);
>  
>  struct coresight_device *coresight_register(struct coresight_desc *desc)
>  {
> -	int i;
>  	int ret;
>  	int link_subtype;
>  	int nr_refcnts = 1;
>  	atomic_t *refcnts = NULL;
>  	struct coresight_device *csdev;
> -	struct coresight_connection *conns = NULL;
>  
>  	csdev = kzalloc(sizeof(*csdev), GFP_KERNEL);
>  	if (!csdev) {
> @@ -988,22 +986,7 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
>  	csdev->nr_inport = desc->pdata->nr_inport;
>  	csdev->nr_outport = desc->pdata->nr_outport;
>  
> -	/* Initialise connections if there is at least one outport */
> -	if (csdev->nr_outport) {
> -		conns = kcalloc(csdev->nr_outport, sizeof(*conns), GFP_KERNEL);
> -		if (!conns) {
> -			ret = -ENOMEM;
> -			goto err_kzalloc_conns;
> -		}
> -
> -		for (i = 0; i < csdev->nr_outport; i++) {
> -			conns[i].outport = desc->pdata->outports[i];
> -			conns[i].child_name = desc->pdata->child_names[i];
> -			conns[i].child_port = desc->pdata->child_ports[i];
> -		}
> -	}
> -
> -	csdev->conns = conns;
> +	csdev->conns = desc->pdata->conns;
>  
>  	csdev->type = desc->type;
>  	csdev->subtype = desc->subtype;
> @@ -1032,8 +1015,6 @@ struct coresight_device *coresight_register(struct coresight_desc *desc)
>  
>  	return csdev;
>  
> -err_kzalloc_conns:
> -	kfree(refcnts);
>  err_kzalloc_refcnts:
>  	kfree(csdev);
>  err_kzalloc_csdev:
> diff --git a/drivers/hwtracing/coresight/of_coresight.c b/drivers/hwtracing/coresight/of_coresight.c
> index ada4f07..d01a9ce 100644
> --- a/drivers/hwtracing/coresight/of_coresight.c
> +++ b/drivers/hwtracing/coresight/of_coresight.c
> @@ -70,26 +70,13 @@ static void of_coresight_get_ports(const struct device_node *node,
>  static int of_coresight_alloc_memory(struct device *dev,
>  			struct coresight_platform_data *pdata)
>  {
> -	/* List of output port on this component */
> -	pdata->outports = devm_kzalloc(dev, pdata->nr_outport *
> -				       sizeof(*pdata->outports),
> -				       GFP_KERNEL);
> -	if (!pdata->outports)
> -		return -ENOMEM;
> -
> -	/* Children connected to this component via @outports */
> -	pdata->child_names = devm_kzalloc(dev, pdata->nr_outport *
> -					  sizeof(*pdata->child_names),
> -					  GFP_KERNEL);
> -	if (!pdata->child_names)
> -		return -ENOMEM;
> -
> -	/* Port number on the child this component is connected to */
> -	pdata->child_ports = devm_kzalloc(dev, pdata->nr_outport *
> -					  sizeof(*pdata->child_ports),
> -					  GFP_KERNEL);
> -	if (!pdata->child_ports)
> -		return -ENOMEM;
> +	if (pdata->nr_outport) {
> +		pdata->conns = devm_kzalloc(dev, pdata->nr_outport *
> +					    sizeof(*pdata->conns),
> +					    GFP_KERNEL);
> +		if (!pdata->conns)
> +			return -ENOMEM;
> +	}
>  
>  	return 0;
>  }
> @@ -113,24 +100,24 @@ EXPORT_SYMBOL_GPL(of_coresight_get_cpu);
>  
>  /*
>   * of_coresight_parse_endpoint : Parse the given output endpoint @ep
> - * and fill the connection information in @pdata[*@i].
> + * and fill the connection information in *@pconn.
>   *
>   * Parses the local port, remote device name and the remote port. Also
> - * updates *@i to point to the next index, when an entry is added.
> + * updates *@pconn to point to the next record, when an entry is added.
>   *
>   * Returns :
>   *	 0	- If the parsing completed without any fatal errors.
>   *	-Errno	- Fatal error, abort the scanning.
>   */
>  static int of_coresight_parse_endpoint(struct device_node *ep,
> -				       struct coresight_platform_data *pdata,
> -				       int *i)
> +				       struct coresight_connection **pconn)
>  {
>  	int ret = 0;
>  	struct of_endpoint endpoint, rendpoint;
>  	struct device_node *rparent = NULL;
>  	struct device_node *rep = NULL;
>  	struct device *rdev = NULL;
> +	struct coresight_connection *conn = *pconn;
>  
>  	do {
>  		/*
> @@ -163,11 +150,11 @@ static int of_coresight_parse_endpoint(struct device_node *ep,
>  			break;
>  		}
>  
> -		pdata->outports[*i] = endpoint.port;
> -		pdata->child_names[*i] = dev_name(rdev);
> -		pdata->child_ports[*i] = rendpoint.port;
> -		/* Move the index */
> -		(*i)++;
> +		conn->outport = endpoint.port;
> +		conn->child_name = dev_name(rdev);
> +		conn->child_port = rendpoint.port;
> +		/* Move the connection record */
> +		(*pconn)++;
>  	} while (0);
>  
>  	if (rparent)
> @@ -182,8 +169,9 @@ struct coresight_platform_data *
>  of_get_coresight_platform_data(struct device *dev,
>  			       const struct device_node *node)
>  {
> -	int i = 0, ret = 0;
> +	int ret = 0;
>  	struct coresight_platform_data *pdata;
> +	struct coresight_connection *conn;
>  	struct device_node *ep = NULL;
>  
>  	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
> @@ -205,13 +193,14 @@ of_get_coresight_platform_data(struct device *dev,
>  	if (ret)
>  		return ERR_PTR(ret);
>  
> +	conn = pdata->conns;
>  	/* Iterate through each port to discover topology */
>  	do {
>  		/* Get a handle on a port */
>  		ep = of_graph_get_next_endpoint(node, ep);
>  		if (!ep)
>  			break;
> -		ret = of_coresight_parse_endpoint(ep, pdata, &i);
> +		ret = of_coresight_parse_endpoint(ep, &conn);
>  		if (ret)
>  			return ERR_PTR(ret);
>  	} while (ep);
> diff --git a/include/linux/coresight.h b/include/linux/coresight.h
> index 69a5c9f..2a75a15 100644
> --- a/include/linux/coresight.h
> +++ b/include/linux/coresight.h
> @@ -82,20 +82,15 @@ struct coresight_dev_subtype {
>   * @cpu:	the CPU a source belongs to. Only applicable for ETM/PTMs.
>   * @name:	name of the component as shown under sysfs.
>   * @nr_inport:	number of input ports for this component.
> - * @outports:	list of remote endpoint port number.
> - * @child_names:name of all child components connected to this device.
> - * @child_ports:child component port number the current component is
> -		connected  to.
>   * @nr_outport:	number of output ports for this component.
> + * @conns:	Array of nr_outport connections from this component
>   */
>  struct coresight_platform_data {
>  	int cpu;
>  	const char *name;
>  	int nr_inport;
> -	int *outports;
> -	const char **child_names;
> -	int *child_ports;
>  	int nr_outport;
> +	struct coresight_connection *conns;
>  };

Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>

>  
>  /**
> -- 
> 2.7.4
> 

  reply	other threads:[~2018-06-08 20:18 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-05 21:43 [PATCH 00/20] coresight: Update device tree bindings Suzuki K Poulose
2018-06-05 21:43 ` [PATCH 01/20] coresight: Fix memory leak in coresight_register Suzuki K Poulose
2018-06-06  6:44   ` Arvind Yadav
2018-06-06 10:16     ` Suzuki K Poulose
2018-06-05 21:43 ` [PATCH 02/20] coresight: of: Fix refcounting for graph nodes Suzuki K Poulose
2018-06-08 19:55   ` Mathieu Poirier
2018-06-11  9:18     ` Suzuki K Poulose
2018-06-05 21:43 ` [PATCH 03/20] coresight: Fix remote endpoint parsing Suzuki K Poulose
2018-06-08 20:05   ` Mathieu Poirier
2018-06-05 21:43 ` [PATCH 04/20] coresight: Cleanup platform description data Suzuki K Poulose
2018-06-08 19:41   ` Mathieu Poirier
2018-06-05 21:43 ` [PATCH 05/20] coresight: platform: Cleanup coresight connection handling Suzuki K Poulose
2018-06-08 20:18   ` Mathieu Poirier [this message]
2018-06-05 21:43 ` [PATCH 06/20] coresight: Handle errors in finding input/output ports Suzuki K Poulose
2018-06-08 20:24   ` Mathieu Poirier
2018-06-05 21:43 ` [PATCH 07/20] coresight: dts: Document usage of graph bindings Suzuki K Poulose
2018-06-08 20:30   ` Mathieu Poirier
2018-06-05 21:43 ` [PATCH 08/20] coresight: dts: Cleanup device tree " Suzuki K Poulose
2018-06-08 21:22   ` Mathieu Poirier
2018-06-11  9:22     ` Suzuki K Poulose
2018-06-11 16:52       ` Mathieu Poirier
2018-06-11 16:55         ` Suzuki K Poulose
2018-06-11 21:51           ` Mathieu Poirier
2018-06-05 21:43 ` [PATCH 09/20] coresight: dts: Define new bindings for direction of data flow Suzuki K Poulose
2018-06-08 21:39   ` Mathieu Poirier
2018-06-05 21:43 ` [PATCH 10/20] dts: juno: Update coresight bindings for hw port Suzuki K Poulose
2018-06-08 21:49   ` Mathieu Poirier
2018-06-08 21:52     ` Mathieu Poirier
2018-06-12  9:50       ` Suzuki K Poulose
2018-06-12 10:42       ` Sudeep Holla
2018-06-05 21:43 ` [PATCH 11/20] dts: hisilicon: Update coresight bindings for hw ports Suzuki K Poulose
2018-06-05 21:43 ` [PATCH 12/20] dts: spreadtrum: " Suzuki K Poulose
2018-06-05 21:43 ` [PATCH 13/20] dts: qcom: " Suzuki K Poulose
2018-06-05 21:43 ` [PATCH 14/20] dts: arm: hisilicon: Update coresight bindings for hardware port Suzuki K Poulose
2018-06-05 21:43 ` [PATCH 15/20] dts: arm: imx7{d,s}: Update coresight binding for hardware ports Suzuki K Poulose
2018-06-19  2:12   ` Shawn Guo
2018-06-19 10:35     ` Stefan Agner
2018-06-19 14:57     ` Mathieu Poirier
2018-06-05 21:43 ` [PATCH 16/20] dts: arm: omap: Update coresight bindings " Suzuki K Poulose
2018-07-03  7:09   ` Tony Lindgren
2018-07-03  7:59     ` Suzuki K Poulose
2018-07-03  8:12       ` Tony Lindgren
2018-06-05 21:43 ` [PATCH 17/20] dts: arm: qcom: " Suzuki K Poulose
2018-06-05 21:43 ` [PATCH 18/20] dts: sama5d2: " Suzuki K Poulose
2018-06-19 21:24   ` Alexandre Belloni
2018-06-20  9:44     ` Suzuki K Poulose
2018-06-20 10:53       ` Alexandre Belloni
2018-06-05 21:43 ` [PATCH 19/20] dts: ste-dbx5x0: Update coresight bindings for hardware port Suzuki K Poulose
2018-06-26  9:30   ` Linus Walleij
2018-06-26  9:31     ` Suzuki K Poulose
2018-06-05 21:43 ` [PATCH 20/20] dts: tc2: Update coresight bindings for hardware ports Suzuki K Poulose
2018-06-20  9:53 ` [PATCH 00/20] coresight: Update device tree bindings Suzuki K Poulose

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180608201829.GD30587@xps15 \
    --to=mathieu.poirier@linaro.org \
    --cc=arm@kernel.org \
    --cc=charles.garcia-tobin@arm.com \
    --cc=coresight@lists.linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=frowand.list@gmail.com \
    --cc=john.horley@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=matt.sealey@arm.com \
    --cc=mike.leach@linaro.org \
    --cc=robh@kernel.org \
    --cc=sudeep.holla@arm.com \
    --cc=suzuki.poulose@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).