linux-fbdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/9] use for_each_endpoint_of_node()
@ 2024-05-30  2:05 Kuninori Morimoto
  2024-05-30  2:05 ` [PATCH v3 1/9] gpu: drm: replace of_graph_get_next_endpoint() Kuninori Morimoto
                   ` (8 more replies)
  0 siblings, 9 replies; 14+ messages in thread
From: Kuninori Morimoto @ 2024-05-30  2:05 UTC (permalink / raw)
  To: Lad Prabhakar, Alexander Shishkin, Alexandre Belloni,
	Claudiu Beznea, Daniel Vetter, David Airlie, Eugen Hristev,
	Greg Kroah-Hartman, Helge Deller, Laurent Pinchart,
	Maarten Lankhorst, Mauro Carvalho Chehab, Maxime Ripard,
	Michal Simek, Nicolas Ferre, Rob Herring, Suzuki K Poulose,
	Thomas Zimmermann, Tomi Valkeinen, coresight, dri-devel,
	linux-arm-kernel, linux-fbdev, linux-media, linux-omap,
	linux-staging


Hi Rob, Helge

This is v3 patch-set

We already have for_each_endpoint_of_node(), but some drivers are
not using it. This patch-set replace it.

This patch-set is related to "OF" (= Rob), but many driveres are for
"MultiMedia" (= Helge). I'm not sure who handle these.

I noticed that my posted 1 patch on (A) was not yet included on
linus/master. I have included it.

[o] done
[*] this patch-set

	[o] tidyup of_graph_get_endpoint_count()
(A)	[o] replace endpoint func - use endpoint_by_regs()
	[*] replace endpoint func - use for_each()
	[ ] add new port function
	[ ] add new endpoint function

v2 -> v3
	- don't initialize pointer.
	- add Reviewed-by / Acked-by
	- include not-yet applied missing patch

v1 -> v2
	- fixup TI patch

Link: https://lore.kernel.org/r/8734sf6mgn.wl-kuninori.morimoto.gx@renesas.com
Link: https://lore.kernel.org/r/87cyrauf0x.wl-kuninori.morimoto.gx@renesas.com

Kuninori Morimoto (9):
  gpu: drm: replace of_graph_get_next_endpoint()
  gpu: drm: use for_each_endpoint_of_node()
  hwtracing: use for_each_endpoint_of_node()
  media: platform: microchip: use for_each_endpoint_of_node()
  media: platform: ti: use for_each_endpoint_of_node()
  media: platform: xilinx: use for_each_endpoint_of_node()
  staging: media: atmel: use for_each_endpoint_of_node()
  video: fbdev: use for_each_endpoint_of_node()
  fbdev: omapfb: use of_graph_get_remote_port()

 drivers/gpu/drm/drm_of.c                      |  4 +++-
 drivers/gpu/drm/omapdrm/dss/base.c            |  3 +--
 .../drm/panel/panel-raspberrypi-touchscreen.c |  2 +-
 drivers/gpu/drm/tiny/arcpgu.c                 |  2 +-
 .../hwtracing/coresight/coresight-platform.c  |  4 ++--
 .../microchip/microchip-sama5d2-isc.c         | 21 +++++++------------
 .../microchip/microchip-sama7g5-isc.c         | 21 +++++++------------
 .../media/platform/ti/am437x/am437x-vpfe.c    | 12 +++++------
 .../media/platform/ti/davinci/vpif_capture.c  | 14 ++++++-------
 drivers/media/platform/xilinx/xilinx-vipp.c   |  9 ++------
 .../deprecated/atmel/atmel-sama5d2-isc.c      |  8 ++-----
 .../deprecated/atmel/atmel-sama7g5-isc.c      |  8 ++-----
 drivers/video/fbdev/omap2/omapfb/dss/dss-of.c | 15 +------------
 .../omap2/omapfb/dss/omapdss-boot-init.c      |  3 +--
 14 files changed, 44 insertions(+), 82 deletions(-)

-- 
2.43.0


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v3 1/9] gpu: drm: replace of_graph_get_next_endpoint()
  2024-05-30  2:05 [PATCH v3 0/9] use for_each_endpoint_of_node() Kuninori Morimoto
@ 2024-05-30  2:05 ` Kuninori Morimoto
  2024-05-30  2:05 ` [PATCH v3 2/9] gpu: drm: use for_each_endpoint_of_node() Kuninori Morimoto
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 14+ messages in thread
From: Kuninori Morimoto @ 2024-05-30  2:05 UTC (permalink / raw)
  To: Lad Prabhakar, Alexander Shishkin, Alexandre Belloni,
	Claudiu Beznea, Daniel Vetter, David Airlie, Eugen Hristev,
	Greg Kroah-Hartman, Helge Deller, Laurent Pinchart,
	Maarten Lankhorst, Mauro Carvalho Chehab, Maxime Ripard,
	Michal Simek, Nicolas Ferre, Rob Herring, Suzuki K Poulose,
	Thomas Zimmermann, Tomi Valkeinen, coresight, dri-devel,
	linux-arm-kernel, linux-fbdev, linux-media, linux-omap,
	linux-staging

From DT point of view, in general, drivers should be asking for a
specific port number because their function is fixed in the binding.

of_graph_get_next_endpoint() doesn't match to this concept.

Simply replace

	- of_graph_get_next_endpoint(xxx, NULL);
	+ of_graph_get_endpoint_by_regs(xxx, 0, -1);

Link: https://lore.kernel.org/r/20240202174941.GA310089-robh@kernel.org
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/gpu/drm/drm_of.c                              | 4 +++-
 drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c | 2 +-
 drivers/gpu/drm/tiny/arcpgu.c                         | 2 +-
 3 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c
index 177b600895d3c..b6b2cade69aeb 100644
--- a/drivers/gpu/drm/drm_of.c
+++ b/drivers/gpu/drm/drm_of.c
@@ -504,6 +504,8 @@ EXPORT_SYMBOL_GPL(drm_of_get_data_lanes_count_ep);
  * Gets parent DSI bus for a DSI device controlled through a bus other
  * than MIPI-DCS (SPI, I2C, etc.) using the Device Tree.
  *
