On 03/04/2024 10:16, 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 first converting the address to uintptr_t. > > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx> > --- > 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..82615c17 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 = (__u64)(uintptr_t)sd_routes[which]; You can drop the (__u64) cast. Same for the places below. The cast to uintptr_t is sufficient and indeed required. Regards, Hans > 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 = (__u64)(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..fe7a9e1d 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 = (__u64)(uintptr_t)&routes; > routing.num_routes = 0; > memset(routing.reserved, 0xff, sizeof(routing.reserved)); > >