[PATCH 1/5] bcm2835-camera: Correct port_parameter_get return value
Michael Zoran
mzoran at crowfest.net
Tue Mar 21 01:20:37 PDT 2017
On Tue, 2017-03-21 at 08:27 +0100, Greg KH wrote:
> On Fri, Mar 17, 2017 at 02:56:42PM -0700, Michael Zoran wrote:
> > From: Dave Stevenson <dave.stevenson at raspberrypi.org>
> >
> > The API for port_parameter_get() requires that the
> > filled length is returned, or if insufficient space
> > that the required space is returned.
> >
> > Signed-off-by: Dave Stevenson <dave.stevenson at raspberrypi.org>
> >
> > Changed path:
> > From: drivers/media/platform/bcm2835/mmal-vchiq.c
> > To: drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
> >
> > Signed-off-by: Michael Zoran <mzoran at crowfest.net>
> > ---
> > .../vc04_services/bcm2835-camera/mmal-vchiq.c | 20
> > ++++++++++++++++----
> > 1 file changed, 16 insertions(+), 4 deletions(-)
> >
> > diff --git a/drivers/staging/vc04_services/bcm2835-camera/mmal-
> > vchiq.c b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
> > index fc1076db0f82..4f4499dfe0c3 100644
> > --- a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
> > +++ b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
> > @@ -1422,6 +1422,7 @@ static int port_parameter_get(struct
> > vchiq_mmal_instance *instance,
> > struct mmal_msg m;
> > struct mmal_msg *rmsg;
> > VCHI_HELD_MSG_T rmsg_handle;
> > + u32 reply_size;
> >
> > m.h.type = MMAL_MSG_TYPE_PORT_PARAMETER_GET;
> >
> > @@ -1445,19 +1446,30 @@ static int port_parameter_get(struct
> > vchiq_mmal_instance *instance,
> > }
> >
> > ret = -rmsg->u.port_parameter_get_reply.status;
> > - if (ret || (rmsg->u.port_parameter_get_reply.size >
> > *value_size)) {
> > + /*
> > + * port_parameter_get_reply.size includes the header,
> > + * whilst *value_size doesn't.
> > + */
> > + reply_size = rmsg->u.port_parameter_get_reply.size - (2 *
> > sizeof(u32));
> > +
> > + if (ret || (reply_size > *value_size)) {
> > /* Copy only as much as we have space for
> > * but report true size of parameter
> > */
> > 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);
> > + reply_size);
> > +
> > + /*
> > + * Return amount of data copied if big enough,
> > + * or wanted if not big enough.
> > + */
> > + *value_size = reply_size;
> >
> > pr_debug("%s:result:%d component:0x%x port:%d
> > parameter:%d\n", __func__,
> > - ret, port->component->handle, port->handle,
> > parameter_id);
> > + ret, port->component->handle, port->handle,
> > parameter_id);
>
> Why did you change this last line? It was previously correct.
>
> thanks,
>
> greg k-h
Hi Greg,
No I didn't, it should be an exact copy of the original with the the
paths changed.
I'm not happen with this code block in general. I think this
particular block needs to be written. I'll see what I can do.
More information about the linux-rpi-kernel
mailing list