]> www.infradead.org Git - users/hch/misc.git/commitdiff
ASoC: SOF: ipc4-pcm: do not report invalid delay values
authorKai Vehmanen <kai.vehmanen@linux.intel.com>
Thu, 2 Oct 2025 07:47:18 +0000 (10:47 +0300)
committerMark Brown <broonie@kernel.org>
Fri, 3 Oct 2025 11:39:48 +0000 (12:39 +0100)
Add a sanity check for the calculated delay value before reporting it to
the application. If the value is clearly invalid, emit a rate limited
warning to kernel log and return a zero delay. This can occur e.g if the
host or link DMA hits a buffer over/underrun condition.

Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://patch.msgid.link/20251002074719.2084-5-peter.ujfalusi@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/ipc4-pcm.c

index 9d29d2e56c00863f069461eb236a5f2933a5a88d..c700972d32ed3857f87e0bafdd92e4843f13020d 100644 (file)
@@ -59,6 +59,8 @@ struct sof_ipc4_pcm_stream_priv {
  */
 #define DELAY_BOUNDARY         U32_MAX
 
+#define DELAY_MAX              (DELAY_BOUNDARY >> 1)
+
 static inline struct sof_ipc4_timestamp_info *
 sof_ipc4_sps_to_time_info(struct snd_sof_pcm_stream *sps)
 {
@@ -1266,6 +1268,13 @@ static int sof_ipc4_pcm_pointer(struct snd_soc_component *component,
        else
                time_info->delay = head_cnt - tail_cnt;
 
+       if (time_info->delay > DELAY_MAX) {
+               spcm_dbg_ratelimited(spcm, substream->stream,
+                                    "inaccurate delay, host %llu dai_cnt %llu",
+                                    host_cnt, dai_cnt);
+               time_info->delay = 0;
+       }
+
        /*
         * Convert the host byte counter to PCM pointer which wraps in buffer
         * and it is in frames