diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-0182-staging-mmal-vchiq-Always-return-the-param-size-from.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.4/950-0182-staging-mmal-vchiq-Always-return-the-param-size-from.patch | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-0182-staging-mmal-vchiq-Always-return-the-param-size-from.patch b/target/linux/bcm27xx/patches-5.4/950-0182-staging-mmal-vchiq-Always-return-the-param-size-from.patch new file mode 100644 index 0000000000..a8c8aebe1c --- /dev/null +++ b/target/linux/bcm27xx/patches-5.4/950-0182-staging-mmal-vchiq-Always-return-the-param-size-from.patch @@ -0,0 +1,38 @@ +From 2e2b65c1c67b7a918fc381c25f8d5e3f2be2295c Mon Sep 17 00:00:00 2001 +From: Dave Stevenson <dave.stevenson@raspberrypi.org> +Date: Wed, 13 Feb 2019 12:36:56 +0000 +Subject: [PATCH] staging: mmal-vchiq: Always return the param size + from param_get + +mmal-vchiq is a reimplementation of the userland library for MMAL. +When getting a parameter, the client provides the storage and +the size of the storage. The VPU then returns the size of the +parameter that it wished to return, and as much as possible of +that parameter is returned to the client. + +The implementation previously only returned the size provided +by the VPU should it exceed the buffer size. So for parameters +such as the supported encodings list the client had no idea +how much of the provided storage had been populated. + +Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org> +--- + drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +--- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c ++++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c +@@ -1412,11 +1412,12 @@ static int port_parameter_get(struct vch + */ + memcpy(value, &rmsg->u.port_parameter_get_reply.value, + *value_size); +- *value_size = rmsg->u.port_parameter_get_reply.size; + } else { + memcpy(value, &rmsg->u.port_parameter_get_reply.value, + rmsg->u.port_parameter_get_reply.size); + } ++ /* Always report the size of the returned parameter to the caller */ ++ *value_size = rmsg->u.port_parameter_get_reply.size; + + pr_debug("%s:result:%d component:0x%x port:%d parameter:%d\n", __func__, + ret, port->component->handle, port->handle, parameter_id); |