From 604c4859efb745d6575a0abefe6e177ff93aeeb8 Mon Sep 17 00:00:00 2001 From: Adam Miartus Date: Fri, 21 Feb 2020 18:59:51 +0100 Subject: [PATCH] QTISA-183 alsa: remove recovery from alsa_driver_wait upper layer will be responsible for handling recovery Change-Id: I507df2976ae569b4953a16e6e334ae5f9c78b59f Signed-off-by: Adam Miartus (cherry picked from commit aff8dd6e215df7023918dc47264da70b3252ad91) Signed-off-by: Timo Wischer --- linux/alsa/alsa_driver.c | 41 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/linux/alsa/alsa_driver.c b/linux/alsa/alsa_driver.c index 69f41696..93703465 100644 --- a/linux/alsa/alsa_driver.c +++ b/linux/alsa/alsa_driver.c @@ -56,8 +56,6 @@ char* strcasestr(const char* haystack, const char* needle); /* Delay (in process calls) before jackd will report an xrun */ #define XRUN_REPORT_DELAY 0 -/* Max re-try count for Alsa poll timeout handling */ -#define MAX_RETRY_COUNT 5 #ifdef __QNXNTO__ @@ -2108,7 +2106,6 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t snd_pcm_sframes_t avail = 0; snd_pcm_sframes_t capture_avail = 0; snd_pcm_sframes_t playback_avail = 0; - int retry_cnt = 0; jack_time_t poll_enter; jack_time_t poll_ret = 0; @@ -2177,7 +2174,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t /* In case of xrun -EPIPE is returned perform xrun recovery*/ if (pfd_cap_count[i] == -EPIPE) { jack_error("poll descriptors xrun C: %s pfd_cap_count[%d]=%d", device->capture_name, i, pfd_cap_count[i]); - goto xrun; + *status = ALSA_DRIVER_WAIT_XRUN; + return 0; } /* for any other error return negative wait status to caller */ jack_error("poll descriptors error C: %s pfd_cap_count[%d]=%d", device->capture_name, i, pfd_cap_count[i]); @@ -2212,7 +2210,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t /* In case of xrun -EPIPE is returned perform xrun recovery*/ if (pfd_cap_count[i] == -EPIPE) { jack_error("poll descriptors xrun P: %s pfd_cap_count[%d]=%d", device->playback_name, i, pfd_play_count[i]); - goto xrun; + *status = ALSA_DRIVER_WAIT_XRUN; + return 0; } /* for any other error return negative wait status to caller */ jack_error("poll descriptors error P: %s pfd_cap_count[%d]=%d", device->playback_name, i, pfd_play_count[i]); @@ -2272,18 +2271,9 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t poll_ret = jack_get_microseconds (); if (poll_result == 0) { - retry_cnt++; - if(retry_cnt > MAX_RETRY_COUNT) { - jack_error ("ALSA: poll time out, polled for %" PRIu64 - " usecs, Reached max retry cnt = %d, Exiting", - poll_ret - poll_enter, MAX_RETRY_COUNT); - *status = ALSA_DRIVER_WAIT_ERROR; - return 0; - } - jack_error ("ALSA: poll time out, polled for %" PRIu64 - " usecs, Retrying with a recovery, retry cnt = %d", - poll_ret - poll_enter, retry_cnt); + " usecs, Retrying with a recovery", + poll_ret - poll_enter); for (int i = 0; i < driver->devices_count; ++i) { if (driver->devices[i].capture_handle && i < driver->devices_c_count && cap_revents[i] == 0) { jack_log("device C: %s poll was requested", driver->devices[i].capture_name); @@ -2292,7 +2282,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t jack_log("device P: %s poll was requested", driver->devices[i].playback_name); } } - goto xrun; + *status = ALSA_DRIVER_WAIT_XRUN; + return 0; } // JACK2 @@ -2353,7 +2344,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t if (collect_revs & POLLERR) { /* optimization, no point in polling more if we already have xrun on one device */ jack_error ("xrun C: '%s'", device->capture_name); - goto xrun; + *status = ALSA_DRIVER_WAIT_XRUN; + return 0; } if (collect_revs & POLLIN) { } @@ -2391,7 +2383,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t if (collect_revs & POLLERR) { /* optimization, no point in polling more if we already have xrun on one device */ jack_error ("xrun P: '%s'", device->playback_name); - goto xrun; + *status = ALSA_DRIVER_WAIT_XRUN; + return 0; } if (collect_revs & POLLNVAL) { jack_error ("ALSA: playback device disconnected"); @@ -2429,7 +2422,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t if ((avail = alsa_driver_avail (driver, device->capture_handle, SND_PCM_STREAM_CAPTURE)) < 0) { if (avail == -EPIPE) { jack_error ("ALSA: avail_update xrun on capture dev '%s'", device->capture_name); - goto xrun; + *status = ALSA_DRIVER_WAIT_XRUN; + return 0; } else { jack_error ("unknown ALSA avail_update return value (%u)", capture_avail); } @@ -2454,7 +2448,8 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t if ((avail = alsa_driver_avail (driver, device->playback_handle, SND_PCM_STREAM_PLAYBACK)) < 0) { if (avail == -EPIPE) { jack_error ("ALSA: avail_update xrun on playback dev '%s'", device->playback_name); - goto xrun; + *status = ALSA_DRIVER_WAIT_XRUN; + return 0; } else { jack_error ("unknown ALSA avail_update return value (%u)", playback_avail); } @@ -2492,10 +2487,6 @@ alsa_driver_wait (alsa_driver_t *driver, int extra_fd, alsa_driver_wait_status_t */ return avail - (avail % driver->frames_per_cycle); - -xrun: - *status = (alsa_driver_xrun_recovery (driver, delayed_usecs) == 0) ? ALSA_DRIVER_WAIT_XRUN : ALSA_DRIVER_WAIT_ERROR; - return 0; } int