Hi Hans,
Thank you for reviewing this.
On Thu, Apr 04, 2019 at 03:43:51PM +0200, Hans Verkuil wrote:
> On 3/18/19 8:16 PM, Sakari Ailus wrote:
...
> > +static int isp_parse_of_endpoints(struct isp_device *isp)
> > +{
> > + struct fwnode_handle *ep;
> > + struct isp_async_subdev *isd;
> > + struct isp_bus_cfg *buscfg;
> > + unsigned int i;
> > +
> > + ep = fwnode_graph_get_endpoint_by_id(
> > + dev_fwnode(isp->dev), ISP_OF_PHY_PARALLEL, 0,
> > + FWNODE_GRAPH_ENDPOINT_NEXT);
> > +
> > + if (ep) {
> > + struct v4l2_fwnode_endpoint vep = {
> > + .bus_type = V4L2_MBUS_PARALLEL
> > + };
> > + int ret;
> > +
> > + dev_dbg(isp->dev, "parsing parallel interface\n");
> > +
> > + ret = v4l2_fwnode_endpoint_parse(ep, &vep);
> > + if (!ret)
> > + ret = isp_alloc_isd(&isd, &buscfg);
> > +
> > + if (!ret) {
> > + isp_parse_of_parallel_endpoint(isp->dev, &vep, buscfg);
> > + ret = v4l2_async_notifier_add_fwnode_remote_subdev(
> > + &isp->notifier, ep, &isd->asd);
> > + }
> > +
> > + if (ret) {
> > + kfree(isd);
> > + fwnode_handle_put(ep);
> > + }
>
> If ret == 0, then who calls 'fwnode_handle_put(ep);'?
>
> Am I missing something?
Good question. The reference is released when the notifier is eventually
cleaned up. That's not very intuitive. I'll see if I could address that in
the next version.
--
Sakari Ailus
[email protected]