I've got a Linux application that uses the IPU for video processing on an i.MX6, based on the IPU examples. The application submits tasks through the /dev/mxc_ipu interface from multiple threads: these include overlay, colour space conversion, and deinterlace operations.There are about 125 IPU operations per second. I set the timeout field on each operation to 10000ms, to ensure that no natural timeouts occur. I'm using a single LVDS display.
After what seems to be a random interval, often about an hour, the application will crash. The symptoms are:
- All calls to IPU_QUEUE_TASK will fail with ETIMEDOUT.
- The kernel log will fill with "imx-ipuv3 imx-ipuv3.0: warning: disable ipu dma channel 14 during its busy state"
- A kernel thread [ipu2_task] or [ipu1_task] will be constantly consuming 95% CPU.
At this point the system is unresponsive, and has to be rebooted.