Message ID | 20240403-v4l2-compliance-streams-fixes-v2-1-be9b338dc204@ideasonboard.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | v4l2-compliance streams fixes | expand |
On 03.04.2024 12:15, Tomi Valkeinen wrote: > At the moment we do: > > routing.routes = (__u64)&routes; > > On 32-bit platforms the 32-bit address will be sign-extended, possibly > resulting setting the address to, e.g., 0xff000000 -> 0xffffffffff000000. > > Fix this by converting the address to uintptr_t. > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> > --- > utils/v4l2-compliance/v4l2-compliance.cpp | 4 ++-- > utils/v4l2-compliance/v4l2-test-subdevs.cpp | 2 +- > 2 files changed, 3 insertions(+), 3 deletions(-) > > diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp b/utils/v4l2-compliance/v4l2-compliance.cpp > index 2cf97909..fd7e7d76 100644 > --- a/utils/v4l2-compliance/v4l2-compliance.cpp > +++ b/utils/v4l2-compliance/v4l2-compliance.cpp > @@ -1274,7 +1274,7 @@ void testNode(struct node &node, struct node &node_m2m_cap, struct node &expbuf_ > which <= V4L2_SUBDEV_FORMAT_ACTIVE; which++) { > > sd_routing[which].which = which; > - sd_routing[which].routes = (__u64)sd_routes[which]; > + sd_routing[which].routes = (uintptr_t)sd_routes[which]; > sd_routing[which].num_routes = NUM_ROUTES_MAX; > > ret = doioctl(&node, VIDIOC_SUBDEV_G_ROUTING, &sd_routing[which]); > @@ -1305,7 +1305,7 @@ void testNode(struct node &node, struct node &node_m2m_cap, struct node &expbuf_ > routes = sd_routes[which]; > } else { > dummy_routing.num_routes = 1; > - dummy_routing.routes = (__u64)&dummy_routes; > + dummy_routing.routes = (uintptr_t)&dummy_routes; > dummy_routes[0].source_pad = pad; > dummy_routes[0].source_stream = 0; > dummy_routes[0].sink_pad = pad; > diff --git a/utils/v4l2-compliance/v4l2-test-subdevs.cpp b/utils/v4l2-compliance/v4l2-test-subdevs.cpp > index ebca1b94..560efb70 100644 > --- a/utils/v4l2-compliance/v4l2-test-subdevs.cpp > +++ b/utils/v4l2-compliance/v4l2-test-subdevs.cpp > @@ -586,7 +586,7 @@ int testSubDevRouting(struct node *node, unsigned which) > int ret; > > routing.which = which; > - routing.routes = (__u64)&routes; > + routing.routes = (uintptr_t)&routes; > routing.num_routes = 0; > memset(routing.reserved, 0xff, sizeof(routing.reserved)); > >
On Wed, Apr 03, 2024 at 12:27:40PM +0200, Hans Verkuil wrote: > On 03.04.2024 12:15, Tomi Valkeinen wrote: > > At the moment we do: > > > > routing.routes = (__u64)&routes; > > > > On 32-bit platforms the 32-bit address will be sign-extended, possibly > > resulting setting the address to, e.g., 0xff000000 -> 0xffffffffff000000. > > > > Fix this by converting the address to uintptr_t. > > > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> > > Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > > --- > > utils/v4l2-compliance/v4l2-compliance.cpp | 4 ++-- > > utils/v4l2-compliance/v4l2-test-subdevs.cpp | 2 +- > > 2 files changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp b/utils/v4l2-compliance/v4l2-compliance.cpp > > index 2cf97909..fd7e7d76 100644 > > --- a/utils/v4l2-compliance/v4l2-compliance.cpp > > +++ b/utils/v4l2-compliance/v4l2-compliance.cpp > > @@ -1274,7 +1274,7 @@ void testNode(struct node &node, struct node &node_m2m_cap, struct node &expbuf_ > > which <= V4L2_SUBDEV_FORMAT_ACTIVE; which++) { > > > > sd_routing[which].which = which; > > - sd_routing[which].routes = (__u64)sd_routes[which]; > > + sd_routing[which].routes = (uintptr_t)sd_routes[which]; > > sd_routing[which].num_routes = NUM_ROUTES_MAX; > > > > ret = doioctl(&node, VIDIOC_SUBDEV_G_ROUTING, &sd_routing[which]); > > @@ -1305,7 +1305,7 @@ void testNode(struct node &node, struct node &node_m2m_cap, struct node &expbuf_ > > routes = sd_routes[which]; > > } else { > > dummy_routing.num_routes = 1; > > - dummy_routing.routes = (__u64)&dummy_routes; > > + dummy_routing.routes = (uintptr_t)&dummy_routes; > > dummy_routes[0].source_pad = pad; > > dummy_routes[0].source_stream = 0; > > dummy_routes[0].sink_pad = pad; > > diff --git a/utils/v4l2-compliance/v4l2-test-subdevs.cpp b/utils/v4l2-compliance/v4l2-test-subdevs.cpp > > index ebca1b94..560efb70 100644 > > --- a/utils/v4l2-compliance/v4l2-test-subdevs.cpp > > +++ b/utils/v4l2-compliance/v4l2-test-subdevs.cpp > > @@ -586,7 +586,7 @@ int testSubDevRouting(struct node *node, unsigned which) > > int ret; > > > > routing.which = which; > > - routing.routes = (__u64)&routes; > > + routing.routes = (uintptr_t)&routes; > > routing.num_routes = 0; > > memset(routing.reserved, 0xff, sizeof(routing.reserved)); > >
diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp b/utils/v4l2-compliance/v4l2-compliance.cpp index 2cf97909..fd7e7d76 100644 --- a/utils/v4l2-compliance/v4l2-compliance.cpp +++ b/utils/v4l2-compliance/v4l2-compliance.cpp @@ -1274,7 +1274,7 @@ void testNode(struct node &node, struct node &node_m2m_cap, struct node &expbuf_ which <= V4L2_SUBDEV_FORMAT_ACTIVE; which++) { sd_routing[which].which = which; - sd_routing[which].routes = (__u64)sd_routes[which]; + sd_routing[which].routes = (uintptr_t)sd_routes[which]; sd_routing[which].num_routes = NUM_ROUTES_MAX; ret = doioctl(&node, VIDIOC_SUBDEV_G_ROUTING, &sd_routing[which]); @@ -1305,7 +1305,7 @@ void testNode(struct node &node, struct node &node_m2m_cap, struct node &expbuf_ routes = sd_routes[which]; } else { dummy_routing.num_routes = 1; - dummy_routing.routes = (__u64)&dummy_routes; + dummy_routing.routes = (uintptr_t)&dummy_routes; dummy_routes[0].source_pad = pad; dummy_routes[0].source_stream = 0; dummy_routes[0].sink_pad = pad; diff --git a/utils/v4l2-compliance/v4l2-test-subdevs.cpp b/utils/v4l2-compliance/v4l2-test-subdevs.cpp index ebca1b94..560efb70 100644 --- a/utils/v4l2-compliance/v4l2-test-subdevs.cpp +++ b/utils/v4l2-compliance/v4l2-test-subdevs.cpp @@ -586,7 +586,7 @@ int testSubDevRouting(struct node *node, unsigned which) int ret; routing.which = which; - routing.routes = (__u64)&routes; + routing.routes = (uintptr_t)&routes; routing.num_routes = 0; memset(routing.reserved, 0xff, sizeof(routing.reserved));
At the moment we do: routing.routes = (__u64)&routes; On 32-bit platforms the 32-bit address will be sign-extended, possibly resulting setting the address to, e.g., 0xff000000 -> 0xffffffffff000000. Fix this by converting the address to uintptr_t. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> --- utils/v4l2-compliance/v4l2-compliance.cpp | 4 ++-- utils/v4l2-compliance/v4l2-test-subdevs.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-)