I know that there are already many threads about this vpu allocation error but I have still not found a solution for the kernel 4.1.43. Indeed, since this is a very old issue, most of the threads are about older kernel like 3.x.
I am using QT 5.8 with qml, wneh playing a video using QTMultimedia (which uses gstreamer) the issue can be replicated quite easily.
The gstreamer used by qml should be gstreamer-1:
PACKAGECONFIG_append_pn-qtmultimedia = " gstreamer"
In order to be 100% sure I have removed gstreamer-0.10 bin from the filesystem.
I have tried out the following patch:
- iMX6 VPU: Use a DMA allocation pool, instead of kernel default allocator (7cbd06b2) · Commits · sigmadrone / linux-colib… " iMX6 VPU: Use a DMA allocation pool, instead of kernel default allocator
- and dropping cache "echo 3 > /proc/sys/vm/drop_caches ; " in a 10 second loop.
This is definitely helping out but, after playing some videos, the issue is there again.
It is interesting to note that, after the first allocation error, the issue is replicable at 100% nevertheless the cache is dropped. It looks like that after restarting the application, the videos can be played again.
There are around suggestion to modify the QT binding layer for gstreamer for avoiding this issue but it looks to me that it has to be resolved in the kernel.
Below there is the log kernel (using the patch mentioned above):
multiqueue31:sr: page allocation failure: order:8, mode:0xd1
CPU: 0 PID: 3128 Comm: multiqueue31:sr Tainted: G W O 4.1.43+g296fa82 #8
Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[<80015d54>] (unwind_backtrace) from [<800126ac>] (show_stack+0x10/0x14)
[<800126ac>] (show_stack) from [<806e5ec8>] (dump_stack+0x78/0x8c)
[<806e5ec8>] (dump_stack) from [<800b06d0>] (warn_alloc_failed+0xe4/0x120)
[<800b06d0>] (warn_alloc_failed) from [<800b2fd4>] (__alloc_pages_nodemask+0x558/0x840)
[<800b2fd4>] (__alloc_pages_nodemask) from [<8001b9dc>] (__dma_alloc_buffer.constprop.2+0x2c/0x84)
[<8001b9dc>] (__dma_alloc_buffer.constprop.2) from [<8001ba54>] (__alloc_remap_buffer+0x20/0x94)
[<8001ba54>] (__alloc_remap_buffer) from [<8001bce0>] (__dma_alloc+0x218/0x248)
[<8001bce0>] (__dma_alloc) from [<8001be40>] (arm_dma_alloc+0x8c/0xa0)
[<8001be40>] (arm_dma_alloc) from [<7f04d444>] (vpu_alloc_dma_buffer+0xa4/0x170 [mxc_vpu])
[<7f04d444>] (vpu_alloc_dma_buffer [mxc_vpu]) from [<7f04d970>] (vpu_ioctl+0x460/0x988 [mxc_vpu])
[<7f04d970>] (vpu_ioctl [mxc_vpu]) from [<800f898c>] (do_vfs_ioctl+0x450/0x608)
[<800f898c>] (do_vfs_ioctl) from [<800f8b78>] (SyS_ioctl+0x34/0x5c)
[<800f8b78>] (SyS_ioctl) from [<8000f3c0>] (ret_fast_syscall+0x0/0x3c)
drop_cache.sh (2490): drop_caches: 3
active_anon:9464 inactive_anon:126 isolated_anon:0
active_file:3416 inactive_file:7111 isolated_file:0
unevictable:33 dirty:0 writeback:0 unstable:0
mapped:10630 shmem:144 pagetables:181 bounce:0
free:19855 free_pcp:19 free_cma:0
Normal free:79420kB min:1988kB low:2484kB high:2980kB active_anon:37856kB inactive_anon:504kB active_file:13664kB inactive_file:28444kB unevictable:132kB isolated(anon):0kB isolated(file):0kB present
:262144kB managed:248724kB mlocked:132kB dirty:0kB writeback:0kB mapped:42520kB shmem:576kB slab_reclaimable:2608kB slab_unreclaimable:6184kB kernel_stack:632kB pagetables:724kB unstable:0kB bounce:0
kB free_pcp:76kB local_pcp:76kB free_cma:0kB writeback_tmp:0kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve: 0 0 0
Normal: 990*4kB (UMR) 561*8kB (UEMR) 313*16kB (UER) 196*32kB (UEMR) 136*64kB (UEMR) 98*128kB (UEMR) 76*256kB (UEMR) 37*512kB (UEMR) 0*1024kB 0*2048kB 0*4096kB 0*8192kB 0*16384kB 0*32768kB = 79376kB
10739 total pagecache pages
0 pages in swap cache
Swap cache stats: add 0, delete 0, find 0/0
Free swap = 0kB
Total swap = 0kB
65536 pages RAM
0 pages HighMem/MovableOnly
3355 pages reserved
0 pages cma reserved