+ * This function assumes that the device's port@0 is the DSI input.
+ *
  * Returns pointer to mipi_dsi_host if successful, -EINVAL if the
  * request is unsupported, -EPROBE_DEFER if the DSI host is found but
  * not available, or -ENODEV otherwise.
@@ -516,7 +518,7 @@ struct mipi_dsi_host *drm_of_get_dsi_bus(struct device *dev)
 	/*
 	 * Get first endpoint child from device.
 	 */
-	endpoint = of_graph_get_next_endpoint(dev->of_node, NULL);
+	endpoint = of_graph_get_endpoint_by_regs(dev->of_node, 0, -1);
 	if (!endpoint)
 		return ERR_PTR(-ENODEV);
 
diff --git a/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c b/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c
index 4618c892cdd65..e10e469aa7a6c 100644
--- a/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c
+++ b/drivers/gpu/drm/panel/panel-raspberrypi-touchscreen.c
@@ -400,7 +400,7 @@ static int rpi_touchscreen_probe(struct i2c_client *i2c)
 	rpi_touchscreen_i2c_write(ts, REG_POWERON, 0);
 
 	/* Look up the DSI host.  It needs to probe before we do. */
-	endpoint = of_graph_get_next_endpoint(dev->of_node, NULL);
+	endpoint = of_graph_get_endpoint_by_regs(dev->of_node, 0, -1);
 	if (!endpoint)
 		return -ENODEV;
 
diff --git a/drivers/gpu/drm/tiny/arcpgu.c b/drivers/gpu/drm/tiny/arcpgu.c
index 4f8f3172379e3..8c29b719ea626 100644
--- a/drivers/gpu/drm/tiny/arcpgu.c
+++ b/drivers/gpu/drm/tiny/arcpgu.c
@@ -288,7 +288,7 @@ static int arcpgu_load(struct arcpgu_drm_private *arcpgu)
 	 * There is only one output port inside each device. It is linked with
 	 * encoder endpoint.
 	 */
-	endpoint_node = of_graph_get_next_endpoint(pdev->dev.of_node, NULL);
+	endpoint_node = of_graph_get_endpoint_by_regs(pdev->dev.of_node, 0, -1);
 	if (endpoint_node) {
 		encoder_node = of_graph_get_remote_port_parent(endpoint_node);
 		of_node_put(endpoint_node);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v3 2/9] gpu: drm: use for_each_endpoint_of_node()
  2024-05-30  2:05 [PATCH v3 0/9] use for_each_endpoint_of_node() Kuninori Morimoto
  2024-05-30  2:05 ` [PATCH v3 1/9] gpu: drm: replace of_graph_get_next_endpoint() Kuninori Morimoto
@ 2024-05-30  2:05 ` Kuninori Morimoto
  2024-05-30  2:05 ` [PATCH v3 3/9] hwtracing: " Kuninori Morimoto
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 14+ messages in thread
From: Kuninori Morimoto @ 2024-05-30  2:05 UTC (permalink / raw)
  To: Lad Prabhakar, Alexander Shishkin, Alexandre Belloni,
	Claudiu Beznea, Daniel Vetter, David Airlie, Eugen Hristev,
	Greg Kroah-Hartman, Helge Deller, Laurent Pinchart,
	Maarten Lankhorst, Mauro Carvalho Chehab, Maxime Ripard,
	Michal Simek, Nicolas Ferre, Rob Herring, Suzuki K Poulose,
	Thomas Zimmermann, Tomi Valkeinen, coresight, dri-devel,
	linux-arm-kernel, linux-fbdev, linux-media, linux-omap,
	linux-staging

We already have for_each_endpoint_of_node(), don't use
of_graph_get_next_endpoint() directly. Replace it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Acked-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/gpu/drm/omapdrm/dss/base.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/omapdrm/dss/base.c b/drivers/gpu/drm/omapdrm/dss/base.c
index 050ca7eafac58..5f8002f6bb7a5 100644
--- a/drivers/gpu/drm/omapdrm/dss/base.c
+++ b/drivers/gpu/drm/omapdrm/dss/base.c
@@ -242,8 +242,7 @@ static void omapdss_walk_device(struct device *dev, struct device_node *node,
 
 	of_node_put(n);
 
-	n = NULL;
-	while ((n = of_graph_get_next_endpoint(node, n)) != NULL) {
+	for_each_endpoint_of_node(node, n) {
 		struct device_node *pn = of_graph_get_remote_port_parent(n);
 
 		if (!pn)
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v3 3/9] hwtracing: use for_each_endpoint_of_node()
  2024-05-30  2:05 [PATCH v3 0/9] use for_each_endpoint_of_node() Kuninori Morimoto
  2024-05-30  2:05 ` [PATCH v3 1/9] gpu: drm: replace of_graph_get_next_endpoint() Kuninori Morimoto
  2024-05-30  2:05 ` [PATCH v3 2/9] gpu: drm: use for_each_endpoint_of_node() Kuninori Morimoto
@ 2024-05-30  2:05 ` Kuninori Morimoto
  2024-05-30  2:06 ` [PATCH v3 4/9] media: platform: microchip: " Kuninori Morimoto
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 14+ messages in thread
From: Kuninori Morimoto @ 2024-05-30  2:05 UTC (permalink / raw)
  To: Lad Prabhakar, Alexander Shishkin, Alexandre Belloni,
	Claudiu Beznea, Daniel Vetter, David Airlie, Eugen Hristev,
	Greg Kroah-Hartman, Helge Deller, Laurent Pinchart,
	Maarten Lankhorst, Mauro Carvalho Chehab, Maxime Ripard,
	Michal Simek, Nicolas Ferre, Rob Herring, Suzuki K Poulose,
	Thomas Zimmermann, Tomi Valkeinen, coresight, dri-devel,
	linux-arm-kernel, linux-fbdev, linux-media, linux-omap,
	linux-staging

We already have for_each_endpoint_of_node(), don't use
of_graph_get_next_endpoint() directly. Replace it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: James Clark <james.clark@arm.com>
---
 drivers/hwtracing/coresight/coresight-platform.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/hwtracing/coresight/coresight-platform.c b/drivers/hwtracing/coresight/coresight-platform.c
index 9d550f5697fa8..e9683e613d520 100644
--- a/drivers/hwtracing/coresight/coresight-platform.c
+++ b/drivers/hwtracing/coresight/coresight-platform.c
@@ -275,7 +275,7 @@ static int of_get_coresight_platform_data(struct device *dev,
 	 */
 	if (!parent) {
 		/*
-		 * Avoid warnings in of_graph_get_next_endpoint()
+		 * Avoid warnings in for_each_endpoint_of_node()
 		 * if the device doesn't have any graph connections
 		 */
 		if (!of_graph_is_present(node))
@@ -286,7 +286,7 @@ static int of_get_coresight_platform_data(struct device *dev,
 	}
 
 	/* Iterate through each output port to discover topology */
-	while ((ep = of_graph_get_next_endpoint(parent, ep))) {
+	for_each_endpoint_of_node(parent, ep) {
 		/*
 		 * Legacy binding mixes input/output ports under the
 		 * same parent. So, skip the input ports if we are dealing
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v3 4/9] media: platform: microchip: use for_each_endpoint_of_node()
  2024-05-30  2:05 [PATCH v3 0/9] use for_each_endpoint_of_node() Kuninori Morimoto
                   ` (2 preceding siblings ...)
  2024-05-30  2:05 ` [PATCH v3 3/9] hwtracing: " Kuninori Morimoto
@ 2024-05-30  2:06 ` Kuninori Morimoto
  2024-05-30  6:37   ` Dan Carpenter
  2024-05-30  2:06 ` [PATCH v3 5/9] media: platform: ti: " Kuninori Morimoto
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 14+ messages in thread
From: Kuninori Morimoto @ 2024-05-30  2:06 UTC (permalink / raw)
  To: Lad Prabhakar, Alexander Shishkin, Alexandre Belloni,
	Claudiu Beznea, Daniel Vetter, David Airlie, Eugen Hristev,
	Greg Kroah-Hartman, Helge Deller, Laurent Pinchart,
	Maarten Lankhorst, Mauro Carvalho Chehab, Maxime Ripard,
	Michal Simek, Nicolas Ferre, Rob Herring, Suzuki K Poulose,
	Thomas Zimmermann, Tomi Valkeinen, coresight, dri-devel,
	linux-arm-kernel, linux-fbdev, linux-media, linux-omap,
	linux-staging

We already have for_each_endpoint_of_node(), don't use
of_graph_get_next_endpoint() directly. Replace it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 .../microchip/microchip-sama5d2-isc.c         | 21 +++++++------------
 .../microchip/microchip-sama7g5-isc.c         | 21 +++++++------------
 2 files changed, 16 insertions(+), 26 deletions(-)

diff --git a/drivers/media/platform/microchip/microchip-sama5d2-isc.c b/drivers/media/platform/microchip/microchip-sama5d2-isc.c
index 5ac149cf3647f..60b6d922d764e 100644
--- a/drivers/media/platform/microchip/microchip-sama5d2-isc.c
+++ b/drivers/media/platform/microchip/microchip-sama5d2-isc.c
@@ -353,33 +353,29 @@ static const u32 isc_sama5d2_gamma_table[][GAMMA_ENTRIES] = {
 static int isc_parse_dt(struct device *dev, struct isc_device *isc)
 {
 	struct device_node *np = dev->of_node;
-	struct device_node *epn = NULL;
+	struct device_node *epn;
 	struct isc_subdev_entity *subdev_entity;
 	unsigned int flags;
-	int ret;
 
 	INIT_LIST_HEAD(&isc->subdev_entities);
 
-	while (1) {
+	for_each_endpoint_of_node(np, epn) {
 		struct v4l2_fwnode_endpoint v4l2_epn = { .bus_type = 0 };
-
-		epn = of_graph_get_next_endpoint(np, epn);
-		if (!epn)
-			return 0;
+		int ret;
 
 		ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(epn),
 						 &v4l2_epn);
 		if (ret) {
-			ret = -EINVAL;
+			of_node_put(epn);
 			dev_err(dev, "Could not parse the endpoint\n");
-			break;
+			return -EINVAL;
 		}
 
 		subdev_entity = devm_kzalloc(dev, sizeof(*subdev_entity),
 					     GFP_KERNEL);
 		if (!subdev_entity) {
-			ret = -ENOMEM;
-			break;
+			of_node_put(epn);
+			return -ENOMEM;
 		}
 		subdev_entity->epn = epn;
 
@@ -400,9 +396,8 @@ static int isc_parse_dt(struct device *dev, struct isc_device *isc)
 
 		list_add_tail(&subdev_entity->list, &isc->subdev_entities);
 	}
-	of_node_put(epn);
 
-	return ret;
+	return 0;
 }
 
 static int microchip_isc_probe(struct platform_device *pdev)
diff --git a/drivers/media/platform/microchip/microchip-sama7g5-isc.c b/drivers/media/platform/microchip/microchip-sama7g5-isc.c
index 73445f33d26ba..e97abe3e35af0 100644
--- a/drivers/media/platform/microchip/microchip-sama7g5-isc.c
+++ b/drivers/media/platform/microchip/microchip-sama7g5-isc.c
@@ -336,36 +336,32 @@ static const u32 isc_sama7g5_gamma_table[][GAMMA_ENTRIES] = {
 static int xisc_parse_dt(struct device *dev, struct isc_device *isc)
 {
 	struct device_node *np = dev->of_node;
-	struct device_node *epn = NULL;
+	struct device_node *epn;
 	struct isc_subdev_entity *subdev_entity;
 	unsigned int flags;
-	int ret;
 	bool mipi_mode;
 
 	INIT_LIST_HEAD(&isc->subdev_entities);
 
 	mipi_mode = of_property_read_bool(np, "microchip,mipi-mode");
 
-	while (1) {
+	for_each_endpoint_of_node(np, epn) {
 		struct v4l2_fwnode_endpoint v4l2_epn = { .bus_type = 0 };
-
-		epn = of_graph_get_next_endpoint(np, epn);
-		if (!epn)
-			return 0;
+		int ret;
 
 		ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(epn),
 						 &v4l2_epn);
 		if (ret) {
-			ret = -EINVAL;
+			of_node_put(epn);
 			dev_err(dev, "Could not parse the endpoint\n");
-			break;
+			return -EINVAL;
 		}
 
 		subdev_entity = devm_kzalloc(dev, sizeof(*subdev_entity),
 					     GFP_KERNEL);
 		if (!subdev_entity) {
-			ret = -ENOMEM;
-			break;
+			of_node_put(epn);
+			return -ENOMEM;
 		}
 		subdev_entity->epn = epn;
 
@@ -389,9 +385,8 @@ static int xisc_parse_dt(struct device *dev, struct isc_device *isc)
 
 		list_add_tail(&subdev_entity->list, &isc->subdev_entities);
 	}
-	of_node_put(epn);
 
-	return ret;
+	return 0;
 }
 
 static int microchip_xisc_probe(struct platform_device *pdev)
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v3 5/9] media: platform: ti: use for_each_endpoint_of_node()
  2024-05-30  2:05 [PATCH v3 0/9] use for_each_endpoint_of_node() Kuninori Morimoto
                   ` (3 preceding siblings ...)
  2024-05-30  2:06 ` [PATCH v3 4/9] media: platform: microchip: " Kuninori Morimoto
@ 2024-05-30  2:06 ` Kuninori Morimoto
  2024-05-30  2:06 ` [PATCH v3 6/9] media: platform: xilinx: " Kuninori Morimoto
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 14+ messages in thread
From: Kuninori Morimoto @ 2024-05-30  2:06 UTC (permalink / raw)
  To: Lad Prabhakar, Alexander Shishkin, Alexandre Belloni,
	Claudiu Beznea, Daniel Vetter, David Airlie, Eugen Hristev,
	Greg Kroah-Hartman, Helge Deller, Laurent Pinchart,
	Maarten Lankhorst, Mauro Carvalho Chehab, Maxime Ripard,
	Michal Simek, Nicolas Ferre, Rob Herring, Suzuki K Poulose,
	Thomas Zimmermann, Tomi Valkeinen, coresight, dri-devel,
	linux-arm-kernel, linux-fbdev, linux-media, linux-omap,
	linux-staging

We already have for_each_endpoint_of_node(), don't use
of_graph_get_next_endpoint() directly. Replace it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/media/platform/ti/am437x/am437x-vpfe.c   | 12 +++++-------
 drivers/media/platform/ti/davinci/vpif_capture.c | 14 +++++++-------
 2 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/drivers/media/platform/ti/am437x/am437x-vpfe.c b/drivers/media/platform/ti/am437x/am437x-vpfe.c
index 77e12457d1495..009ff68a2b43c 100644
--- a/drivers/media/platform/ti/am437x/am437x-vpfe.c
+++ b/drivers/media/platform/ti/am437x/am437x-vpfe.c
@@ -2287,7 +2287,7 @@ static const struct v4l2_async_notifier_operations vpfe_async_ops = {
 static struct vpfe_config *
 vpfe_get_pdata(struct vpfe_device *vpfe)
 {
-	struct device_node *endpoint = NULL;
+	struct device_node *endpoint;
 	struct device *dev = vpfe->pdev;
 	struct vpfe_subdev_info *sdinfo;
 	struct vpfe_config *pdata;
@@ -2306,14 +2306,11 @@ vpfe_get_pdata(struct vpfe_device *vpfe)
 	if (!pdata)
 		return NULL;
 
-	for (i = 0; ; i++) {
+	i = 0;
+	for_each_endpoint_of_node(dev->of_node, endpoint) {
 		struct v4l2_fwnode_endpoint bus_cfg = { .bus_type = 0 };
 		struct device_node *rem;
 
-		endpoint = of_graph_get_next_endpoint(dev->of_node, endpoint);
-		if (!endpoint)
-			break;
-
 		sdinfo = &pdata->sub_devs[i];
 		sdinfo->grp_id = 0;
 
@@ -2371,9 +2368,10 @@ vpfe_get_pdata(struct vpfe_device *vpfe)
 		of_node_put(rem);
 		if (IS_ERR(pdata->asd[i]))
 			goto cleanup;
+
+		i++;
 	}
 
-	of_node_put(endpoint);
 	return pdata;
 
 cleanup:
diff --git a/drivers/media/platform/ti/davinci/vpif_capture.c b/drivers/media/platform/ti/davinci/vpif_capture.c
index c28794b6677b7..16326437767f8 100644
--- a/drivers/media/platform/ti/davinci/vpif_capture.c
+++ b/drivers/media/platform/ti/davinci/vpif_capture.c
@@ -1487,7 +1487,7 @@ static struct vpif_capture_config *
 vpif_capture_get_pdata(struct platform_device *pdev,
 		       struct v4l2_device *v4l2_dev)
 {
-	struct device_node *endpoint = NULL;
+	struct device_node *endpoint;
 	struct device_node *rem = NULL;
 	struct vpif_capture_config *pdata;
 	struct vpif_subdev_info *sdinfo;
@@ -1517,16 +1517,12 @@ vpif_capture_get_pdata(struct platform_device *pdev,
 	if (!pdata->subdev_info)
 		return NULL;
 
-	for (i = 0; i < VPIF_CAPTURE_NUM_CHANNELS; i++) {
+	i = 0;
+	for_each_endpoint_of_node(pdev->dev.of_node, endpoint) {
 		struct v4l2_fwnode_endpoint bus_cfg = { .bus_type = 0 };
 		unsigned int flags;
 		int err;
 
-		endpoint = of_graph_get_next_endpoint(pdev->dev.of_node,
-						      endpoint);
-		if (!endpoint)
-			break;
-
 		rem = of_graph_get_remote_port_parent(endpoint);
 		if (!rem) {
 			dev_dbg(&pdev->dev, "Remote device at %pOF not found\n",
@@ -1577,6 +1573,10 @@ vpif_capture_get_pdata(struct platform_device *pdev,
 			goto err_cleanup;
 
 		of_node_put(rem);
+
+		i++;
+		if (i >= VPIF_CAPTURE_NUM_CHANNELS)
+			break;
 	}
 
 done:
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v3 6/9] media: platform: xilinx: use for_each_endpoint_of_node()
  2024-05-30  2:05 [PATCH v3 0/9] use for_each_endpoint_of_node() Kuninori Morimoto
                   ` (4 preceding siblings ...)
  2024-05-30  2:06 ` [PATCH v3 5/9] media: platform: ti: " Kuninori Morimoto
@ 2024-05-30  2:06 ` Kuninori Morimoto
  2024-05-30  2:06 ` [PATCH v3 7/9] staging: media: atmel: " Kuninori Morimoto
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 14+ messages in thread
From: Kuninori Morimoto @ 2024-05-30  2:06 UTC (permalink / raw)
  To: Lad Prabhakar, Alexander Shishkin, Alexandre Belloni,
	Claudiu Beznea, Daniel Vetter, David Airlie, Eugen Hristev,
	Greg Kroah-Hartman, Helge Deller, Laurent Pinchart,
	Maarten Lankhorst, Mauro Carvalho Chehab, Maxime Ripard,
	Michal Simek, Nicolas Ferre, Rob Herring, Suzuki K Poulose,
	Thomas Zimmermann, Tomi Valkeinen, coresight, dri-devel,
	linux-arm-kernel, linux-fbdev, linux-media, linux-omap,
	linux-staging

We already have for_each_endpoint_of_node(), don't use
of_graph_get_next_endpoint() directly. Replace it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/media/platform/xilinx/xilinx-vipp.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/media/platform/xilinx/xilinx-vipp.c b/drivers/media/platform/xilinx/xilinx-vipp.c
index 996684a730383..bfe48cc0ab525 100644
--- a/drivers/media/platform/xilinx/xilinx-vipp.c
+++ b/drivers/media/platform/xilinx/xilinx-vipp.c
@@ -199,18 +199,13 @@ static int xvip_graph_build_dma(struct xvip_composite_device *xdev)
 	struct media_pad *sink_pad;
 	struct xvip_graph_entity *ent;
 	struct v4l2_fwnode_link link;
-	struct device_node *ep = NULL;
+	struct device_node *ep;
 	struct xvip_dma *dma;
 	int ret = 0;
 
 	dev_dbg(xdev->dev, "creating links for DMA engines\n");
 
-	while (1) {
-		/* Get the next endpoint and parse its link. */
-		ep = of_graph_get_next_endpoint(node, ep);
-		if (ep == NULL)
-			break;
-
+	for_each_endpoint_of_node(node, ep) {
 		dev_dbg(xdev->dev, "processing endpoint %pOF\n", ep);
 
 		ret = v4l2_fwnode_parse_link(of_fwnode_handle(ep), &link);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v3 7/9] staging: media: atmel: use for_each_endpoint_of_node()
  2024-05-30  2:05 [PATCH v3 0/9] use for_each_endpoint_of_node() Kuninori Morimoto
                   ` (5 preceding siblings ...)
  2024-05-30  2:06 ` [PATCH v3 6/9] media: platform: xilinx: " Kuninori Morimoto
@ 2024-05-30  2:06 ` Kuninori Morimoto
  2024-05-30  6:40   ` Dan Carpenter
  2024-05-30  2:06 ` [PATCH v3 8/9] video: fbdev: " Kuninori Morimoto
  2024-05-30  2:06 ` [PATCH v3 9/9] fbdev: omapfb: use of_graph_get_remote_port() Kuninori Morimoto
  8 siblings, 1 reply; 14+ messages in thread
From: Kuninori Morimoto @ 2024-05-30  2:06 UTC (permalink / raw)
  To: Lad Prabhakar, Alexander Shishkin, Alexandre Belloni,
	Claudiu Beznea, Daniel Vetter, David Airlie, Eugen Hristev,
	Greg Kroah-Hartman, Helge Deller, Laurent Pinchart,
	Maarten Lankhorst, Mauro Carvalho Chehab, Maxime Ripard,
	Michal Simek, Nicolas Ferre, Rob Herring, Suzuki K Poulose,
	Thomas Zimmermann, Tomi Valkeinen, coresight, dri-devel,
	linux-arm-kernel, linux-fbdev, linux-media, linux-omap,
	linux-staging

We already have for_each_endpoint_of_node(), don't use
of_graph_get_next_endpoint() directly. Replace it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 .../staging/media/deprecated/atmel/atmel-sama5d2-isc.c    | 8 ++------
 .../staging/media/deprecated/atmel/atmel-sama7g5-isc.c    | 8 ++------
 2 files changed, 4 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/media/deprecated/atmel/atmel-sama5d2-isc.c b/drivers/staging/media/deprecated/atmel/atmel-sama5d2-isc.c
index 31b2b48085c59..3b28a232418a9 100644
--- a/drivers/staging/media/deprecated/atmel/atmel-sama5d2-isc.c
+++ b/drivers/staging/media/deprecated/atmel/atmel-sama5d2-isc.c
@@ -333,20 +333,16 @@ static const u32 isc_sama5d2_gamma_table[][GAMMA_ENTRIES] = {
 static int isc_parse_dt(struct device *dev, struct isc_device *isc)
 {
 	struct device_node *np = dev->of_node;
-	struct device_node *epn = NULL;
+	struct device_node *epn;
 	struct isc_subdev_entity *subdev_entity;
 	unsigned int flags;
 	int ret;
 
 	INIT_LIST_HEAD(&isc->subdev_entities);
 
-	while (1) {
+	for_each_endpoint_of_node(np, epn) {
 		struct v4l2_fwnode_endpoint v4l2_epn = { .bus_type = 0 };
 
-		epn = of_graph_get_next_endpoint(np, epn);
-		if (!epn)
-			return 0;
-
 		ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(epn),
 						 &v4l2_epn);
 		if (ret) {
diff --git a/drivers/staging/media/deprecated/atmel/atmel-sama7g5-isc.c b/drivers/staging/media/deprecated/atmel/atmel-sama7g5-isc.c
index 020034f631f57..e559beb099f71 100644
--- a/drivers/staging/media/deprecated/atmel/atmel-sama7g5-isc.c
+++ b/drivers/staging/media/deprecated/atmel/atmel-sama7g5-isc.c
@@ -316,7 +316,7 @@ static const u32 isc_sama7g5_gamma_table[][GAMMA_ENTRIES] = {
 static int xisc_parse_dt(struct device *dev, struct isc_device *isc)
 {
 	struct device_node *np = dev->of_node;
-	struct device_node *epn = NULL;
+	struct device_node *epn;
 	struct isc_subdev_entity *subdev_entity;
 	unsigned int flags;
 	int ret;
@@ -326,13 +326,9 @@ static int xisc_parse_dt(struct device *dev, struct isc_device *isc)
 
 	mipi_mode = of_property_read_bool(np, "microchip,mipi-mode");
 
-	while (1) {
+	for_each_endpoint_of_node(np, epn) {
 		struct v4l2_fwnode_endpoint v4l2_epn = { .bus_type = 0 };
 
-		epn = of_graph_get_next_endpoint(np, epn);
-		if (!epn)
-			return 0;
-
 		ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(epn),
 						 &v4l2_epn);
 		if (ret) {
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v3 8/9] video: fbdev: use for_each_endpoint_of_node()
  2024-05-30  2:05 [PATCH v3 0/9] use for_each_endpoint_of_node() Kuninori Morimoto
                   ` (6 preceding siblings ...)
  2024-05-30  2:06 ` [PATCH v3 7/9] staging: media: atmel: " Kuninori Morimoto
@ 2024-05-30  2:06 ` Kuninori Morimoto
  2024-05-30  2:06 ` [PATCH v3 9/9] fbdev: omapfb: use of_graph_get_remote_port() Kuninori Morimoto
  8 siblings, 0 replies; 14+ messages in thread
From: Kuninori Morimoto @ 2024-05-30  2:06 UTC (permalink / raw)
  To: Lad Prabhakar, Alexander Shishkin, Alexandre Belloni,
	Claudiu Beznea, Daniel Vetter, David Airlie, Eugen Hristev,
	Greg Kroah-Hartman, Helge Deller, Laurent Pinchart,
	Maarten Lankhorst, Mauro Carvalho Chehab, Maxime Ripard,
	Michal Simek, Nicolas Ferre, Rob Herring, Suzuki K Poulose,
	Thomas Zimmermann, Tomi Valkeinen, coresight, dri-devel,
	linux-arm-kernel, linux-fbdev, linux-media, linux-omap,
	linux-staging

We already have for_each_endpoint_of_node(), don't use
of_graph_get_next_endpoint() directly. Replace it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/video/fbdev/omap2/omapfb/dss/omapdss-boot-init.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/dss/omapdss-boot-init.c b/drivers/video/fbdev/omap2/omapfb/dss/omapdss-boot-init.c
index 09f719af0d0c9..d80720c843235 100644
--- a/drivers/video/fbdev/omap2/omapfb/dss/omapdss-boot-init.c
+++ b/drivers/video/fbdev/omap2/omapfb/dss/omapdss-boot-init.c
@@ -149,8 +149,7 @@ static void __init omapdss_walk_device(struct device_node *node, bool root)
 
 	of_node_put(n);
 
-	n = NULL;
-	while ((n = of_graph_get_next_endpoint(node, n)) != NULL) {
+	for_each_endpoint_of_node(node, n) {
 		struct device_node *pn;
 
 		pn = of_graph_get_remote_port_parent(n);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v3 9/9] fbdev: omapfb: use of_graph_get_remote_port()
  2024-05-30  2:05 [PATCH v3 0/9] use for_each_endpoint_of_node() Kuninori Morimoto
                   ` (7 preceding siblings ...)
  2024-05-30  2:06 ` [PATCH v3 8/9] video: fbdev: " Kuninori Morimoto
@ 2024-05-30  2:06 ` Kuninori Morimoto
  8 siblings, 0 replies; 14+ messages in thread
From: Kuninori Morimoto @ 2024-05-30  2:06 UTC (permalink / raw)
  To: Lad Prabhakar, Alexander Shishkin, Alexandre Belloni,
	Claudiu Beznea, Daniel Vetter, David Airlie, Eugen Hristev,
	Greg Kroah-Hartman, Helge Deller, Laurent Pinchart,
	Maarten Lankhorst, Mauro Carvalho Chehab, Maxime Ripard,
	Michal Simek, Nicolas Ferre, Rob Herring, Suzuki K Poulose,
	Thomas Zimmermann, Tomi Valkeinen, coresight, dri-devel,
	linux-arm-kernel, linux-fbdev, linux-media, linux-omap,
	linux-staging

We already have of_graph_get_remote_port(), Let's use it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/video/fbdev/omap2/omapfb/dss/dss-of.c | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dss-of.c b/drivers/video/fbdev/omap2/omapfb/dss/dss-of.c
index 14965a3fd05b7..4040e247e026e 100644
--- a/drivers/video/fbdev/omap2/omapfb/dss/dss-of.c
+++ b/drivers/video/fbdev/omap2/omapfb/dss/dss-of.c
@@ -117,19 +117,6 @@ u32 dss_of_port_get_port_number(struct device_node *port)
 	return reg;
 }
 
-static struct device_node *omapdss_of_get_remote_port(const struct device_node *node)
-{
-	struct device_node *np;
-
-	np = of_graph_get_remote_endpoint(node);
-	if (!np)
-		return NULL;
-
-	np = of_get_next_parent(np);
-
-	return np;
-}
-
 struct omap_dss_device *
 omapdss_of_find_source_for_first_ep(struct device_node *node)
 {
@@ -141,7 +128,7 @@ omapdss_of_find_source_for_first_ep(struct device_node *node)
 	if (!ep)
 		return ERR_PTR(-EINVAL);
 
-	src_port = omapdss_of_get_remote_port(ep);
+	src_port = of_graph_get_remote_port(ep);
 	if (!src_port) {
 		of_node_put(ep);
 		return ERR_PTR(-EINVAL);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH v3 4/9] media: platform: microchip: use for_each_endpoint_of_node()
  2024-05-30  2:06 ` [PATCH v3 4/9] media: platform: microchip: " Kuninori Morimoto
@ 2024-05-30  6:37   ` Dan Carpenter
  2024-05-30 23:52     ` Kuninori Morimoto
  0 siblings, 1 reply; 14+ messages in thread
From: Dan Carpenter @ 2024-05-30  6:37 UTC (permalink / raw)
  To: Kuninori Morimoto, Laurent Pinchart
  Cc: Lad Prabhakar, Alexander Shishkin, Alexandre Belloni,
	Claudiu Beznea, Daniel Vetter, David Airlie, Eugen Hristev,
	Greg Kroah-Hartman, Helge Deller, Maarten Lankhorst,
	Mauro Carvalho Chehab, Maxime Ripard, Michal Simek, Nicolas Ferre,
	Rob Herring, Suzuki K Poulose, Thomas Zimmermann, Tomi Valkeinen,
	coresight, dri-devel, linux-arm-kernel, linux-fbdev, linux-media,
	linux-omap, linux-staging

On Thu, May 30, 2024 at 02:06:05AM +0000, Kuninori Morimoto wrote:
> diff --git a/drivers/media/platform/microchip/microchip-sama5d2-isc.c b/drivers/media/platform/microchip/microchip-sama5d2-isc.c
> index 5ac149cf3647f..60b6d922d764e 100644
> --- a/drivers/media/platform/microchip/microchip-sama5d2-isc.c
> +++ b/drivers/media/platform/microchip/microchip-sama5d2-isc.c
> @@ -353,33 +353,29 @@ static const u32 isc_sama5d2_gamma_table[][GAMMA_ENTRIES] = {
>  static int isc_parse_dt(struct device *dev, struct isc_device *isc)
>  {
>  	struct device_node *np = dev->of_node;
> -	struct device_node *epn = NULL;
> +	struct device_node *epn;
>  	struct isc_subdev_entity *subdev_entity;
>  	unsigned int flags;
> -	int ret;
>  
>  	INIT_LIST_HEAD(&isc->subdev_entities);
>  
> -	while (1) {
> +	for_each_endpoint_of_node(np, epn) {
>  		struct v4l2_fwnode_endpoint v4l2_epn = { .bus_type = 0 };
> -
> -		epn = of_graph_get_next_endpoint(np, epn);
> -		if (!epn)
> -			return 0;
> +		int ret;
>  
>  		ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(epn),
>  						 &v4l2_epn);
>  		if (ret) {
> -			ret = -EINVAL;
> +			of_node_put(epn);
>  			dev_err(dev, "Could not parse the endpoint\n");
> -			break;
> +			return -EINVAL;
>  		}
>  
>  		subdev_entity = devm_kzalloc(dev, sizeof(*subdev_entity),
>  					     GFP_KERNEL);
>  		if (!subdev_entity) {
> -			ret = -ENOMEM;
> -			break;
> +			of_node_put(epn);
> +			return -ENOMEM;
>  		}
>  		subdev_entity->epn = epn;

This code is an example of what Laurent was talking about.  We're taking
storing "subdev_entity->epn = epn" but then not incrementing the
refcount.  Perhaps it's not necessary?

The difference between this and _scoped() would be if we stored epn and
then returned.  I feel like that's less common.  We could detect that
sort of thing using static analysis if it turned out to be an issue.

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v3 7/9] staging: media: atmel: use for_each_endpoint_of_node()
  2024-05-30  2:06 ` [PATCH v3 7/9] staging: media: atmel: " Kuninori Morimoto
@ 2024-05-30  6:40   ` Dan Carpenter
  2024-05-30 23:41     ` Kuninori Morimoto
  0 siblings, 1 reply; 14+ messages in thread
From: Dan Carpenter @ 2024-05-30  6:40 UTC (permalink / raw)
  To: Kuninori Morimoto
  Cc: Lad Prabhakar, Alexander Shishkin, Alexandre Belloni,
	Claudiu Beznea, Daniel Vetter, David Airlie, Eugen Hristev,
	Greg Kroah-Hartman, Helge Deller, Laurent Pinchart,
	Maarten Lankhorst, Mauro Carvalho Chehab, Maxime Ripard,
	Michal Simek, Nicolas Ferre, Rob Herring, Suzuki K Poulose,
	Thomas Zimmermann, Tomi Valkeinen, coresight, dri-devel,
	linux-arm-kernel, linux-fbdev, linux-media, linux-omap,
	linux-staging

On Thu, May 30, 2024 at 02:06:22AM +0000, Kuninori Morimoto wrote:
> We already have for_each_endpoint_of_node(), don't use
> of_graph_get_next_endpoint() directly. Replace it.
> 
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> ---
>  .../staging/media/deprecated/atmel/atmel-sama5d2-isc.c    | 8 ++------
>  .../staging/media/deprecated/atmel/atmel-sama7g5-isc.c    | 8 ++------
>  2 files changed, 4 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/staging/media/deprecated/atmel/atmel-sama5d2-isc.c b/drivers/staging/media/deprecated/atmel/atmel-sama5d2-isc.c
> index 31b2b48085c59..3b28a232418a9 100644
> --- a/drivers/staging/media/deprecated/atmel/atmel-sama5d2-isc.c
> +++ b/drivers/staging/media/deprecated/atmel/atmel-sama5d2-isc.c
> @@ -333,20 +333,16 @@ static const u32 isc_sama5d2_gamma_table[][GAMMA_ENTRIES] = {
>  static int isc_parse_dt(struct device *dev, struct isc_device *isc)
>  {
>  	struct device_node *np = dev->of_node;
> -	struct device_node *epn = NULL;
> +	struct device_node *epn;
>  	struct isc_subdev_entity *subdev_entity;
>  	unsigned int flags;
>  	int ret;
>  
>  	INIT_LIST_HEAD(&isc->subdev_entities);
>  
> -	while (1) {
> +	for_each_endpoint_of_node(np, epn) {
>  		struct v4l2_fwnode_endpoint v4l2_epn = { .bus_type = 0 };
>  
> -		epn = of_graph_get_next_endpoint(np, epn);
> -		if (!epn)
> -			return 0;
> -
>  		ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(epn),
>  						 &v4l2_epn);
>  		if (ret) {

This introduces a Smatch warning because now "ret" is uninitialized if
the for_each_endpoint_of_node() list is empty.  Is that something which
is possible?

I've been meaning to make a list of loops which always iterate at least
one time.  for_each_cpu() etc.

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v3 7/9] staging: media: atmel: use for_each_endpoint_of_node()
  2024-05-30  6:40   ` Dan Carpenter
@ 2024-05-30 23:41     ` Kuninori Morimoto
  0 siblings, 0 replies; 14+ messages in thread
From: Kuninori Morimoto @ 2024-05-30 23:41 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: Lad Prabhakar, Alexander Shishkin, Alexandre Belloni,
	Claudiu Beznea, Daniel Vetter, David Airlie, Eugen Hristev,
	Greg Kroah-Hartman, Helge Deller, Laurent Pinchart,
	Maarten Lankhorst, Mauro Carvalho Chehab, Maxime Ripard,
	Michal Simek, Nicolas Ferre, Rob Herring, Suzuki K Poulose,
	Thomas Zimmermann, Tomi Valkeinen, coresight, dri-devel,
	linux-arm-kernel, linux-fbdev, linux-media, linux-omap,
	linux-staging


Hi Dan

> > -	while (1) {
> > +	for_each_endpoint_of_node(np, epn) {
> >  		struct v4l2_fwnode_endpoint v4l2_epn = { .bus_type = 0 };
> >  
> > -		epn = of_graph_get_next_endpoint(np, epn);
> > -		if (!epn)
> > -			return 0;
> > -
> >  		ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(epn),
> >  						 &v4l2_epn);
> >  		if (ret) {
> 
> This introduces a Smatch warning because now "ret" is uninitialized if
> the for_each_endpoint_of_node() list is empty.  Is that something which
> is possible?
> 
> I've been meaning to make a list of loops which always iterate at least
> one time.  for_each_cpu() etc.

Oh, OK thank you for pointing it.
I will fixup and post it next week

Thank you for your help !!
Best regards
---
Kuninori Morimoto

^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH v3 4/9] media: platform: microchip: use for_each_endpoint_of_node()
  2024-05-30  6:37   ` Dan Carpenter
@ 2024-05-30 23:52     ` Kuninori Morimoto
  0 siblings, 0 replies; 14+ messages in thread
From: Kuninori Morimoto @ 2024-05-30 23:52 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: Laurent Pinchart, Lad Prabhakar, Alexander Shishkin,
	Alexandre Belloni, Claudiu Beznea, Daniel Vetter, David Airlie,
	Eugen Hristev, Greg Kroah-Hartman, Helge Deller,
	Maarten Lankhorst, Mauro Carvalho Chehab, Maxime Ripard,
	Michal Simek, Nicolas Ferre, Rob Herring, Suzuki K Poulose,
	Thomas Zimmermann, Tomi Valkeinen, coresight, dri-devel,
	linux-arm-kernel, linux-fbdev, linux-media, linux-omap,
	linux-staging


Hi Dan, Rob, Helge

> > -	while (1) {
> > +	for_each_endpoint_of_node(np, epn) {
> >  		struct v4l2_fwnode_endpoint v4l2_epn = { .bus_type = 0 };
> > -
> > -		epn = of_graph_get_next_endpoint(np, epn);
> > -		if (!epn)
> > -			return 0;
> > +		int ret;
> >  
> >  		ret = v4l2_fwnode_endpoint_parse(of_fwnode_handle(epn),
> >  						 &v4l2_epn);
> >  		if (ret) {
> > -			ret = -EINVAL;
> > +			of_node_put(epn);
> >  			dev_err(dev, "Could not parse the endpoint\n");
> > -			break;
> > +			return -EINVAL;
> >  		}
> >  
> >  		subdev_entity = devm_kzalloc(dev, sizeof(*subdev_entity),
> >  					     GFP_KERNEL);
> >  		if (!subdev_entity) {
> > -			ret = -ENOMEM;
> > -			break;
> > +			of_node_put(epn);
> > +			return -ENOMEM;
> >  		}
> >  		subdev_entity->epn = epn;
> 
> This code is an example of what Laurent was talking about.  We're taking
> storing "subdev_entity->epn = epn" but then not incrementing the
> refcount.  Perhaps it's not necessary?
> 
> The difference between this and _scoped() would be if we stored epn and
> then returned.  I feel like that's less common.  We could detect that
> sort of thing using static analysis if it turned out to be an issue.

Thank you for pointing good sample, Dan.

But I wonder should this patch-set include and use _scoped() macro ?
If above is just a comment, _scoped() macro will be separate patch-set.
If above is pointing the issue, v4 need to have _scoped() macro.

Thank you for your help !!
Best regards
---
Kuninori Morimoto

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2024-05-30 23:52 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-30  2:05 [PATCH v3 0/9] use for_each_endpoint_of_node() Kuninori Morimoto
2024-05-30  2:05 ` [PATCH v3 1/9] gpu: drm: replace of_graph_get_next_endpoint() Kuninori Morimoto
2024-05-30  2:05 ` [PATCH v3 2/9] gpu: drm: use for_each_endpoint_of_node() Kuninori Morimoto
2024-05-30  2:05 ` [PATCH v3 3/9] hwtracing: " Kuninori Morimoto
2024-05-30  2:06 ` [PATCH v3 4/9] media: platform: microchip: " Kuninori Morimoto
2024-05-30  6:37   ` Dan Carpenter
2024-05-30 23:52     ` Kuninori Morimoto
2024-05-30  2:06 ` [PATCH v3 5/9] media: platform: ti: " Kuninori Morimoto
2024-05-30  2:06 ` [PATCH v3 6/9] media: platform: xilinx: " Kuninori Morimoto
2024-05-30  2:06 ` [PATCH v3 7/9] staging: media: atmel: " Kuninori Morimoto
2024-05-30  6:40   ` Dan Carpenter
2024-05-30 23:41     ` Kuninori Morimoto
2024-05-30  2:06 ` [PATCH v3 8/9] video: fbdev: " Kuninori Morimoto
2024-05-30  2:06 ` [PATCH v3 9/9] fbdev: omapfb: use of_graph_get_remote_port() Kuninori Morimoto

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).