mirror of https://github.com/torvalds/linux.git
ASoC: SOF: ipc4-pcm: do not report invalid delay values
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>
This commit is contained in:
parent
18dbff48a1
commit
a4b8152c09
|
|
@ -59,6 +59,8 @@ struct sof_ipc4_pcm_stream_priv {
|
||||||
*/
|
*/
|
||||||
#define DELAY_BOUNDARY U32_MAX
|
#define DELAY_BOUNDARY U32_MAX
|
||||||
|
|
||||||
|
#define DELAY_MAX (DELAY_BOUNDARY >> 1)
|
||||||
|
|
||||||
static inline struct sof_ipc4_timestamp_info *
|
static inline struct sof_ipc4_timestamp_info *
|
||||||
sof_ipc4_sps_to_time_info(struct snd_sof_pcm_stream *sps)
|
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
|
else
|
||||||
time_info->delay = head_cnt - tail_cnt;
|
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
|
* Convert the host byte counter to PCM pointer which wraps in buffer
|
||||||
* and it is in frames
|
* and it is in frames
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue