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