Commit b74a8932 authored by Nicolas Saenz Julienne's avatar Nicolas Saenz Julienne Committed by Greg Kroah-Hartman
Browse files

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: default avatarNicolas Saenz Julienne <nsaenzjulienne@suse.de>
Link: https://lore.kernel.org/r/20200629150945.10720-14-nsaenzjulienne@suse.de


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5a8e22e3
Loading
Loading
Loading
Loading
+14 −11
Original line number Diff line number Diff line
@@ -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