From mboxrd@z Thu Jan 1 00:00:00 1970
From: laurent.pinchart@ideasonboard.com (Laurent Pinchart)
Date: Fri, 26 Dec 2014 11:44:04 +0200
Subject: [PATCH v7 1/3] of: Decrement refcount of previous endpoint in
of_graph_get_next_endpoint
In-Reply-To: <1419340158-20567-2-git-send-email-p.zabel@pengutronix.de>
References: <1419340158-20567-1-git-send-email-p.zabel@pengutronix.de>
<1419340158-20567-2-git-send-email-p.zabel@pengutronix.de>
Message-ID: <1673229.XX60cPdPif@avalon>
To: linux-arm-kernel@lists.infradead.org
List-Id: linux-arm-kernel.lists.infradead.org
Hi Philipp,
Thank you for the patch.
On Tuesday 23 December 2014 14:09:16 Philipp Zabel wrote:
> Decrementing the reference count of the previous endpoint node allows to
> use the of_graph_get_next_endpoint function in a for_each_... style macro.
> All current users of this function that pass a non-NULL prev parameter
> (coresight, rcar-du, imx-drm, soc_camera, and omap2-dss) are changed to
> not decrement the passed prev argument's refcount themselves.
>
> Signed-off-by: Philipp Zabel
> Acked-by: Mauro Carvalho Chehab
> Acked-by: Mathieu Poirier
> ---
> Changes since v6:
> - Added omap2-dss.
> - Added Mathieu's ack.
> ---
> drivers/coresight/of_coresight.c | 13 ++-----------
> drivers/gpu/drm/imx/imx-drm-core.c | 13 ++-----------
> drivers/gpu/drm/rcar-du/rcar_du_kms.c | 15 ++++-----------
For rcar-du,
Acked-by: Laurent Pinchart
> drivers/media/platform/soc_camera/soc_camera.c | 3 ++-
> drivers/of/base.c | 9 +--------
> drivers/video/fbdev/omap2/dss/omapdss-boot-init.c | 7 +------
> 6 files changed, 12 insertions(+), 48 deletions(-)
>
> diff --git a/drivers/coresight/of_coresight.c
> b/drivers/coresight/of_coresight.c index 5030c07..349c88b 100644
> --- a/drivers/coresight/of_coresight.c
> +++ b/drivers/coresight/of_coresight.c
> @@ -52,15 +52,6 @@ of_coresight_get_endpoint_device(struct device_node
> *endpoint) endpoint, of_dev_node_match);
> }
>
> -static struct device_node *of_get_coresight_endpoint(
> - const struct device_node *parent, struct device_node *prev)
> -{
> - struct device_node *node = of_graph_get_next_endpoint(parent, prev);
> -
> - of_node_put(prev);
> - return node;
> -}
> -
> static void of_coresight_get_ports(struct device_node *node,
> int *nr_inport, int *nr_outport)
> {
> @@ -68,7 +59,7 @@ static void of_coresight_get_ports(struct device_node
> *node, int in = 0, out = 0;
>
> do {
> - ep = of_get_coresight_endpoint(node, ep);
> + ep = of_graph_get_next_endpoint(node, ep);
> if (!ep)
> break;
>
> @@ -140,7 +131,7 @@ struct coresight_platform_data
> *of_get_coresight_platform_data( /* Iterate through each port to discover
> topology */
> do {
> /* Get a handle on a port */
> - ep = of_get_coresight_endpoint(node, ep);
> + ep = of_graph_get_next_endpoint(node, ep);
> if (!ep)
> break;
>
> diff --git a/drivers/gpu/drm/imx/imx-drm-core.c
> b/drivers/gpu/drm/imx/imx-drm-core.c index b250130..fed627d 100644
> --- a/drivers/gpu/drm/imx/imx-drm-core.c
> +++ b/drivers/gpu/drm/imx/imx-drm-core.c
> @@ -436,15 +436,6 @@ static uint32_t imx_drm_find_crtc_mask(struct
> imx_drm_device *imxdrm, return 0;
> }
>
> -static struct device_node *imx_drm_of_get_next_endpoint(
> - const struct device_node *parent, struct device_node *prev)
> -{
> - struct device_node *node = of_graph_get_next_endpoint(parent, prev);
> -
> - of_node_put(prev);
> - return node;
> -}
> -
> int imx_drm_encoder_parse_of(struct drm_device *drm,
> struct drm_encoder *encoder, struct device_node *np)
> {
> @@ -456,7 +447,7 @@ int imx_drm_encoder_parse_of(struct drm_device *drm,
> for (i = 0; ; i++) {
> u32 mask;
>
> - ep = imx_drm_of_get_next_endpoint(np, ep);
> + ep = of_graph_get_next_endpoint(np, ep);
> if (!ep)
> break;
>
> @@ -504,7 +495,7 @@ int imx_drm_encoder_get_mux_id(struct device_node *node,
> return -EINVAL;
>
> do {
> - ep = imx_drm_of_get_next_endpoint(node, ep);
> + ep = of_graph_get_next_endpoint(node, ep);
> if (!ep)
> break;
>
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> b/drivers/gpu/drm/rcar-du/rcar_du_kms.c index 0c5ee61..480c4d9 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> @@ -206,7 +206,7 @@ static int rcar_du_encoders_init_one(struct
> rcar_du_device *rcdu, enum rcar_du_encoder_type enc_type =
> RCAR_DU_ENCODER_NONE;
> struct device_node *connector = NULL;
> struct device_node *encoder = NULL;
> - struct device_node *prev = NULL;
> + struct device_node *ep_node = NULL;
> struct device_node *entity_ep_node;
> struct device_node *entity;
> int ret;
> @@ -225,11 +225,7 @@ static int rcar_du_encoders_init_one(struct
> rcar_du_device *rcdu, entity_ep_node = of_parse_phandle(ep->local_node,
> "remote-endpoint", 0);
>
> while (1) {
> - struct device_node *ep_node;
> -
> - ep_node = of_graph_get_next_endpoint(entity, prev);
> - of_node_put(prev);
> - prev = ep_node;
> + ep_node = of_graph_get_next_endpoint(entity, ep_node);
>
> if (!ep_node)
> break;
> @@ -300,7 +296,7 @@ static int rcar_du_encoders_init_one(struct
> rcar_du_device *rcdu, static int rcar_du_encoders_init(struct
> rcar_du_device *rcdu)
> {
> struct device_node *np = rcdu->dev->of_node;
> - struct device_node *prev = NULL;
> + struct device_node *ep_node = NULL;
> unsigned int num_encoders = 0;
>
> /*
> @@ -308,15 +304,12 @@ static int rcar_du_encoders_init(struct rcar_du_device
> *rcdu) * pipeline.
> */
> while (1) {
> - struct device_node *ep_node;
> enum rcar_du_output output;
> struct of_endpoint ep;
> unsigned int i;
> int ret;
>
> - ep_node = of_graph_get_next_endpoint(np, prev);
> - of_node_put(prev);
> - prev = ep_node;
> + ep_node = of_graph_get_next_endpoint(np, ep_node);
>
> if (ep_node == NULL)
> break;
> diff --git a/drivers/media/platform/soc_camera/soc_camera.c
> b/drivers/media/platform/soc_camera/soc_camera.c index b3db51c..289b637
> 100644
> --- a/drivers/media/platform/soc_camera/soc_camera.c
> +++ b/drivers/media/platform/soc_camera/soc_camera.c
> @@ -1710,7 +1710,6 @@ static void scan_of_host(struct soc_camera_host *ici)
> if (!i)
> soc_of_bind(ici, epn, ren->parent);
>
> - of_node_put(epn);
> of_node_put(ren);
>
> if (i) {
> @@ -1718,6 +1717,8 @@ static void scan_of_host(struct soc_camera_host *ici)
> break;
> }
> }
> +
> + of_node_put(epn);
> }
>
> #else
> diff --git a/drivers/of/base.c b/drivers/of/base.c
> index 36536b6..aac66df 100644
> --- a/drivers/of/base.c
> +++ b/drivers/of/base.c
> @@ -2085,8 +2085,7 @@ EXPORT_SYMBOL(of_graph_parse_endpoint);
> * @prev: previous endpoint node, or NULL to get first
> *
> * Return: An 'endpoint' node pointer with refcount incremented. Refcount
> - * of the passed @prev node is not decremented, the caller have to use
> - * of_node_put() on it when done.
> + * of the passed @prev node is decremented.
> */
> struct device_node *of_graph_get_next_endpoint(const struct device_node
> *parent, struct device_node *prev)
> @@ -2122,12 +2121,6 @@ struct device_node *of_graph_get_next_endpoint(const
> struct device_node *parent, if (WARN_ONCE(!port, "%s(): endpoint %s has no
> parent node\n",
> __func__, prev->full_name))
> return NULL;
> -
> - /*
> - * Avoid dropping prev node refcount to 0 when getting the next
> - * child below.
> - */
> - of_node_get(prev);
> }
>
> while (1) {
> diff --git a/drivers/video/fbdev/omap2/dss/omapdss-boot-init.c
> b/drivers/video/fbdev/omap2/dss/omapdss-boot-init.c index 2f0822e..76fb18b
> 100644
> --- a/drivers/video/fbdev/omap2/dss/omapdss-boot-init.c
> +++ b/drivers/video/fbdev/omap2/dss/omapdss-boot-init.c
> @@ -164,20 +164,15 @@ static void __init omapdss_walk_device(struct
> device_node *node, bool root)
>
> pn = of_graph_get_remote_port_parent(n);
>
> - if (!pn) {
> - of_node_put(n);
> + if (!pn)
> continue;
> - }
>
> if (!of_device_is_available(pn) || omapdss_list_contains(pn)) {
> of_node_put(pn);
> - of_node_put(n);
> continue;
> }
>
> omapdss_walk_device(pn, false);
> -
> - of_node_put(n);
> }
> }
--
Regards,
Laurent Pinchart
From mboxrd@z Thu Jan 1 00:00:00 1970
From: Laurent Pinchart
Subject: Re: [PATCH v7 1/3] of: Decrement refcount of previous endpoint in
of_graph_get_next_endpoint
Date: Fri, 26 Dec 2014 11:44:04 +0200
Message-ID: <1673229.XX60cPdPif@avalon>
References: <1419340158-20567-1-git-send-email-p.zabel@pengutronix.de>
<1419340158-20567-2-git-send-email-p.zabel@pengutronix.de>
Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Return-path:
Received: from galahad.ideasonboard.com (galahad.ideasonboard.com
[185.26.127.97])
by gabe.freedesktop.org (Postfix) with ESMTP id 940BC6E123
for ; Fri, 26 Dec 2014 01:43:58 -0800 (PST)
In-Reply-To: <1419340158-20567-2-git-send-email-p.zabel@pengutronix.de>
List-Unsubscribe: ,
List-Archive:
List-Post:
List-Help:
List-Subscribe: ,
Errors-To: dri-devel-bounces@lists.freedesktop.org
Sender: "dri-devel"
To: Philipp Zabel
Cc: Mathieu Poirier , Greg Kroah-Hartman , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Andrzej Hajda , Tomi Valkeinen , kernel@pengutronix.de, Grant Likely , Russell King , Mauro Carvalho Chehab , Jean-Christophe Plagniol-Villard , Guennadi Liakhovetski , linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org
List-Id: dri-devel@lists.freedesktop.org
SGkgUGhpbGlwcCwKClRoYW5rIHlvdSBmb3IgdGhlIHBhdGNoLgoKT24gVHVlc2RheSAyMyBEZWNl
bWJlciAyMDE0IDE0OjA5OjE2IFBoaWxpcHAgWmFiZWwgd3JvdGU6Cj4gRGVjcmVtZW50aW5nIHRo
ZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHByZXZpb3VzIGVuZHBvaW50IG5vZGUgYWxsb3dzIHRv
Cj4gdXNlIHRoZSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludCBmdW5jdGlvbiBpbiBhIGZvcl9l
YWNoXy4uLiBzdHlsZSBtYWNyby4KPiBBbGwgY3VycmVudCB1c2VycyBvZiB0aGlzIGZ1bmN0aW9u
IHRoYXQgcGFzcyBhIG5vbi1OVUxMIHByZXYgcGFyYW1ldGVyCj4gKGNvcmVzaWdodCwgcmNhci1k
dSwgaW14LWRybSwgc29jX2NhbWVyYSwgYW5kIG9tYXAyLWRzcykgYXJlIGNoYW5nZWQgdG8KPiBu
b3QgZGVjcmVtZW50IHRoZSBwYXNzZWQgcHJldiBhcmd1bWVudCdzIHJlZmNvdW50IHRoZW1zZWx2
ZXMuCj4gCj4gU2lnbmVkLW9mZi1ieTogUGhpbGlwcCBaYWJlbCA8cC56YWJlbEBwZW5ndXRyb25p
eC5kZT4KPiBBY2tlZC1ieTogTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQG9zZy5zYW1z
dW5nLmNvbT4KPiBBY2tlZC1ieTogTWF0aGlldSBQb2lyaWVyIDxtYXRoaWV1LnBvaXJpZXJAbGlu
YXJvLm9yZz4KPiAtLS0KPiBDaGFuZ2VzIHNpbmNlIHY2Ogo+ICAtIEFkZGVkIG9tYXAyLWRzcy4K
PiAgLSBBZGRlZCBNYXRoaWV1J3MgYWNrLgo+IC0tLQo+ICBkcml2ZXJzL2NvcmVzaWdodC9vZl9j
b3Jlc2lnaHQuYyAgICAgICAgICAgICAgICAgIHwgMTMgKystLS0tLS0tLS0tLQo+ICBkcml2ZXJz
L2dwdS9kcm0vaW14L2lteC1kcm0tY29yZS5jICAgICAgICAgICAgICAgIHwgMTMgKystLS0tLS0t
LS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X2ttcy5jICAgICAgICAgICAg
IHwgMTUgKysrKy0tLS0tLS0tLS0tCgpGb3IgcmNhci1kdSwKCkFja2VkLWJ5OiBMYXVyZW50IFBp
bmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Cgo+ICBkcml2ZXJzL21l
ZGlhL3BsYXRmb3JtL3NvY19jYW1lcmEvc29jX2NhbWVyYS5jICAgIHwgIDMgKystCj4gIGRyaXZl
cnMvb2YvYmFzZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOSArLS0tLS0t
LS0KPiAgZHJpdmVycy92aWRlby9mYmRldi9vbWFwMi9kc3Mvb21hcGRzcy1ib290LWluaXQuYyB8
ICA3ICstLS0tLS0KPiAgNiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCspLCA0OCBkZWxl
dGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9jb3Jlc2lnaHQvb2ZfY29yZXNpZ2h0
LmMKPiBiL2RyaXZlcnMvY29yZXNpZ2h0L29mX2NvcmVzaWdodC5jIGluZGV4IDUwMzBjMDcuLjM0
OWM4OGIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9jb3Jlc2lnaHQvb2ZfY29yZXNpZ2h0LmMKPiAr
KysgYi9kcml2ZXJzL2NvcmVzaWdodC9vZl9jb3Jlc2lnaHQuYwo+IEBAIC01MiwxNSArNTIsNiBA
QCBvZl9jb3Jlc2lnaHRfZ2V0X2VuZHBvaW50X2RldmljZShzdHJ1Y3QgZGV2aWNlX25vZGUKPiAq
ZW5kcG9pbnQpIGVuZHBvaW50LCBvZl9kZXZfbm9kZV9tYXRjaCk7Cj4gIH0KPiAKPiAtc3RhdGlj
IHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfZ2V0X2NvcmVzaWdodF9lbmRwb2ludCgKPiAtCQljb25z
dCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwgc3RydWN0IGRldmljZV9ub2RlICpwcmV2KQo+
IC17Cj4gLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRw
b2ludChwYXJlbnQsIHByZXYpOwo+IC0KPiAtCW9mX25vZGVfcHV0KHByZXYpOwo+IC0JcmV0dXJu
IG5vZGU7Cj4gLX0KPiAtCj4gIHN0YXRpYyB2b2lkIG9mX2NvcmVzaWdodF9nZXRfcG9ydHMoc3Ry
dWN0IGRldmljZV9ub2RlICpub2RlLAo+ICAJCQkJICAgaW50ICpucl9pbnBvcnQsIGludCAqbnJf
b3V0cG9ydCkKPiAgewo+IEBAIC02OCw3ICs1OSw3IEBAIHN0YXRpYyB2b2lkIG9mX2NvcmVzaWdo
dF9nZXRfcG9ydHMoc3RydWN0IGRldmljZV9ub2RlCj4gKm5vZGUsIGludCBpbiA9IDAsIG91dCA9
IDA7Cj4gCj4gIAlkbyB7Cj4gLQkJZXAgPSBvZl9nZXRfY29yZXNpZ2h0X2VuZHBvaW50KG5vZGUs
IGVwKTsKPiArCQllcCA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KG5vZGUsIGVwKTsKPiAg
CQlpZiAoIWVwKQo+ICAJCQlicmVhazsKPiAKPiBAQCAtMTQwLDcgKzEzMSw3IEBAIHN0cnVjdCBj
b3Jlc2lnaHRfcGxhdGZvcm1fZGF0YQo+ICpvZl9nZXRfY29yZXNpZ2h0X3BsYXRmb3JtX2RhdGEo
IC8qIEl0ZXJhdGUgdGhyb3VnaCBlYWNoIHBvcnQgdG8gZGlzY292ZXIKPiB0b3BvbG9neSAqLwo+
ICAJCWRvIHsKPiAgCQkJLyogR2V0IGEgaGFuZGxlIG9uIGEgcG9ydCAqLwo+IC0JCQllcCA9IG9m
X2dldF9jb3Jlc2lnaHRfZW5kcG9pbnQobm9kZSwgZXApOwo+ICsJCQllcCA9IG9mX2dyYXBoX2dl
dF9uZXh0X2VuZHBvaW50KG5vZGUsIGVwKTsKPiAgCQkJaWYgKCFlcCkKPiAgCQkJCWJyZWFrOwo+
IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaW14L2lteC1kcm0tY29yZS5jCj4gYi9k
cml2ZXJzL2dwdS9kcm0vaW14L2lteC1kcm0tY29yZS5jIGluZGV4IGIyNTAxMzAuLmZlZDYyN2Qg
MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2lteC9pbXgtZHJtLWNvcmUuYwo+ICsrKyBi
L2RyaXZlcnMvZ3B1L2RybS9pbXgvaW14LWRybS1jb3JlLmMKPiBAQCAtNDM2LDE1ICs0MzYsNiBA
QCBzdGF0aWMgdWludDMyX3QgaW14X2RybV9maW5kX2NydGNfbWFzayhzdHJ1Y3QKPiBpbXhfZHJt
X2RldmljZSAqaW14ZHJtLCByZXR1cm4gMDsKPiAgfQo+IAo+IC1zdGF0aWMgc3RydWN0IGRldmlj
ZV9ub2RlICppbXhfZHJtX29mX2dldF9uZXh0X2VuZHBvaW50KAo+IC0JCWNvbnN0IHN0cnVjdCBk
ZXZpY2Vfbm9kZSAqcGFyZW50LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXYpCj4gLXsKPiAtCXN0
cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KHBhcmVu
dCwgcHJldik7Cj4gLQo+IC0Jb2Zfbm9kZV9wdXQocHJldik7Cj4gLQlyZXR1cm4gbm9kZTsKPiAt
fQo+IC0KPiAgaW50IGlteF9kcm1fZW5jb2Rlcl9wYXJzZV9vZihzdHJ1Y3QgZHJtX2RldmljZSAq
ZHJtLAo+ICAJc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBzdHJ1Y3QgZGV2aWNlX25vZGUg
Km5wKQo+ICB7Cj4gQEAgLTQ1Niw3ICs0NDcsNyBAQCBpbnQgaW14X2RybV9lbmNvZGVyX3BhcnNl
X29mKHN0cnVjdCBkcm1fZGV2aWNlICpkcm0sCj4gIAlmb3IgKGkgPSAwOyA7IGkrKykgewo+ICAJ
CXUzMiBtYXNrOwo+IAo+IC0JCWVwID0gaW14X2RybV9vZl9nZXRfbmV4dF9lbmRwb2ludChucCwg
ZXApOwo+ICsJCWVwID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQobnAsIGVwKTsKPiAgCQlp
ZiAoIWVwKQo+ICAJCQlicmVhazsKPiAKPiBAQCAtNTA0LDcgKzQ5NSw3IEBAIGludCBpbXhfZHJt
X2VuY29kZXJfZ2V0X211eF9pZChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCj4gcmV0dXJuIC1F
SU5WQUw7Cj4gCj4gIAlkbyB7Cj4gLQkJZXAgPSBpbXhfZHJtX29mX2dldF9uZXh0X2VuZHBvaW50
KG5vZGUsIGVwKTsKPiArCQllcCA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KG5vZGUsIGVw
KTsKPiAgCQlpZiAoIWVwKQo+ICAJCQlicmVhazsKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n
cHUvZHJtL3JjYXItZHUvcmNhcl9kdV9rbXMuYwo+IGIvZHJpdmVycy9ncHUvZHJtL3JjYXItZHUv
cmNhcl9kdV9rbXMuYyBpbmRleCAwYzVlZTYxLi40ODBjNGQ5IDEwMDY0NAo+IC0tLSBhL2RyaXZl
cnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfa21zLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v
cmNhci1kdS9yY2FyX2R1X2ttcy5jCj4gQEAgLTIwNiw3ICsyMDYsNyBAQCBzdGF0aWMgaW50IHJj
YXJfZHVfZW5jb2RlcnNfaW5pdF9vbmUoc3RydWN0Cj4gcmNhcl9kdV9kZXZpY2UgKnJjZHUsIGVu
dW0gcmNhcl9kdV9lbmNvZGVyX3R5cGUgZW5jX3R5cGUgPQo+IFJDQVJfRFVfRU5DT0RFUl9OT05F
Owo+ICAJc3RydWN0IGRldmljZV9ub2RlICpjb25uZWN0b3IgPSBOVUxMOwo+ICAJc3RydWN0IGRl
dmljZV9ub2RlICplbmNvZGVyID0gTlVMTDsKPiAtCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcHJldiA9
IE5VTEw7Cj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmVwX25vZGUgPSBOVUxMOwo+ICAJc3RydWN0
IGRldmljZV9ub2RlICplbnRpdHlfZXBfbm9kZTsKPiAgCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZW50
aXR5Owo+ICAJaW50IHJldDsKPiBAQCAtMjI1LDExICsyMjUsNyBAQCBzdGF0aWMgaW50IHJjYXJf
ZHVfZW5jb2RlcnNfaW5pdF9vbmUoc3RydWN0Cj4gcmNhcl9kdV9kZXZpY2UgKnJjZHUsIGVudGl0
eV9lcF9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShlcC0+bG9jYWxfbm9kZSwKPiAicmVtb3RlLWVu
ZHBvaW50IiwgMCk7Cj4gCj4gIAl3aGlsZSAoMSkgewo+IC0JCXN0cnVjdCBkZXZpY2Vfbm9kZSAq
ZXBfbm9kZTsKPiAtCj4gLQkJZXBfbm9kZSA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGVu
dGl0eSwgcHJldik7Cj4gLQkJb2Zfbm9kZV9wdXQocHJldik7Cj4gLQkJcHJldiA9IGVwX25vZGU7
Cj4gKwkJZXBfbm9kZSA9IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KGVudGl0eSwgZXBfbm9k
ZSk7Cj4gCj4gIAkJaWYgKCFlcF9ub2RlKQo+ICAJCQlicmVhazsKPiBAQCAtMzAwLDcgKzI5Niw3
IEBAIHN0YXRpYyBpbnQgcmNhcl9kdV9lbmNvZGVyc19pbml0X29uZShzdHJ1Y3QKPiByY2FyX2R1
X2RldmljZSAqcmNkdSwgc3RhdGljIGludCByY2FyX2R1X2VuY29kZXJzX2luaXQoc3RydWN0Cj4g
cmNhcl9kdV9kZXZpY2UgKnJjZHUpCj4gIHsKPiAgCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBy
Y2R1LT5kZXYtPm9mX25vZGU7Cj4gLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnByZXYgPSBOVUxMOwo+
ICsJc3RydWN0IGRldmljZV9ub2RlICplcF9ub2RlID0gTlVMTDsKPiAgCXVuc2lnbmVkIGludCBu
dW1fZW5jb2RlcnMgPSAwOwo+IAo+ICAJLyoKPiBAQCAtMzA4LDE1ICszMDQsMTIgQEAgc3RhdGlj
IGludCByY2FyX2R1X2VuY29kZXJzX2luaXQoc3RydWN0IHJjYXJfZHVfZGV2aWNlCj4gKnJjZHUp
ICogcGlwZWxpbmUuCj4gIAkgKi8KPiAgCXdoaWxlICgxKSB7Cj4gLQkJc3RydWN0IGRldmljZV9u
b2RlICplcF9ub2RlOwo+ICAJCWVudW0gcmNhcl9kdV9vdXRwdXQgb3V0cHV0Owo+ICAJCXN0cnVj
dCBvZl9lbmRwb2ludCBlcDsKPiAgCQl1bnNpZ25lZCBpbnQgaTsKPiAgCQlpbnQgcmV0Owo+IAo+
IC0JCWVwX25vZGUgPSBvZl9ncmFwaF9nZXRfbmV4dF9lbmRwb2ludChucCwgcHJldik7Cj4gLQkJ
b2Zfbm9kZV9wdXQocHJldik7Cj4gLQkJcHJldiA9IGVwX25vZGU7Cj4gKwkJZXBfbm9kZSA9IG9m
X2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KG5wLCBlcF9ub2RlKTsKPiAKPiAgCQlpZiAoZXBfbm9k
ZSA9PSBOVUxMKQo+ICAJCQlicmVhazsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0
Zm9ybS9zb2NfY2FtZXJhL3NvY19jYW1lcmEuYwo+IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9z
b2NfY2FtZXJhL3NvY19jYW1lcmEuYyBpbmRleCBiM2RiNTFjLi4yODliNjM3Cj4gMTAwNjQ0Cj4g
LS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9zb2NfY2FtZXJhL3NvY19jYW1lcmEuYwo+ICsr
KyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc29jX2NhbWVyYS9zb2NfY2FtZXJhLmMKPiBAQCAt
MTcxMCw3ICsxNzEwLDYgQEAgc3RhdGljIHZvaWQgc2Nhbl9vZl9ob3N0KHN0cnVjdCBzb2NfY2Ft
ZXJhX2hvc3QgKmljaSkKPiAgCQlpZiAoIWkpCj4gIAkJCXNvY19vZl9iaW5kKGljaSwgZXBuLCBy
ZW4tPnBhcmVudCk7Cj4gCj4gLQkJb2Zfbm9kZV9wdXQoZXBuKTsKPiAgCQlvZl9ub2RlX3B1dChy
ZW4pOwo+IAo+ICAJCWlmIChpKSB7Cj4gQEAgLTE3MTgsNiArMTcxNyw4IEBAIHN0YXRpYyB2b2lk
IHNjYW5fb2ZfaG9zdChzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kpCj4gIAkJCWJyZWFrOwo+
ICAJCX0KPiAgCX0KPiArCj4gKwlvZl9ub2RlX3B1dChlcG4pOwo+ICB9Cj4gCj4gICNlbHNlCj4g
ZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2YvYmFzZS5jIGIvZHJpdmVycy9vZi9iYXNlLmMKPiBpbmRl
eCAzNjUzNmI2Li5hYWM2NmRmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvb2YvYmFzZS5jCj4gKysr
IGIvZHJpdmVycy9vZi9iYXNlLmMKPiBAQCAtMjA4NSw4ICsyMDg1LDcgQEAgRVhQT1JUX1NZTUJP
TChvZl9ncmFwaF9wYXJzZV9lbmRwb2ludCk7Cj4gICAqIEBwcmV2OiBwcmV2aW91cyBlbmRwb2lu
dCBub2RlLCBvciBOVUxMIHRvIGdldCBmaXJzdAo+ICAgKgo+ICAgKiBSZXR1cm46IEFuICdlbmRw
b2ludCcgbm9kZSBwb2ludGVyIHdpdGggcmVmY291bnQgaW5jcmVtZW50ZWQuIFJlZmNvdW50Cj4g
LSAqIG9mIHRoZSBwYXNzZWQgQHByZXYgbm9kZSBpcyBub3QgZGVjcmVtZW50ZWQsIHRoZSBjYWxs
ZXIgaGF2ZSB0byB1c2UKPiAtICogb2Zfbm9kZV9wdXQoKSBvbiBpdCB3aGVuIGRvbmUuCj4gKyAq
IG9mIHRoZSBwYXNzZWQgQHByZXYgbm9kZSBpcyBkZWNyZW1lbnRlZC4KPiAgICovCj4gIHN0cnVj
dCBkZXZpY2Vfbm9kZSAqb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQoY29uc3Qgc3RydWN0IGRl
dmljZV9ub2RlCj4gKnBhcmVudCwgc3RydWN0IGRldmljZV9ub2RlICpwcmV2KQo+IEBAIC0yMTIy
LDEyICsyMTIxLDYgQEAgc3RydWN0IGRldmljZV9ub2RlICpvZl9ncmFwaF9nZXRfbmV4dF9lbmRw
b2ludChjb25zdAo+IHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCBpZiAoV0FSTl9PTkNFKCFw
b3J0LCAiJXMoKTogZW5kcG9pbnQgJXMgaGFzIG5vCj4gcGFyZW50IG5vZGVcbiIsCj4gIAkJCSAg
ICAgIF9fZnVuY19fLCBwcmV2LT5mdWxsX25hbWUpKQo+ICAJCQlyZXR1cm4gTlVMTDsKPiAtCj4g
LQkJLyoKPiAtCQkgKiBBdm9pZCBkcm9wcGluZyBwcmV2IG5vZGUgcmVmY291bnQgdG8gMCB3aGVu
IGdldHRpbmcgdGhlIG5leHQKPiAtCQkgKiBjaGlsZCBiZWxvdy4KPiAtCQkgKi8KPiAtCQlvZl9u
b2RlX2dldChwcmV2KTsKPiAgCX0KPiAKPiAgCXdoaWxlICgxKSB7Cj4gZGlmZiAtLWdpdCBhL2Ry
aXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL29tYXBkc3MtYm9vdC1pbml0LmMKPiBiL2RyaXZl
cnMvdmlkZW8vZmJkZXYvb21hcDIvZHNzL29tYXBkc3MtYm9vdC1pbml0LmMgaW5kZXggMmYwODIy
ZS4uNzZmYjE4Ygo+IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdmlkZW8vZmJkZXYvb21hcDIvZHNz
L29tYXBkc3MtYm9vdC1pbml0LmMKPiArKysgYi9kcml2ZXJzL3ZpZGVvL2ZiZGV2L29tYXAyL2Rz
cy9vbWFwZHNzLWJvb3QtaW5pdC5jCj4gQEAgLTE2NCwyMCArMTY0LDE1IEBAIHN0YXRpYyB2b2lk
IF9faW5pdCBvbWFwZHNzX3dhbGtfZGV2aWNlKHN0cnVjdAo+IGRldmljZV9ub2RlICpub2RlLCBi
b29sIHJvb3QpCj4gCj4gIAkJcG4gPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KG4p
Owo+IAo+IC0JCWlmICghcG4pIHsKPiAtCQkJb2Zfbm9kZV9wdXQobik7Cj4gKwkJaWYgKCFwbikK
PiAgCQkJY29udGludWU7Cj4gLQkJfQo+IAo+ICAJCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJs
ZShwbikgfHwgb21hcGRzc19saXN0X2NvbnRhaW5zKHBuKSkgewo+ICAJCQlvZl9ub2RlX3B1dChw
bik7Cj4gLQkJCW9mX25vZGVfcHV0KG4pOwo+ICAJCQljb250aW51ZTsKPiAgCQl9Cj4gCj4gIAkJ
b21hcGRzc193YWxrX2RldmljZShwbiwgZmFsc2UpOwo+IC0KPiAtCQlvZl9ub2RlX3B1dChuKTsK
PiAgCX0KPiAgfQoKLS0gClJlZ2FyZHMsCgpMYXVyZW50IFBpbmNoYXJ0CgpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0
CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9w
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=
From mboxrd@z Thu Jan 1 00:00:00 1970
Return-path:
Received: from galahad.ideasonboard.com ([185.26.127.97]:58344 "EHLO
galahad.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
with ESMTP id S1751824AbaLZJoA (ORCPT
);
Fri, 26 Dec 2014 04:44:00 -0500
From: Laurent Pinchart
To: Philipp Zabel
Cc: Grant Likely ,
linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
dri-devel@lists.freedesktop.org,
linux-arm-kernel@lists.infradead.org,
Guennadi Liakhovetski ,
Mathieu Poirier ,
David Airlie ,
Mauro Carvalho Chehab ,
Russell King ,
Greg Kroah-Hartman ,
Andrzej Hajda ,
Tomi Valkeinen ,
Jean-Christophe Plagniol-Villard ,
kernel@pengutronix.de
Subject: Re: [PATCH v7 1/3] of: Decrement refcount of previous endpoint in of_graph_get_next_endpoint
Date: Fri, 26 Dec 2014 11:44:04 +0200
Message-ID: <1673229.XX60cPdPif@avalon>
In-Reply-To: <1419340158-20567-2-git-send-email-p.zabel@pengutronix.de>
References: <1419340158-20567-1-git-send-email-p.zabel@pengutronix.de> <1419340158-20567-2-git-send-email-p.zabel@pengutronix.de>
MIME-Version: 1.0
Content-Transfer-Encoding: 7Bit
Content-Type: text/plain; charset="us-ascii"
Sender: linux-media-owner@vger.kernel.org
List-ID:
Hi Philipp,
Thank you for the patch.
On Tuesday 23 December 2014 14:09:16 Philipp Zabel wrote:
> Decrementing the reference count of the previous endpoint node allows to
> use the of_graph_get_next_endpoint function in a for_each_... style macro.
> All current users of this function that pass a non-NULL prev parameter
> (coresight, rcar-du, imx-drm, soc_camera, and omap2-dss) are changed to
> not decrement the passed prev argument's refcount themselves.
>
> Signed-off-by: Philipp Zabel
> Acked-by: Mauro Carvalho Chehab
> Acked-by: Mathieu Poirier
> ---
> Changes since v6:
> - Added omap2-dss.
> - Added Mathieu's ack.
> ---
> drivers/coresight/of_coresight.c | 13 ++-----------
> drivers/gpu/drm/imx/imx-drm-core.c | 13 ++-----------
> drivers/gpu/drm/rcar-du/rcar_du_kms.c | 15 ++++-----------
For rcar-du,
Acked-by: Laurent Pinchart
> drivers/media/platform/soc_camera/soc_camera.c | 3 ++-
> drivers/of/base.c | 9 +--------
> drivers/video/fbdev/omap2/dss/omapdss-boot-init.c | 7 +------
> 6 files changed, 12 insertions(+), 48 deletions(-)
>
> diff --git a/drivers/coresight/of_coresight.c
> b/drivers/coresight/of_coresight.c index 5030c07..349c88b 100644
> --- a/drivers/coresight/of_coresight.c
> +++ b/drivers/coresight/of_coresight.c
> @@ -52,15 +52,6 @@ of_coresight_get_endpoint_device(struct device_node
> *endpoint) endpoint, of_dev_node_match);
> }
>
> -static struct device_node *of_get_coresight_endpoint(
> - const struct device_node *parent, struct device_node *prev)
> -{
> - struct device_node *node = of_graph_get_next_endpoint(parent, prev);
> -
> - of_node_put(prev);
> - return node;
> -}
> -
> static void of_coresight_get_ports(struct device_node *node,
> int *nr_inport, int *nr_outport)
> {
> @@ -68,7 +59,7 @@ static void of_coresight_get_ports(struct device_node
> *node, int in = 0, out = 0;
>
> do {
> - ep = of_get_coresight_endpoint(node, ep);
> + ep = of_graph_get_next_endpoint(node, ep);
> if (!ep)
> break;
>
> @@ -140,7 +131,7 @@ struct coresight_platform_data
> *of_get_coresight_platform_data( /* Iterate through each port to discover
> topology */
> do {
> /* Get a handle on a port */
> - ep = of_get_coresight_endpoint(node, ep);
> + ep = of_graph_get_next_endpoint(node, ep);
> if (!ep)
> break;
>
> diff --git a/drivers/gpu/drm/imx/imx-drm-core.c
> b/drivers/gpu/drm/imx/imx-drm-core.c index b250130..fed627d 100644
> --- a/drivers/gpu/drm/imx/imx-drm-core.c
> +++ b/drivers/gpu/drm/imx/imx-drm-core.c
> @@ -436,15 +436,6 @@ static uint32_t imx_drm_find_crtc_mask(struct
> imx_drm_device *imxdrm, return 0;
> }
>
> -static struct device_node *imx_drm_of_get_next_endpoint(
> - const struct device_node *parent, struct device_node *prev)
> -{
> - struct device_node *node = of_graph_get_next_endpoint(parent, prev);
> -
> - of_node_put(prev);
> - return node;
> -}
> -
> int imx_drm_encoder_parse_of(struct drm_device *drm,
> struct drm_encoder *encoder, struct device_node *np)
> {
> @@ -456,7 +447,7 @@ int imx_drm_encoder_parse_of(struct drm_device *drm,
> for (i = 0; ; i++) {
> u32 mask;
>
> - ep = imx_drm_of_get_next_endpoint(np, ep);
> + ep = of_graph_get_next_endpoint(np, ep);
> if (!ep)
> break;
>
> @@ -504,7 +495,7 @@ int imx_drm_encoder_get_mux_id(struct device_node *node,
> return -EINVAL;
>
> do {
> - ep = imx_drm_of_get_next_endpoint(node, ep);
> + ep = of_graph_get_next_endpoint(node, ep);
> if (!ep)
> break;
>
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> b/drivers/gpu/drm/rcar-du/rcar_du_kms.c index 0c5ee61..480c4d9 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> @@ -206,7 +206,7 @@ static int rcar_du_encoders_init_one(struct
> rcar_du_device *rcdu, enum rcar_du_encoder_type enc_type =
> RCAR_DU_ENCODER_NONE;
> struct device_node *connector = NULL;
> struct device_node *encoder = NULL;
> - struct device_node *prev = NULL;
> + struct device_node *ep_node = NULL;
> struct device_node *entity_ep_node;
> struct device_node *entity;
> int ret;
> @@ -225,11 +225,7 @@ static int rcar_du_encoders_init_one(struct
> rcar_du_device *rcdu, entity_ep_node = of_parse_phandle(ep->local_node,
> "remote-endpoint", 0);
>
> while (1) {
> - struct device_node *ep_node;
> -
> - ep_node = of_graph_get_next_endpoint(entity, prev);
> - of_node_put(prev);
> - prev = ep_node;
> + ep_node = of_graph_get_next_endpoint(entity, ep_node);
>
> if (!ep_node)
> break;
> @@ -300,7 +296,7 @@ static int rcar_du_encoders_init_one(struct
> rcar_du_device *rcdu, static int rcar_du_encoders_init(struct
> rcar_du_device *rcdu)
> {
> struct device_node *np = rcdu->dev->of_node;
> - struct device_node *prev = NULL;
> + struct device_node *ep_node = NULL;
> unsigned int num_encoders = 0;
>
> /*
> @@ -308,15 +304,12 @@ static int rcar_du_encoders_init(struct rcar_du_device
> *rcdu) * pipeline.
> */
> while (1) {
> - struct device_node *ep_node;
> enum rcar_du_output output;
> struct of_endpoint ep;
> unsigned int i;
> int ret;
>
> - ep_node = of_graph_get_next_endpoint(np, prev);
> - of_node_put(prev);
> - prev = ep_node;
> + ep_node = of_graph_get_next_endpoint(np, ep_node);
>
> if (ep_node == NULL)
> break;
> diff --git a/drivers/media/platform/soc_camera/soc_camera.c
> b/drivers/media/platform/soc_camera/soc_camera.c index b3db51c..289b637
> 100644
> --- a/drivers/media/platform/soc_camera/soc_camera.c
> +++ b/drivers/media/platform/soc_camera/soc_camera.c
> @@ -1710,7 +1710,6 @@ static void scan_of_host(struct soc_camera_host *ici)
> if (!i)
> soc_of_bind(ici, epn, ren->parent);
>
> - of_node_put(epn);
> of_node_put(ren);
>
> if (i) {
> @@ -1718,6 +1717,8 @@ static void scan_of_host(struct soc_camera_host *ici)
> break;
> }
> }
> +
> + of_node_put(epn);
> }
>
> #else
> diff --git a/drivers/of/base.c b/drivers/of/base.c
> index 36536b6..aac66df 100644
> --- a/drivers/of/base.c
> +++ b/drivers/of/base.c
> @@ -2085,8 +2085,7 @@ EXPORT_SYMBOL(of_graph_parse_endpoint);
> * @prev: previous endpoint node, or NULL to get first
> *
> * Return: An 'endpoint' node pointer with refcount incremented. Refcount
> - * of the passed @prev node is not decremented, the caller have to use
> - * of_node_put() on it when done.
> + * of the passed @prev node is decremented.
> */
> struct device_node *of_graph_get_next_endpoint(const struct device_node
> *parent, struct device_node *prev)
> @@ -2122,12 +2121,6 @@ struct device_node *of_graph_get_next_endpoint(const
> struct device_node *parent, if (WARN_ONCE(!port, "%s(): endpoint %s has no
> parent node\n",
> __func__, prev->full_name))
> return NULL;
> -
> - /*
> - * Avoid dropping prev node refcount to 0 when getting the next
> - * child below.
> - */
> - of_node_get(prev);
> }
>
> while (1) {
> diff --git a/drivers/video/fbdev/omap2/dss/omapdss-boot-init.c
> b/drivers/video/fbdev/omap2/dss/omapdss-boot-init.c index 2f0822e..76fb18b
> 100644
> --- a/drivers/video/fbdev/omap2/dss/omapdss-boot-init.c
> +++ b/drivers/video/fbdev/omap2/dss/omapdss-boot-init.c
> @@ -164,20 +164,15 @@ static void __init omapdss_walk_device(struct
> device_node *node, bool root)
>
> pn = of_graph_get_remote_port_parent(n);
>
> - if (!pn) {
> - of_node_put(n);
> + if (!pn)
> continue;
> - }
>
> if (!of_device_is_available(pn) || omapdss_list_contains(pn)) {
> of_node_put(pn);
> - of_node_put(n);
> continue;
> }
>
> omapdss_walk_device(pn, false);
> -
> - of_node_put(n);
> }
> }
--
Regards,
Laurent Pinchart