From 7beb354f8560d8c3ce035af4013e035ac06196c2 Mon Sep 17 00:00:00 2001 From: Michael Zoran Date: Thu, 9 Mar 2017 21:08:53 -0800 Subject: [PATCH] staging: bcm2835-camera: Convert client_context field to a 32 bit handle The client_context field is passed around which is really just a pointer to a msg_context. A lookup table mechanism for msg_context was added previously, so convert this field to a handle as well. The firmware never interperates the client_context, just passed it back. Signed-off-by: Michael Zoran Signed-off-by: Greg Kroah-Hartman --- .../staging/vc04_services/bcm2835-camera/mmal-msg.h | 2 +- .../vc04_services/bcm2835-camera/mmal-vchiq.c | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/staging/vc04_services/bcm2835-camera/mmal-msg.h b/drivers/staging/vc04_services/bcm2835-camera/mmal-msg.h index 68e40cbab165..5d0de86f6c2b 100644 --- a/drivers/staging/vc04_services/bcm2835-camera/mmal-msg.h +++ b/drivers/staging/vc04_services/bcm2835-camera/mmal-msg.h @@ -250,7 +250,7 @@ struct mmal_driver_buffer { u32 magic; u32 component_handle; u32 port_handle; - void *client_context; + u32 client_context; }; /* buffer header */ diff --git a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c index c59b4cdb9489..c28fab51db88 100644 --- a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c +++ b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c @@ -532,7 +532,7 @@ buffer_from_host(struct vchiq_mmal_instance *instance, m.u.buffer_from_host.drvbuf.magic = MMAL_MAGIC; m.u.buffer_from_host.drvbuf.component_handle = port->component->handle; m.u.buffer_from_host.drvbuf.port_handle = port->handle; - m.u.buffer_from_host.drvbuf.client_context = msg_context; + m.u.buffer_from_host.drvbuf.client_context = msg_context->handle; /* buffer header */ m.u.buffer_from_host.buffer_header.cmd = 0; @@ -614,12 +614,20 @@ static void buffer_to_host_cb(struct vchiq_mmal_instance *instance, struct mmal_msg *msg, u32 msg_len) { struct mmal_msg_context *msg_context; + u32 handle; pr_debug("buffer_to_host_cb: instance:%p msg:%p msg_len:%d\n", instance, msg, msg_len); if (msg->u.buffer_from_host.drvbuf.magic == MMAL_MAGIC) { - msg_context = msg->u.buffer_from_host.drvbuf.client_context; + handle = msg->u.buffer_from_host.drvbuf.client_context; + msg_context = lookup_msg_context(instance, handle); + + if (!msg_context) { + pr_err("drvbuf.client_context(%u) is invalid\n", + handle); + return; + } } else { pr_err("MMAL_MSG_TYPE_BUFFER_TO_HOST with bad magic\n"); return; -- 2.30.2