Skip to contentSkip to conversation

ALSA: pcm: Return 0 when size < start_threshold in capture

PATCH Superseded Ricardo Biehl Pasquali 2 participants 4 messages Aug 22, 2018

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 ALSA: pcm: Return 0 when size < start_threshold in capture

In __snd_pcm_lib_xfer(), when capture, if state is PREPARED and size is less than start_threshold nothing can be done. As there is no error, 0 is returned.

---

version 2:
The code was not changed. Just resubmitting to follow the rules from Documentation/process/submitting-patches.rst.

pcm_lib.c renamed from pcm_lib.c.orig +9 -5
@@ -2125,7 +2125,7 @@ snd_pcm_sframes_t __snd_pcm_lib_xfer(str
 	pcm_transfer_f transfer;
 	bool nonblock;
 	bool is_playback;
-	int err;
+	int err = 0;
 
 	err = pcm_sanity_check(substream);
 	if (err < 0)
@@ -2173,11 +2173,15 @@ snd_pcm_sframes_t __snd_pcm_lib_xfer(str
 		goto _end_unlock;
 
 	if (!is_playback &&
-	    runtime->status->state == SNDRV_PCM_STATE_PREPARED &&
-	    size >= runtime->start_threshold) {
-		err = snd_pcm_start(substream);
-		if (err < 0)
+	    runtime->status->state == SNDRV_PCM_STATE_PREPARED) {
+		if (size >= runtime->start_threshold) {
+			err = snd_pcm_start(substream);
+			if (err < 0)
+				goto _end_unlock;
+		} else {
+			/* nothing to do */
 			goto _end_unlock;
+		}
 	}
 
 	runtime->twake = runtime->control->avail_min ? : 1;
#1 lore raw
Quoted 11 lines · Ricardo Biehl Pasquali

In __snd_pcm_lib_xfer(), when capture, if state is PREPARED and size is less than start_threshold nothing can be done. As there is no error, 0 is returned.

---

version 2:
The code was not changed. Just resubmitting to follow the rules from Documentation/process/submitting-patches.rst.

Almost good, but still not perfect, unfortunately :) The patch should be applicable onto the kernel tree as is with -p1 option, i.e. the diff should be like
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c

But never mind, I'll apply this manually at this time, just keep the above in mind for the next time.

Currently we're dealing with 4.19 merge, hence I'm going to queue to the branch for 4.20.

thanks,

Takashi

Quoted 33 lines
pcm_lib.c renamed from pcm_lib.c.orig +9 -5
@@ -2125,7 +2125,7 @@ snd_pcm_sframes_t __snd_pcm_lib_xfer(str
 	pcm_transfer_f transfer;
 	bool nonblock;
 	bool is_playback;
-	int err;
+	int err = 0;
 
 	err = pcm_sanity_check(substream);
 	if (err < 0)
@@ -2173,11 +2173,15 @@ snd_pcm_sframes_t __snd_pcm_lib_xfer(str
 		goto _end_unlock;
 
 	if (!is_playback &&
-	    runtime->status->state == SNDRV_PCM_STATE_PREPARED &&
-	    size >= runtime->start_threshold) {
-		err = snd_pcm_start(substream);
-		if (err < 0)
+	    runtime->status->state == SNDRV_PCM_STATE_PREPARED) {
+		if (size >= runtime->start_threshold) {
+			err = snd_pcm_start(substream);
+			if (err < 0)
+				goto _end_unlock;
+		} else {
+			/* nothing to do */
 			goto _end_unlock;
+		}
 	}
 
 	runtime->twake = runtime->control->avail_min ? : 1;
#2 lore raw
Quoted 8 lines · Takashi

Almost good, but still not perfect, unfortunately :) The patch should be applicable onto the kernel tree as is with -p1 option, i.e. the diff should be like
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c

But never mind, I'll apply this manually at this time, just keep the above in mind for the next time.

Ok, thank you!

The .orig thing is ok if I had used the full pathname?

diff does not generate a/ and b/ (at least with '-up' options). By the way, 'diff -up' is what submitting-patches document recommends when no git tree is available.

#3 lore raw
Quoted 8 lines · Ricardo Biehl Pasquali
Quoted 6 lines · Takashi

Almost good, but still not perfect, unfortunately :) The patch should be applicable onto the kernel tree as is with -p1 option, i.e. the diff should be like
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c

Quoted 6 lines
Quoted 2 lines

But never mind, I'll apply this manually at this time, just keep the above in mind for the next time.

Ok, thank you!

The .orig thing is ok if I had used the full pathname?

That's OK. The patch just needs to be simply applicable with -p1.

Takashi