DSPRelated.com
Forums

EDMA lockup because of huge memset()

Started by nitinmpai May 8, 2009
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   


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