Message ID | 1557126318-21487-5-git-send-email-wen.yang99@zte.com.cn (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | None | expand |
On 5/6/19 9:05 AM, Wen Yang wrote: > The call to of_get_child_by_name returns a node pointer with refcount > incremented thus it must be explicitly decremented after the last > usage. > > Detected by coccinelle with the following warnings: > drivers/media/platform/xilinx/xilinx-vipp.c:487:3-9: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 477, but without a corresponding object release within this function. > drivers/media/platform/xilinx/xilinx-vipp.c:491:1-7: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 477, but without a corresponding object release within this function. > > Signed-off-by: Wen Yang <wen.yang99@zte.com.cn> > Cc: Patrice Chotard <patrice.chotard@st.com> > Cc: Hyun Kwon <hyun.kwon@xilinx.com> > Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > Cc: Mauro Carvalho Chehab <mchehab@kernel.org> > Cc: Michal Simek <michal.simek@xilinx.com> > Cc: linux-media@vger.kernel.org > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-kernel@vger.kernel.org > --- > drivers/media/platform/exynos4-is/fimc-is.c | 1 + > drivers/media/platform/exynos4-is/media-dev.c | 1 + Huh? This patch changes exynos4 as well, not just xilinx. Please split this up into two patches, one for each driver. > drivers/media/platform/xilinx/xilinx-vipp.c | 8 +++++--- > 3 files changed, 7 insertions(+), 3 deletions(-) > > diff --git a/drivers/media/platform/exynos4-is/fimc-is.c b/drivers/media/platform/exynos4-is/fimc-is.c > index 02da0b0..25df4c6 100644 > --- a/drivers/media/platform/exynos4-is/fimc-is.c > +++ b/drivers/media/platform/exynos4-is/fimc-is.c > @@ -809,6 +809,7 @@ static int fimc_is_probe(struct platform_device *pdev) > return -ENODEV; > > is->pmu_regs = of_iomap(node, 0); > + of_node_put(node); > if (!is->pmu_regs) > return -ENOMEM; > > diff --git a/drivers/media/platform/exynos4-is/media-dev.c b/drivers/media/platform/exynos4-is/media-dev.c > index 463f2d8..a31dacf 100644 > --- a/drivers/media/platform/exynos4-is/media-dev.c > +++ b/drivers/media/platform/exynos4-is/media-dev.c > @@ -450,6 +450,7 @@ static int fimc_md_parse_port_node(struct fimc_md *fmd, > else > pd->fimc_bus_type = pd->sensor_bus_type; > > + of_node_put(np); > if (WARN_ON(index >= ARRAY_SIZE(fmd->sensor))) { > of_node_put(rem); > return -EINVAL; > diff --git a/drivers/media/platform/xilinx/xilinx-vipp.c b/drivers/media/platform/xilinx/xilinx-vipp.c > index edce040..307717c 100644 > --- a/drivers/media/platform/xilinx/xilinx-vipp.c > +++ b/drivers/media/platform/xilinx/xilinx-vipp.c > @@ -472,7 +472,7 @@ static int xvip_graph_dma_init(struct xvip_composite_device *xdev) > { > struct device_node *ports; > struct device_node *port; > - int ret; > + int ret = 0; > > ports = of_get_child_by_name(xdev->dev->of_node, "ports"); > if (ports == NULL) { > @@ -484,11 +484,13 @@ static int xvip_graph_dma_init(struct xvip_composite_device *xdev) > ret = xvip_graph_dma_init_one(xdev, port); > if (ret < 0) { > of_node_put(port); > - return ret; > + goto out_put_node; Just do a break here, > } > } > > - return 0; > +out_put_node: and drop this label. > + of_node_put(ports); > + return ret; > } > > static void xvip_graph_cleanup(struct xvip_composite_device *xdev) > Regards, Hans
diff --git a/drivers/media/platform/exynos4-is/fimc-is.c b/drivers/media/platform/exynos4-is/fimc-is.c index 02da0b0..25df4c6 100644 --- a/drivers/media/platform/exynos4-is/fimc-is.c +++ b/drivers/media/platform/exynos4-is/fimc-is.c @@ -809,6 +809,7 @@ static int fimc_is_probe(struct platform_device *pdev) return -ENODEV; is->pmu_regs = of_iomap(node, 0); + of_node_put(node); if (!is->pmu_regs) return -ENOMEM; diff --git a/drivers/media/platform/exynos4-is/media-dev.c b/drivers/media/platform/exynos4-is/media-dev.c index 463f2d8..a31dacf 100644 --- a/drivers/media/platform/exynos4-is/media-dev.c +++ b/drivers/media/platform/exynos4-is/media-dev.c @@ -450,6 +450,7 @@ static int fimc_md_parse_port_node(struct fimc_md *fmd, else pd->fimc_bus_type = pd->sensor_bus_type; + of_node_put(np); if (WARN_ON(index >= ARRAY_SIZE(fmd->sensor))) { of_node_put(rem); return -EINVAL; diff --git a/drivers/media/platform/xilinx/xilinx-vipp.c b/drivers/media/platform/xilinx/xilinx-vipp.c index edce040..307717c 100644 --- a/drivers/media/platform/xilinx/xilinx-vipp.c +++ b/drivers/media/platform/xilinx/xilinx-vipp.c @@ -472,7 +472,7 @@ static int xvip_graph_dma_init(struct xvip_composite_device *xdev) { struct device_node *ports; struct device_node *port; - int ret; + int ret = 0; ports = of_get_child_by_name(xdev->dev->of_node, "ports"); if (ports == NULL) { @@ -484,11 +484,13 @@ static int xvip_graph_dma_init(struct xvip_composite_device *xdev) ret = xvip_graph_dma_init_one(xdev, port); if (ret < 0) { of_node_put(port); - return ret; + goto out_put_node; } } - return 0; +out_put_node: + of_node_put(ports); + return ret; } static void xvip_graph_cleanup(struct xvip_composite_device *xdev)
The call to of_get_child_by_name returns a node pointer with refcount incremented thus it must be explicitly decremented after the last usage. Detected by coccinelle with the following warnings: drivers/media/platform/xilinx/xilinx-vipp.c:487:3-9: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 477, but without a corresponding object release within this function. drivers/media/platform/xilinx/xilinx-vipp.c:491:1-7: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 477, but without a corresponding object release within this function. Signed-off-by: Wen Yang <wen.yang99@zte.com.cn> Cc: Patrice Chotard <patrice.chotard@st.com> Cc: Hyun Kwon <hyun.kwon@xilinx.com> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Cc: Mauro Carvalho Chehab <mchehab@kernel.org> Cc: Michal Simek <michal.simek@xilinx.com> Cc: linux-media@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org --- drivers/media/platform/exynos4-is/fimc-is.c | 1 + drivers/media/platform/exynos4-is/media-dev.c | 1 + drivers/media/platform/xilinx/xilinx-vipp.c | 8 +++++--- 3 files changed, 7 insertions(+), 3 deletions(-)