Commit ef94711a authored by Akinobu Mita's avatar Akinobu Mita Committed by Mauro Carvalho Chehab

media: xilinx-video: fix bad of_node_put() on endpoint error

When iterating through all endpoints using of_graph_get_next_endpoint(),
the refcount of the returned endpoint node is incremented and the refcount
of the node which is passed as previous endpoint is decremented.

So the caller doesn't need to call of_node_put() for each iterated node
except for error exit paths.  Otherwise we get "OF: ERROR: Bad
of_node_put() on ..." messages.

Cc: Hyun Kwon <hyun.kwon@xilinx.com>
Signed-off-by: default avatarAkinobu Mita <akinobu.mita@gmail.com>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 45392ff6
...@@ -76,20 +76,16 @@ static int xvip_graph_build_one(struct xvip_composite_device *xdev, ...@@ -76,20 +76,16 @@ static int xvip_graph_build_one(struct xvip_composite_device *xdev,
struct xvip_graph_entity *ent; struct xvip_graph_entity *ent;
struct v4l2_fwnode_link link; struct v4l2_fwnode_link link;
struct device_node *ep = NULL; struct device_node *ep = NULL;
struct device_node *next;
int ret = 0; int ret = 0;
dev_dbg(xdev->dev, "creating links for entity %s\n", local->name); dev_dbg(xdev->dev, "creating links for entity %s\n", local->name);
while (1) { while (1) {
/* Get the next endpoint and parse its link. */ /* Get the next endpoint and parse its link. */
next = of_graph_get_next_endpoint(entity->node, ep); ep = of_graph_get_next_endpoint(entity->node, ep);
if (next == NULL) if (ep == NULL)
break; break;
of_node_put(ep);
ep = next;
dev_dbg(xdev->dev, "processing endpoint %pOF\n", ep); dev_dbg(xdev->dev, "processing endpoint %pOF\n", ep);
ret = v4l2_fwnode_parse_link(of_fwnode_handle(ep), &link); ret = v4l2_fwnode_parse_link(of_fwnode_handle(ep), &link);
...@@ -200,7 +196,6 @@ static int xvip_graph_build_dma(struct xvip_composite_device *xdev) ...@@ -200,7 +196,6 @@ static int xvip_graph_build_dma(struct xvip_composite_device *xdev)
struct xvip_graph_entity *ent; struct xvip_graph_entity *ent;
struct v4l2_fwnode_link link; struct v4l2_fwnode_link link;
struct device_node *ep = NULL; struct device_node *ep = NULL;
struct device_node *next;
struct xvip_dma *dma; struct xvip_dma *dma;
int ret = 0; int ret = 0;
...@@ -208,13 +203,10 @@ static int xvip_graph_build_dma(struct xvip_composite_device *xdev) ...@@ -208,13 +203,10 @@ static int xvip_graph_build_dma(struct xvip_composite_device *xdev)
while (1) { while (1) {
/* Get the next endpoint and parse its link. */ /* Get the next endpoint and parse its link. */
next = of_graph_get_next_endpoint(node, ep); ep = of_graph_get_next_endpoint(node, ep);
if (next == NULL) if (ep == NULL)
break; break;
of_node_put(ep);
ep = next;
dev_dbg(xdev->dev, "processing endpoint %pOF\n", ep); dev_dbg(xdev->dev, "processing endpoint %pOF\n", ep);
ret = v4l2_fwnode_parse_link(of_fwnode_handle(ep), &link); ret = v4l2_fwnode_parse_link(of_fwnode_handle(ep), &link);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment