[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200623164235.29566-17-nsaenzjulienne@suse.de>
Date: Tue, 23 Jun 2020 18:42:02 +0200
From: Nicolas Saenz Julienne <nsaenzjulienne@...e.de>
To: gregkh@...uxfoundation.org
Cc: kernel-list@...pberrypi.com, laurent.pinchart@...asonboard.com,
linux-rpi-kernel@...ts.infradead.org,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
devel@...verdev.osuosl.org,
Nicolas Saenz Julienne <nsaenzjulienne@...e.de>
Subject: [PATCH 16/50] staging: vc04_services: bcm2835-audio: Use vchi_msg_hold()
vchi_msg_dequeue() provides the same functionality as vchi_msg_hold()
except it copies the message data as opposed to the later which provides
the data in place.
The copying is done on a local variable, so there is no need to keep the
message out the function's bounds, so use vchi_msg_hold() instead.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@...e.de>
---
.../bcm2835-audio/bcm2835-vchiq.c | 25 +++++++++++--------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
index 62eef233275f..5018b5baa009 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
@@ -94,31 +94,34 @@ static void audio_vchi_callback(void *param,
void *msg_handle)
{
struct bcm2835_audio_instance *instance = param;
- struct vc_audio_msg m;
- int msg_len;
+ struct vchi_held_msg handle;
+ struct vc_audio_msg *m;
+ unsigned size;
int status;
if (reason != VCHI_CALLBACK_MSG_AVAILABLE)
return;
- status = vchi_msg_dequeue(instance->service,
- &m, sizeof(m), &msg_len, VCHI_FLAGS_NONE);
+ status = vchi_msg_hold(instance->service, (void **)&m, &size,
+ VCHI_FLAGS_NONE, &handle);
if (status)
return;
- if (m.type == VC_AUDIO_MSG_TYPE_RESULT) {
- instance->result = m.result.success;
+ if (m->type == VC_AUDIO_MSG_TYPE_RESULT) {
+ instance->result = m->result.success;
complete(&instance->msg_avail_comp);
- } else if (m.type == VC_AUDIO_MSG_TYPE_COMPLETE) {
- if (m.complete.cookie1 != VC_AUDIO_WRITE_COOKIE1 ||
- m.complete.cookie2 != VC_AUDIO_WRITE_COOKIE2)
+ } else if (m->type == VC_AUDIO_MSG_TYPE_COMPLETE) {
+ if (m->complete.cookie1 != VC_AUDIO_WRITE_COOKIE1 ||
+ m->complete.cookie2 != VC_AUDIO_WRITE_COOKIE2)
dev_err(instance->dev, "invalid cookie\n");
else
bcm2835_playback_fifo(instance->alsa_stream,
- m.complete.count);
+ m->complete.count);
} else {
- dev_err(instance->dev, "unexpected callback type=%d\n", m.type);
+ dev_err(instance->dev, "unexpected callback type=%d\n", m->type);
}
+
+ vchi_held_msg_release(&handle);
}
static int
--
2.27.0
Powered by blists - more mailing lists