Hi, I need help to understand a case of EDMA lockup because of memset() of huge memory size. I have a audio playback task which does a SIO_issue() and SIO_reclaim() on the audio buffers. This task is running with the highest priority. The EDMA dispatcher keeps calling the ISR once the EDMA has completed the transfer. Hence SIO_reclaim is successful. Now this works fine. But if a low priority task is doing memset() of say 6MB, i occasionally lose interrupts and EDMA seems to be locked up. So the audio playback task hangs in SIO_reclaim(). Any help regarding this will be greatly appreciated. Thanks, Nitin
EDMA lockup because of huge memset()
Started by ●May 8, 2009
Reply by ●May 8, 20092009-05-08
nitinmpai <nitinmpai@gmail.com> wrote:> I need help to understand a case of EDMA lockup because of > memset() of huge memory size.> I have a audio playback task which does a SIO_issue() and > SIO_reclaim() on the audio buffers. This task is running with > the highest priority. The EDMA dispatcher keeps calling the ISR > once the EDMA has completed the transfer. Hence SIO_reclaim is > successful.> Now this works fine. But if a low priority task is doing memset() > of say > 6MB, i occasionally lose interrupts and EDMA seems to be > locked up. So the > audio playback task hangs in SIO_reclaim().Many processor that have a single instruction to implement a large block operation, such as MVCL in S/370, allow the operation to be interrupted, and to continue on when the interrupt completes. It seems that EDMA doesn't allow for that. -- glen