Skip to contentSkip to conversation

Patch "ASoC: compress: Correct handling of copy callback" has been added to the 4.15-stable tree

PATCH [email protected] 1 participant 1 message Feb 15, 2018

Subsystems (4)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

ASoC: compress: Correct handling of copy callback

to the 4.15-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
asoc-compress-correct-handling-of-copy-callback.patch
and it can be found in the queue-4.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From 290df4d3ab192821b66857c05346b23056ee9545 Mon Sep 17 00:00:00 2001

From: Charles Keepax <[email protected]>
Date: Fri, 26 Jan 2018 13:08:43 +0000
Subject: ASoC: compress: Correct handling of copy callback

From: Charles Keepax <[email protected]>

commit 290df4d3ab192821b66857c05346b23056ee9545 upstream.

The soc_compr_copy callback is currently broken. Since the changes to move the compr_ops over to the component the return value is not correctly propagated, always returning zero on success rather than the number of bytes copied. This causes user-space to stall continuously reading as it does not believe it has received any data.

Furthermore, the changes to move the compr_ops over to the component iterate through the list of components and will call the copy callback for any that have compressed ops. There isn't currently any consensus on the mechanism to combine the results of multiple copy callbacks.

To fix this issue for now halt searching the component list when we locate a copy callback and return the result of that single callback. Additional work should probably be done to look at the other ops, tidy things up, and work out if we want to support multiple components on a single compressed, but this is the only fix required to get things working again.

Fixes 9e7e3738ab0e ("ASoC: snd_soc_component_driver has snd_compr_ops")
---
 sound/soc/soc-compress.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
sound/soc/soc-compress.c +4 -4
@@ -944,7 +944,7 @@ static int soc_compr_copy(struct snd_com
 	struct snd_soc_platform *platform = rtd->platform;
 	struct snd_soc_component *component;
 	struct snd_soc_rtdcom_list *rtdcom;
-	int ret = 0, __ret;
+	int ret = 0;
 
 	mutex_lock_nested(&rtd->pcm_mutex, rtd->pcm_subclass);
 
@@ -965,10 +965,10 @@ static int soc_compr_copy(struct snd_com
 		    !component->driver->compr_ops->copy)
 			continue;
 
-		__ret = component->driver->compr_ops->copy(cstream, buf, count);
-		if (__ret < 0)
-			ret = __ret;
+		ret = component->driver->compr_ops->copy(cstream, buf, count);
+		break;
 	}
+
 err:
 	mutex_unlock(&rtd->pcm_mutex);
 	return ret;

Patches currently in stable-queue which might be from [email protected] are

queue-4.15/asoc-compress-correct-handling-of-copy-callback.patch