[Sound-open-firmware] The issue of XRUN happened in Kernel and PANIC in firmware

zhigangw zhigang.wu at linux.intel.com
Wed Jun 13 10:08:46 CEST 2018


Hello All:

         When we use the "aplay" tool to play the audio wave file, a 
XRUN (under-run) would happen.

It is high possibility on my APL-GPMRB platform (100%).

Which is detected by Linux kernel in snd_pcm_update_state() function.

This means the "hw_ptr" reaches "appl_ptr".

 From the log, before XRUN happened, the "hw_ptr" is updated by DSP side 
(through the IPC) without any problem.

The "appl_ptr" is updated with about 8ms interval, but in some case, the 
"appl_ptr" is not updated in time.

The "appl_ptr" is updated by main thread (in __snd_pcm_lib_xfer() function).

Then the XRUN happens!


Below is the call-stack of the "aplay" tool. The *safe_read()* function 
reads the audio data into local buffer from wave file.

I add the timestamp log before and after this function. Usually the 
delta time should be very small (less than 1ms).

But sometimes, the safe_read() will take more than 50ms!  Note: It reads 
the audio data successfully at last.

In this time, the underrun issue will be detected by kernel.

             playback_go()
*safe_read()*
                     pcm_write()
                             writei_func()
                                     snd_pcm_writei()
                                             _snd_pcm_writei()
pcm->fast_ops->writei()
snd_pcm_hw_writei()
     ioctl(fd, SNDRV_PCM_IOCTL_WRITEI_FRAMES, &xferi)


When the XRUN is detected by kernel, the recover process will start.

the kernel will send STOP command to DSP by IPC, then send the START 
command to DSP.

During the recover process, our DSP will hits panic!!! This possibility 
is very high on my platform (100%).


Summary:

     1) From the dump data of the DSP(when panic happens),

         DSP panic happened in the wait_for_completion_timeout() function.

         When it is waken up by other interrupt (slept by waiti 
instruction), it hits crash when loading a data into register.

         I checked there is no stack-overflow in this time.

         I do not understand the log: Exception Cause: 
LoadStorePIFDataErrorCause, Synchronous PIF data error during LoadStore 
access.

         Do you have any idea?


     2) For the "aplay" tool's issue. the safe_read() function wastes 
too much time sometimes.

         I have no idea how to debug this issue. or we should report 
this issue to any other team?


thanks

br

~zhigang








More information about the Sound-open-firmware mailing list