[{"id":618,"web_url":"https://patchwork.libcamera.org/comment/618/","msgid":"<63200520-a833-3772-3bf1-3f00fb295e52@ideasonboard.com>","date":"2019-01-26T07:46:17","subject":"Re: [libcamera-devel] [PATCH v3] libcamera: media_device: Fallback\n\tto legacy ioctls on older kernels","submitter":{"id":4,"url":"https://patchwork.libcamera.org/api/people/4/","name":"Kieran Bingham","email":"kieran.bingham@ideasonboard.com"},"content":"Hi Laurent,\n\nThank you for looking into this issue,\n\nOn 25/01/2019 23:09, Laurent Pinchart wrote:\n> Prior to kernel v4.19, the MEDIA_IOC_G_TOPOLOGY ioctl didn't expose\n> entity flags. Fallback to calling MEDIA_IOC_ENUM_ENTITIES for each\n> entity to retrieve the flags in that case.\n> \n\nThis does indeed fix my issue.\n\nTested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\nIs a 'fixes' tag appropriate here? Perhaps not, because it's not so much\na bug in the original code, as a missing feature.\n\n\nReviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n\nPlease push this as soon as you're ready.\n\nThanks.\n\n\n> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> ---\n> Changes since v1:\n> \n> - Move MEDIA_V2_ENTITY_HAS_FLAGS() test to populateEntities()\n> - Rename fixupEntity() to fixupEntityFlag()\n> ---\n>  src/libcamera/include/media_device.h |  3 ++\n>  src/libcamera/media_device.cpp       | 41 ++++++++++++++++++++++++++--\n>  2 files changed, 41 insertions(+), 3 deletions(-)\n> \n> diff --git a/src/libcamera/include/media_device.h b/src/libcamera/include/media_device.h\n> index 27a2b46a4392..9f038093b2b2 100644\n> --- a/src/libcamera/include/media_device.h\n> +++ b/src/libcamera/include/media_device.h\n> @@ -56,6 +56,8 @@ private:\n>  \tstd::string driver_;\n>  \tstd::string deviceNode_;\n>  \tstd::string model_;\n> +\tunsigned int version_;\n> +\n>  \tint fd_;\n>  \tbool valid_;\n>  \tbool acquired_;\n> @@ -72,6 +74,7 @@ private:\n>  \tbool populateEntities(const struct media_v2_topology &topology);\n>  \tbool populatePads(const struct media_v2_topology &topology);\n>  \tbool populateLinks(const struct media_v2_topology &topology);\n> +\tvoid fixupEntityFlags(struct media_v2_entity *entity);\n>  \n>  \tfriend int MediaLink::setEnabled(bool enable);\n>  \tint setupLink(const MediaLink *link, unsigned int flags);\n> diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp\n> index be81bd8c4c23..a4995b996601 100644\n> --- a/src/libcamera/media_device.cpp\n> +++ b/src/libcamera/media_device.cpp\n> @@ -167,6 +167,7 @@ int MediaDevice::open()\n>  \n>  \tdriver_ = info.driver;\n>  \tmodel_ = info.model;\n> +\tversion_ = info.media_version;\n>  \n>  \treturn 0;\n>  }\n> @@ -553,20 +554,29 @@ bool MediaDevice::populateEntities(const struct media_v2_topology &topology)\n>  \t\t\t\t\t\t(topology.ptr_entities);\n>  \n>  \tfor (unsigned int i = 0; i < topology.num_entities; ++i) {\n> +\t\tstruct media_v2_entity *ent = &mediaEntities[i];\n> +\n> +\t\t/*\n> +\t\t * The media_v2_entity structure was missing the flag field before\n> +\t\t * v4.19.\n> +\t\t */\n> +\t\tif (!MEDIA_V2_ENTITY_HAS_FLAGS(version_))\n> +\t\t\tfixupEntityFlags(ent);\n> +\n>  \t\t/*\n>  \t\t * Find the interface linked to this entity to get the device\n>  \t\t * node major and minor numbers.\n>  \t\t */\n>  \t\tstruct media_v2_interface *iface =\n> -\t\t\tfindInterface(topology, mediaEntities[i].id);\n> +\t\t\tfindInterface(topology, ent->id);\n>  \n>  \t\tMediaEntity *entity;\n>  \t\tif (iface)\n> -\t\t\tentity = new MediaEntity(this, &mediaEntities[i],\n> +\t\t\tentity = new MediaEntity(this, ent,\n>  \t\t\t\t\t\t iface->devnode.major,\n>  \t\t\t\t\t\t iface->devnode.minor);\n>  \t\telse\n> -\t\t\tentity = new MediaEntity(this, &mediaEntities[i]);\n> +\t\t\tentity = new MediaEntity(this, ent);\n>  \n>  \t\tif (!addObject(entity)) {\n>  \t\t\tdelete entity;\n> @@ -657,6 +667,31 @@ bool MediaDevice::populateLinks(const struct media_v2_topology &topology)\n>  \treturn true;\n>  }\n>  \n> +/**\n> + * \\brief Fixup entity flags using legacy API\n\n(Very) minor nit :\n\ns/using legacy/using the legacy/\n\n> + * \\param[in] entity The entity\n> + *\n> + * This function is used as a fallback to query entity flags using the legacy\n> + * MEDIA_IOC_ENUM_ENTITIES ioctl when running on a kernel version that doesn't\n> + * provide them through the MEDIA_IOC_G_TOPOLOGY ioctl.\n> + */\n> +void MediaDevice::fixupEntityFlags(struct media_v2_entity *entity)\n> +{\n> +\tstruct media_entity_desc desc = {};\n> +\tdesc.id = entity->id;\n> +\n> +\tint ret = ioctl(fd_, MEDIA_IOC_ENUM_ENTITIES, &desc);\n> +\tif (ret < 0) {\n> +\t\tret = -errno;\n> +\t\tLOG(MediaDevice, Debug)\n> +\t\t\t<< \"Failed to retrieve information for entity \"\n> +\t\t\t<< entity->id << \": \" << strerror(-ret);\n> +\t\treturn;\n> +\t}\n> +\n> +\tentity->flags = desc.flags;\n> +}\n> +\n>  /**\n>   * \\brief Apply \\a flags to a link between two pads\n>   * \\param link The link to apply flags to\n>","headers":{"Return-Path":"<kieran.bingham@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 5A31E60C6A\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 26 Jan 2019 08:46:20 +0100 (CET)","from [192.168.0.21]\n\t(cpc89242-aztw30-2-0-cust488.18-1.cable.virginm.net [86.31.129.233])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 930AB242;\n\tSat, 26 Jan 2019 08:46:19 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1548488779;\n\tbh=8TPL9yH1OZv8c1e9KQH756SrFSYKbWwu/iP7NBtPQno=;\n\th=Reply-To:Subject:To:References:From:Date:In-Reply-To:From;\n\tb=ivkOA8Hq1p4QZDztib9WjporT5nuc7WdnEF0ywEmMfysPKp9KUvG7UZktz8vEr+sA\n\tAB9xQxj504546TvDQezlqfz3SpsyunU3wloKhFbN4MqtA8ZcALVIxsO+J8pFM2V3i8\n\tRLylk94oVfInWeaBmd7SeP4DM5BvZRvba6DXyrz0=","Reply-To":"kieran.bingham@ideasonboard.com","To":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>,\n\tlibcamera-devel@lists.libcamera.org","References":"<20190125230942.17521-1-laurent.pinchart@ideasonboard.com>","From":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Openpgp":"preference=signencrypt","Autocrypt":"addr=kieran.bingham@ideasonboard.com; keydata=\n\t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\n\tsbsRB8KNNvVXBOVNwko86rQqF9drZuw=","Organization":"Ideas on Board","Message-ID":"<63200520-a833-3772-3bf1-3f00fb295e52@ideasonboard.com>","Date":"Sat, 26 Jan 2019 07:46:17 +0000","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101\n\tThunderbird/60.2.1","MIME-Version":"1.0","In-Reply-To":"<20190125230942.17521-1-laurent.pinchart@ideasonboard.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-GB","Content-Transfer-Encoding":"8bit","Subject":"Re: [libcamera-devel] [PATCH v3] libcamera: media_device: Fallback\n\tto legacy ioctls on older kernels","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Sat, 26 Jan 2019 07:46:20 -0000"}},{"id":619,"web_url":"https://patchwork.libcamera.org/comment/619/","msgid":"<20190126085502.GA4596@pendragon.ideasonboard.com>","date":"2019-01-26T08:55:02","subject":"Re: [libcamera-devel] [PATCH v3] libcamera: media_device: Fallback\n\tto legacy ioctls on older kernels","submitter":{"id":2,"url":"https://patchwork.libcamera.org/api/people/2/","name":"Laurent Pinchart","email":"laurent.pinchart@ideasonboard.com"},"content":"Hi Kieran,\n\nOn Sat, Jan 26, 2019 at 07:46:17AM +0000, Kieran Bingham wrote:\n> On 25/01/2019 23:09, Laurent Pinchart wrote:\n> > Prior to kernel v4.19, the MEDIA_IOC_G_TOPOLOGY ioctl didn't expose\n> > entity flags. Fallback to calling MEDIA_IOC_ENUM_ENTITIES for each\n> > entity to retrieve the flags in that case.\n> > \n> \n> This does indeed fix my issue.\n> \n> Tested-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> \n> Is a 'fixes' tag appropriate here? Perhaps not, because it's not so much\n> a bug in the original code, as a missing feature.\n\nI think it makes sense to add a fixes tag pointing to the patch that\nbroke the test. Done, addressed the issue pointed out below, and pushed.\n\n> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>\n> \n> Please push this as soon as you're ready.\n> \n> > Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n> > Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>\n> > ---\n> > Changes since v1:\n> > \n> > - Move MEDIA_V2_ENTITY_HAS_FLAGS() test to populateEntities()\n> > - Rename fixupEntity() to fixupEntityFlag()\n> > ---\n> >  src/libcamera/include/media_device.h |  3 ++\n> >  src/libcamera/media_device.cpp       | 41 ++++++++++++++++++++++++++--\n> >  2 files changed, 41 insertions(+), 3 deletions(-)\n> > \n> > diff --git a/src/libcamera/include/media_device.h b/src/libcamera/include/media_device.h\n> > index 27a2b46a4392..9f038093b2b2 100644\n> > --- a/src/libcamera/include/media_device.h\n> > +++ b/src/libcamera/include/media_device.h\n> > @@ -56,6 +56,8 @@ private:\n> >  \tstd::string driver_;\n> >  \tstd::string deviceNode_;\n> >  \tstd::string model_;\n> > +\tunsigned int version_;\n> > +\n> >  \tint fd_;\n> >  \tbool valid_;\n> >  \tbool acquired_;\n> > @@ -72,6 +74,7 @@ private:\n> >  \tbool populateEntities(const struct media_v2_topology &topology);\n> >  \tbool populatePads(const struct media_v2_topology &topology);\n> >  \tbool populateLinks(const struct media_v2_topology &topology);\n> > +\tvoid fixupEntityFlags(struct media_v2_entity *entity);\n> >  \n> >  \tfriend int MediaLink::setEnabled(bool enable);\n> >  \tint setupLink(const MediaLink *link, unsigned int flags);\n> > diff --git a/src/libcamera/media_device.cpp b/src/libcamera/media_device.cpp\n> > index be81bd8c4c23..a4995b996601 100644\n> > --- a/src/libcamera/media_device.cpp\n> > +++ b/src/libcamera/media_device.cpp\n> > @@ -167,6 +167,7 @@ int MediaDevice::open()\n> >  \n> >  \tdriver_ = info.driver;\n> >  \tmodel_ = info.model;\n> > +\tversion_ = info.media_version;\n> >  \n> >  \treturn 0;\n> >  }\n> > @@ -553,20 +554,29 @@ bool MediaDevice::populateEntities(const struct media_v2_topology &topology)\n> >  \t\t\t\t\t\t(topology.ptr_entities);\n> >  \n> >  \tfor (unsigned int i = 0; i < topology.num_entities; ++i) {\n> > +\t\tstruct media_v2_entity *ent = &mediaEntities[i];\n> > +\n> > +\t\t/*\n> > +\t\t * The media_v2_entity structure was missing the flag field before\n> > +\t\t * v4.19.\n> > +\t\t */\n> > +\t\tif (!MEDIA_V2_ENTITY_HAS_FLAGS(version_))\n> > +\t\t\tfixupEntityFlags(ent);\n> > +\n> >  \t\t/*\n> >  \t\t * Find the interface linked to this entity to get the device\n> >  \t\t * node major and minor numbers.\n> >  \t\t */\n> >  \t\tstruct media_v2_interface *iface =\n> > -\t\t\tfindInterface(topology, mediaEntities[i].id);\n> > +\t\t\tfindInterface(topology, ent->id);\n> >  \n> >  \t\tMediaEntity *entity;\n> >  \t\tif (iface)\n> > -\t\t\tentity = new MediaEntity(this, &mediaEntities[i],\n> > +\t\t\tentity = new MediaEntity(this, ent,\n> >  \t\t\t\t\t\t iface->devnode.major,\n> >  \t\t\t\t\t\t iface->devnode.minor);\n> >  \t\telse\n> > -\t\t\tentity = new MediaEntity(this, &mediaEntities[i]);\n> > +\t\t\tentity = new MediaEntity(this, ent);\n> >  \n> >  \t\tif (!addObject(entity)) {\n> >  \t\t\tdelete entity;\n> > @@ -657,6 +667,31 @@ bool MediaDevice::populateLinks(const struct media_v2_topology &topology)\n> >  \treturn true;\n> >  }\n> >  \n> > +/**\n> > + * \\brief Fixup entity flags using legacy API\n> \n> (Very) minor nit :\n> \n> s/using legacy/using the legacy/\n> \n> > + * \\param[in] entity The entity\n> > + *\n> > + * This function is used as a fallback to query entity flags using the legacy\n> > + * MEDIA_IOC_ENUM_ENTITIES ioctl when running on a kernel version that doesn't\n> > + * provide them through the MEDIA_IOC_G_TOPOLOGY ioctl.\n> > + */\n> > +void MediaDevice::fixupEntityFlags(struct media_v2_entity *entity)\n> > +{\n> > +\tstruct media_entity_desc desc = {};\n> > +\tdesc.id = entity->id;\n> > +\n> > +\tint ret = ioctl(fd_, MEDIA_IOC_ENUM_ENTITIES, &desc);\n> > +\tif (ret < 0) {\n> > +\t\tret = -errno;\n> > +\t\tLOG(MediaDevice, Debug)\n> > +\t\t\t<< \"Failed to retrieve information for entity \"\n> > +\t\t\t<< entity->id << \": \" << strerror(-ret);\n> > +\t\treturn;\n> > +\t}\n> > +\n> > +\tentity->flags = desc.flags;\n> > +}\n> > +\n> >  /**\n> >   * \\brief Apply \\a flags to a link between two pads\n> >   * \\param link The link to apply flags to\n> >","headers":{"Return-Path":"<laurent.pinchart@ideasonboard.com>","Received":["from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id B736260C65\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tSat, 26 Jan 2019 09:55:11 +0100 (CET)","from pendragon.ideasonboard.com (unknown [62.119.166.9])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 299BA242;\n\tSat, 26 Jan 2019 09:55:09 +0100 (CET)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1548492911;\n\tbh=K1qxv5NKcJGFJF8J9V1tO/i1zXbVGeHyMcXVddCi5zs=;\n\th=Date:From:To:Cc:Subject:References:In-Reply-To:From;\n\tb=qiU3ccB+87S37WMUyXK/J9cJtARQtv1s8z9Mh40PRYlHfkRFFi0TK3CYoIweeZjsn\n\t+TEKSQFQdDPKTAkekYYa/t9V9N7q+ILtIRbZF02wvT22hQEgd/AcBHvR1LO3U5RWsm\n\t7nT/Lbv7AfVrmL5OgYNXVg2N7RNRPDJ7ncUAlo3g=","Date":"Sat, 26 Jan 2019 10:55:02 +0200","From":"Laurent Pinchart <laurent.pinchart@ideasonboard.com>","To":"Kieran Bingham <kieran.bingham@ideasonboard.com>","Cc":"libcamera-devel@lists.libcamera.org","Message-ID":"<20190126085502.GA4596@pendragon.ideasonboard.com>","References":"<20190125230942.17521-1-laurent.pinchart@ideasonboard.com>\n\t<63200520-a833-3772-3bf1-3f00fb295e52@ideasonboard.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=utf-8","Content-Disposition":"inline","Content-Transfer-Encoding":"8bit","In-Reply-To":"<63200520-a833-3772-3bf1-3f00fb295e52@ideasonboard.com>","User-Agent":"Mutt/1.10.1 (2018-07-13)","Subject":"Re: [libcamera-devel] [PATCH v3] libcamera: media_device: Fallback\n\tto legacy ioctls on older kernels","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","X-List-Received-Date":"Sat, 26 Jan 2019 08:55:11 -0000"}}]