I'm using drm-misc/drm-misc-next and occasionally getting errors as seen in the stack traces below. I'm not really sure what to make of it. Any ideas?
[ 1727.253743] kworker/0:2: page allocation failure: order:4, mode:0x14040c1(GFP_KERNEL|GFP_DMA|__GFP_COMP), nodemask=(null) [ 1727.298438] CPU: 0 PID: 1913 Comm: kworker/0:2 Tainted: P 4.15.0-rc2-08575-gbc02198-dirty #612 [ 1727.331513] Hardware name: Generic DA850/OMAP-L138/AM18x [ 1727.354135] Workqueue: events drm_fb_helper_dirty_work [drm_kms_helper] [ 1727.379355] Backtrace: [ 1727.380665] [<c000da6c>] (dump_backtrace) from [<c000dd34>] (show_stack+0x18/0x1c) [ 1727.423509] r7:00000040 r6:c0521840 r5:ffffe000 r4:00000000 [ 1727.434302] [<c000dd1c>] (show_stack) from [<c04631f0>] (dump_stack+0x20/0x28) [ 1727.468647] [<c04631d0>] (dump_stack) from [<c009ce14>] (warn_alloc+0x94/0x13c) [ 1727.481443] [<c009cd84>] (warn_alloc) from [<c009d834>] (__alloc_pages_nodemask+0x8d0/0xbd4) [ 1727.514315] r3:00000004 r2:c0521840 [ 1727.524305] r6:00000023 r5:00000000 r4:c05c915c [ 1727.530599] [<c009cf64>] (__alloc_pages_nodemask) from [<c00b5d84>] (kmalloc_order+0x20/0x54) [ 1727.554296] r10:00000000 r9:60000013 r8:c02f0e98 r7:014000c1 r6:c2ae9d94 r5:0000a000 [ 1727.575312] r4:00000000 [ 1727.587963] [<c00b5d64>] (kmalloc_order) from [<c00d6a3c>] (__kmalloc_track_caller+0x180/0x1a4) [ 1727.624311] [<c00d68bc>] (__kmalloc_track_caller) from [<c00b6094>] (krealloc+0x7c/0xc0) [ 1727.654324] r10:00000000 r9:60000013 r8:c02f0e98 r7:014000c1 r6:c2ae9d94 r5:0000a000 [ 1727.668407] r4:00000000 [ 1727.669779] [<c00b6018>] (krealloc) from [<c02f0e98>] (__spi_pump_messages+0x4bc/0x584) [ 1727.704329] r9:60000013 r8:c02ef590 r7:00000000 r6:c2ae9d94 r5:c2b50c00 r4:0000a000 [ 1727.710940] [<c02f09dc>] (__spi_pump_messages) from [<c02f1fc0>] (__spi_sync+0x250/0x284) [ 1727.744313] r10:00000000 r9:60000013 r8:c02ef590 r7:c2b50c00 r6:c2ae9d94 r5:c2b50400 [ 1727.751125] r4:60000013 [ 1727.752479] [<c02f1d70>] (__spi_sync) from [<c02f2020>] (spi_sync+0x2c/0x44) [ 1727.781959] r9:00000000 r8:c305a000 r7:c2b50400 r6:c2ae9d94 r5:c2ae9d94 r4:c2b50400 [ 1727.814395] [<c02f1ff4>] (spi_sync) from [<bf2a1170>] (tinydrm_spi_transfer+0x118/0x1b8 [tinydrm]) [ 1727.822355] r5:7ffffffc r4:00000000 [ 1727.840616] [<bf2a1058>] (tinydrm_spi_transfer [tinydrm]) from [<bf2b33ec>] (mipi_dbi_typec3_command+0x114/0x1cc [mipi_dbi]) [ 1727.874285] r10:c05e67e4 r9:00000000 r8:00000010 r7:c2b50400 r6:c3050000 r5:c2bd6010 [ 1727.881098] r4:0000a000 [ 1727.882486] [<bf2b32d8>] (mipi_dbi_typec3_command [mipi_dbi]) from [<bf2b2074>] (mipi_dbi_command_buf+0x40/0x54 [mipi_dbi]) [ 1727.924298] r8:0000a000 r7:c3050000 r6:bf2b32d8 r5:c2bd65c0 r4:c2bd6010 [ 1727.929891] [<bf2b2034>] (mipi_dbi_command_buf [mipi_dbi]) from [<bf2b2668>] (mipi_dbi_fb_dirty+0x18c/0x218 [mipi_dbi]) [ 1727.964291] r9:00000000 r8:c3050000 r7:00000001 r6:c1f7f600 r5:c2bd65a0 r4:c2bd6010 [ 1727.971220] [<bf2b24dc>] (mipi_dbi_fb_dirty [mipi_dbi]) from [<bf265758>] (drm_fb_helper_dirty_work+0xc8/0xe4 [drm_kms_helper]) [ 1728.004256] r9:00000000 r8:c05e67e4 r7:c2f5d200 r6:00000000 r5:60000013 r4:bf2b24dc [ 1728.011371] [<bf265690>] (drm_fb_helper_dirty_work [drm_kms_helper]) from [<c0032504>] (process_one_work+0x140/0x454) [ 1728.054256] r5:c1f6de40 r4:c1e861f4 [ 1728.056676] [<c00323c4>] (process_one_work) from [<c0032858>] (worker_thread+0x40/0x64c) [ 1728.063570] r10:c05e67e4 r9:c2ae8000 r8:00000008 r7:c05f7220 r6:c05e67f8 r5:c1f6de58 [ 1728.090392] r4:c1f6de40 [ 1728.097104] [<c0032818>] (worker_thread) from [<c00383cc>] (kthread+0x108/0x148) [ 1728.103522] r10:c1ced258 r9:c283bea4 r8:c1f6de40 r7:c2ae8000 r6:00000000 r5:c058da00 [ 1728.144241] r4:c1ced240 [ 1728.145601] [<c00382c4>] (kthread) from [<c000a760>] (ret_from_fork+0x14/0x34) [ 1728.152331] r10:00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:c00382c4 [ 1728.182111] r4:c058da00 [ 1728.183397] Mem-Info: [ 1728.184877] active_anon:2927 inactive_anon:204 isolated_anon:0 active_file:2033 inactive_file:1830 isolated_file:0 unevictable:0 dirty:107 writeback:0 unstable:0 slab_reclaimable:996 slab_unreclaimable:1441 mapped:3107 shmem:320 pagetables:149 bounce:0 free:4279 free_pcp:0 free_cma:3098 [ 1728.254307] Node 0 active_anon:11732kB inactive_anon:792kB active_file:8188kB inactive_file:7376kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:12512kB dirty:456kB writeback:0kB shmem:1280kB writeback_tmp:0kB unstable:0kB all_unreclaimable? no [ 1728.304296] DMA free:16988kB min:820kB low:1024kB high:1228kB active_anon:11748kB inactive_anon:776kB active_file:8192kB inactive_file:7428kB unevictable:0kB writepending:464kB present:65536kB managed:58704kB mlocked:0kB kernel_stack:488kB pagetables:596kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:12392kB [ 1728.364196] lowmem_reserve[]: 0 0 0 [ 1728.366509] DMA: 527*4kB (UMEHC) 412*8kB (UMEHC) 196*16kB (UMEHC) 106*32kB (UMEHC) 43*64kB (UEC) 14*128kB (UC) 2*256kB (C) 0*512kB 0*1024kB 0*2048kB 0*4096kB = 16988kB [ 1728.404211] 4225 total pagecache pages [ 1728.406722] 16384 pages RAM [ 1728.408239] 0 pages HighMem/MovableOnly [ 1728.410796] 1708 pages reserved [ 1728.412654] 4096 pages cma reserved [ 1728.437308] st7735r spi1.0: Failed to update display -12 [ 1737.138417] kworker/0:2: page allocation failure: order:4, mode:0x14040c1(GFP_KERNEL|GFP_DMA|__GFP_COMP), nodemask=(null) [ 1737.159532] CPU: 0 PID: 1913 Comm: kworker/0:2 Tainted: P 4.15.0-rc2-08575-gbc02198-dirty #612 [ 1737.171194] Hardware name: Generic DA850/OMAP-L138/AM18x [ 1737.176610] Workqueue: events drm_fb_helper_dirty_work [drm_kms_helper] [ 1737.182601] Backtrace: [ 1737.184259] [<c000da6c>] (dump_backtrace) from [<c000dd34>] (show_stack+0x18/0x1c) [ 1737.194828] r7:00000040 r6:c0521840 r5:ffffe000 r4:00000000 [ 1737.200031] [<c000dd1c>] (show_stack) from [<c04631f0>] (dump_stack+0x20/0x28) [ 1737.208030] [<c04631d0>] (dump_stack) from [<c009ce14>] (warn_alloc+0x94/0x13c) [ 1737.216805] [<c009cd84>] (warn_alloc) from [<c009d834>] (__alloc_pages_nodemask+0x8d0/0xbd4) [ 1737.224964] r3:00000004 r2:c0521840 [ 1737.230560] r6:00000021 r5:00000000 r4:c05c915c [ 1737.234807] [<c009cf64>] (__alloc_pages_nodemask) from [<c00b5d84>] (kmalloc_order+0x20/0x54) [ 1737.245280] r10:00000000 r9:60000013 r8:c02f0e98 r7:014000c1 r6:c2ae9d94 r5:0000a000 [ 1737.252513] r4:00000000 [ 1737.254103] [<c00b5d64>] (kmalloc_order) from [<c00d6a3c>] (__kmalloc_track_caller+0x180/0x1a4) [ 1737.272789] [<c00d68bc>] (__kmalloc_track_caller) from [<c00b6094>] (krealloc+0x7c/0xc0) [ 1737.281922] r10:00000000 r9:60000013 r8:c02f0e98 r7:014000c1 r6:c2ae9d94 r5:0000a000 [ 1737.290161] r4:00000000 [ 1737.296344] [<c00b6018>] (krealloc) from [<c02f0e98>] (__spi_pump_messages+0x4bc/0x584) [ 1737.305276] r9:60000013 r8:c02ef590 r7:00000000 r6:c2ae9d94 r5:c2b50c00 r4:0000a000 [ 1737.312438] [<c02f09dc>] (__spi_pump_messages) from [<c02f1fc0>] (__spi_sync+0x250/0x284) [ 1737.322216] r10:00000000 r9:60000013 r8:c02ef590 r7:c2b50c00 r6:c2ae9d94 r5:c2b50400 [ 1737.333626] r4:60000013 [ 1737.335001] [<c02f1d70>] (__spi_sync) from [<c02f2020>] (spi_sync+0x2c/0x44) [ 1737.340842] r9:00000000 r8:c305a000 r7:c2b50400 r6:c2ae9d94 r5:c2ae9d94 r4:c2b50400 [ 1737.349354] [<c02f1ff4>] (spi_sync) from [<bf2a1170>] (tinydrm_spi_transfer+0x118/0x1b8 [tinydrm]) [ 1737.363624] r5:7ffffffc r4:00000000 [ 1737.366094] [<bf2a1058>] (tinydrm_spi_transfer [tinydrm]) from [<bf2b33ec>] (mipi_dbi_typec3_command+0x114/0x1cc [mipi_dbi]) [ 1737.392253] r10:c05e67e4 r9:00000000 r8:00000010 r7:c2b50400 r6:c3050000 r5:c2bd6010 [ 1737.403576] r4:0000a000 [ 1737.405642] [<bf2b32d8>] (mipi_dbi_typec3_command [mipi_dbi]) from [<bf2b2074>] (mipi_dbi_command_buf+0x40/0x54 [mipi_dbi]) [ 1737.416696] r8:0000a000 r7:c3050000 r6:bf2b32d8 r5:c2bd65c0 r4:c2bd6010 [ 1737.427416] [<bf2b2034>] (mipi_dbi_command_buf [mipi_dbi]) from [<bf2b2668>] (mipi_dbi_fb_dirty+0x18c/0x218 [mipi_dbi]) [ 1737.438798] r9:00000000 r8:c3050000 r7:00000001 r6:c1f7f600 r5:c2bd65a0 r4:c2bd6010 [ 1737.446789] [<bf2b24dc>] (mipi_dbi_fb_dirty [mipi_dbi]) from [<bf265758>] (drm_fb_helper_dirty_work+0xc8/0xe4 [drm_kms_helper]) [ 1737.463800] r9:00000000 r8:c05e67e4 r7:c2f5d200 r6:00000000 r5:60000013 r4:bf2b24dc [ 1737.470718] [<bf265690>] (drm_fb_helper_dirty_work [drm_kms_helper]) from [<c0032504>] (process_one_work+0x140/0x454) [ 1737.486679] r5:c1f6de40 r4:c1e861f4 [ 1737.489820] [<c00323c4>] (process_one_work) from [<c0032858>] (worker_thread+0x40/0x64c) [ 1737.507452] r10:c05e67e4 r9:c2ae8000 r8:00000008 r7:c05f7220 r6:c05e67f8 r5:c1f6de58 [ 1737.523644] r4:c1f6de40 [ 1737.525018] [<c0032818>] (worker_thread) from [<c00383cc>] (kthread+0x108/0x148) [ 1737.531212] r10:c1ced258 r9:c283bea4 r8:c1f6de40 r7:c2ae8000 r6:00000000 r5:c058da00 [ 1737.554995] r4:c1ced240 [ 1737.563744] [<c00382c4>] (kthread) from [<c000a760>] (ret_from_fork+0x14/0x34) [ 1737.569786] r10:00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:c00382c4 [ 1737.585266] r4:c058da00 [ 1737.586555] Mem-Info: [ 1737.587627] active_anon:3212 inactive_anon:30 isolated_anon:0 active_file:1829 inactive_file:1706 isolated_file:0 unevictable:0 dirty:126 writeback:0 unstable:0 slab_reclaimable:1000 slab_unreclaimable:1430 mapped:2734 shmem:321 pagetables:154 bounce:0 free:4503 free_pcp:0 free_cma:3162 [ 1737.615567] Node 0 active_anon:12848kB inactive_anon:120kB active_file:7372kB inactive_file:6824kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:10936kB dirty:504kB writeback:0kB shmem:1284kB writeback_tmp:0kB unstable:0kB all_unreclaimable? no [ 1737.645083] DMA free:17984kB min:820kB low:1024kB high:1228kB active_anon:12848kB inactive_anon:120kB active_file:7360kB inactive_file:6792kB unevictable:0kB writepending:508kB present:65536kB managed:58704kB mlocked:0kB kernel_stack:496kB pagetables:616kB bounce:0kB free_pcp:20kB local_pcp:20kB free_cma:12648kB [ 1737.674601] lowmem_reserve[]: 0 0 0 [ 1737.676914] DMA: 589*4kB (UMEHC) 358*8kB (UMHC) 225*16kB (UMHC) 123*32kB (UMEHC) 45*64kB (UEC) 14*128kB (UC) 2*256kB (C) 0*512kB 0*1024kB 0*2048kB 0*4096kB = 17940kB [ 1737.701573] 3883 total pagecache pages [ 1737.704671] 16384 pages RAM [ 1737.706592] 0 pages HighMem/MovableOnly [ 1737.709186] 1708 pages reserved [ 1737.711055] 4096 pages cma reserved [ 1742.177435] kworker/0:2: page allocation failure: order:4, mode:0x14040c1(GFP_KERNEL|GFP_DMA|__GFP_COMP), nodemask=(null) [ 1742.213617] CPU: 0 PID: 1913 Comm: kworker/0:2 Tainted: P 4.15.0-rc2-08575-gbc02198-dirty #612 [ 1742.231618] Hardware name: Generic DA850/OMAP-L138/AM18x [ 1742.237868] Workqueue: events drm_fb_helper_dirty_work [drm_kms_helper] [ 1742.245854] Backtrace: [ 1742.248000] [<c000da6c>] (dump_backtrace) from [<c000dd34>] (show_stack+0x18/0x1c) [ 1742.256895] r7:00000040 r6:c0521840 r5:ffffe000 r4:00000000 [ 1742.262244] [<c000dd1c>] (show_stack) from [<c04631f0>] (dump_stack+0x20/0x28) [ 1742.269239] [<c04631d0>] (dump_stack) from [<c009ce14>] (warn_alloc+0x94/0x13c) [ 1742.277081] [<c009cd84>] (warn_alloc) from [<c009d834>] (__alloc_pages_nodemask+0x8d0/0xbd4) [ 1742.287239] r3:00000004 r2:c0521840 [ 1742.290457] r6:00000022 r5:00000000 r4:c05c915c [ 1742.294861] [<c009cf64>] (__alloc_pages_nodemask) from [<c00b5d84>] (kmalloc_order+0x20/0x54) [ 1742.311390] r10:00000000 r9:60000013 r8:c02f0e98 r7:014000c1 r6:c2ae9d94 r5:0000a000 [ 1742.319808] r4:00000000 [ 1742.322683] [<c00b5d64>] (kmalloc_order) from [<c00d6a3c>] (__kmalloc_track_caller+0x180/0x1a4) [ 1742.331975] [<c00d68bc>] (__kmalloc_track_caller) from [<c00b6094>] (krealloc+0x7c/0xc0) [ 1742.341748] r10:00000000 r9:60000013 r8:c02f0e98 r7:014000c1 r6:c2ae9d94 r5:0000a000 [ 1742.350902] r4:00000000 [ 1742.354117] [<c00b6018>] (krealloc) from [<c02f0e98>] (__spi_pump_messages+0x4bc/0x584) [ 1742.362572] r9:60000013 r8:c02ef590 r7:00000000 r6:c2ae9d94 r5:c2b50c00 r4:0000a000 [ 1742.370122] [<c02f09dc>] (__spi_pump_messages) from [<c02f1fc0>] (__spi_sync+0x250/0x284) [ 1742.379851] r10:00000000 r9:60000013 r8:c02ef590 r7:c2b50c00 r6:c2ae9d94 r5:c2b50400 [ 1742.388300] r4:60000013 [ 1742.392540] [<c02f1d70>] (__spi_sync) from [<c02f2020>] (spi_sync+0x2c/0x44) [ 1742.400902] r9:00000000 r8:c305a000 r7:c2b50400 r6:c2ae9d94 r5:c2ae9d94 r4:c2b50400 [ 1742.408553] [<c02f1ff4>] (spi_sync) from [<bf2a1170>] (tinydrm_spi_transfer+0x118/0x1b8 [tinydrm]) [ 1742.418971] r5:7ffffffc r4:00000000 [ 1742.422301] [<bf2a1058>] (tinydrm_spi_transfer [tinydrm]) from [<bf2b33ec>] (mipi_dbi_typec3_command+0x114/0x1cc [mipi_dbi]) [ 1742.435020] r10:c05e67e4 r9:00000000 r8:00000010 r7:c2b50400 r6:c3050000 r5:c2bd6010 [ 1742.443874] r4:0000a000 [ 1742.446156] [<bf2b32d8>] (mipi_dbi_typec3_command [mipi_dbi]) from [<bf2b2074>] (mipi_dbi_command_buf+0x40/0x54 [mipi_dbi]) [ 1742.458093] r8:0000a000 r7:c3050000 r6:bf2b32d8 r5:c2bd65c0 r4:c2bd6010 [ 1742.464897] [<bf2b2034>] (mipi_dbi_command_buf [mipi_dbi]) from [<bf2b2668>] (mipi_dbi_fb_dirty+0x18c/0x218 [mipi_dbi]) [ 1742.476362] r9:00000000 r8:c3050000 r7:00000001 r6:c1f7f600 r5:c2bd65a0 r4:c2bd6010 [ 1742.484232] [<bf2b24dc>] (mipi_dbi_fb_dirty [mipi_dbi]) from [<bf265758>] (drm_fb_helper_dirty_work+0xc8/0xe4 [drm_kms_helper]) [ 1742.497323] r9:00000000 r8:c05e67e4 r7:c2f5d200 r6:00000000 r5:60000013 r4:bf2b24dc [ 1742.505287] [<bf265690>] (drm_fb_helper_dirty_work [drm_kms_helper]) from [<c0032504>] (process_one_work+0x140/0x454) [ 1742.514945] r5:c1f6de40 r4:c1e861f4 [ 1742.517333] [<c00323c4>] (process_one_work) from [<c0032858>] (worker_thread+0x40/0x64c) [ 1742.524410] r10:c05e67e4 r9:c2ae8000 r8:00000008 r7:c05f7220 r6:c05e67f8 r5:c1f6de58 [ 1742.531014] r4:c1f6de40 [ 1742.532332] [<c0032818>] (worker_thread) from [<c00383cc>] (kthread+0x108/0x148) [ 1742.538869] r10:c1ced258 r9:c283bea4 r8:c1f6de40 r7:c2ae8000 r6:00000000 r5:c058da00 [ 1742.545653] r4:c1ced240 [ 1742.546985] [<c00382c4>] (kthread) from [<c000a760>] (ret_from_fork+0x14/0x34) [ 1742.553796] r10:00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:c00382c4 [ 1742.560411] r4:c058da00 [ 1742.561674] Mem-Info: [ 1742.562739] active_anon:3212 inactive_anon:30 isolated_anon:0 active_file:1891 inactive_file:1541 isolated_file:0 unevictable:0 dirty:0 writeback:61 unstable:0 slab_reclaimable:1000 slab_unreclaimable:1476 mapped:2123 shmem:321 pagetables:154 bounce:0 free:4556 free_pcp:5 free_cma:3162 [ 1742.588213] Node 0 active_anon:12848kB inactive_anon:120kB active_file:7564kB inactive_file:6164kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:8492kB dirty:0kB writeback:244kB shmem:1284kB writeback_tmp:0kB unstable:0kB all_unreclaimable? no [ 1742.610916] DMA free:18224kB min:820kB low:1024kB high:1228kB active_anon:12848kB inactive_anon:120kB active_file:7564kB inactive_file:6164kB unevictable:0kB writepending:244kB present:65536kB managed:58704kB mlocked:0kB kernel_stack:496kB pagetables:616kB bounce:0kB free_pcp:20kB local_pcp:20kB free_cma:12648kB [ 1742.638628] lowmem_reserve[]: 0 0 0 [ 1742.640936] DMA: 676*4kB (UMEHC) 294*8kB (UMHC) 261*16kB (UMHC) 117*32kB (UMEHC) 46*64kB (UMEC) 14*128kB (UC) 2*256kB (C) 0*512kB 0*1024kB 0*2048kB 0*4096kB = 18224kB [ 1742.655056] 3753 total pagecache pages [ 1742.657553] 16384 pages RAM [ 1742.659927] 0 pages HighMem/MovableOnly [ 1742.664521] 1708 pages reserved [ 1742.667263] 4096 pages cma reserved
Den 11.12.2017 04.28, skrev David Lechner:
I'm using drm-misc/drm-misc-next and occasionally getting errors as seen in the stack traces below. I'm not really sure what to make of it. Any ideas?
The spi controller driver has told the spi core to allocate dummy buffers for tx/rx: spi_sync -> __spi_pump_messages -> spi_map_msg -> krealloc -> __do_krealloc -> kmalloc_track_caller
order:4 means it's trying to allocate 2^4*PAGE_SIZE = 64kB, which probably is the max DMA limit. So this is a pixel data transfer.
On my Raspberry Pi I've got 43 chunks of 64kB available if I have understood this right:
$ sudo cat /proc/buddyinfo Node 0, zone Normal 40 68 66 51 43 46 13 1 3 3 75
I don't know what those dummy buffers are used for.
Noralf.
[ 1727.253743] kworker/0:2: page allocation failure: order:4, mode:0x14040c1(GFP_KERNEL|GFP_DMA|__GFP_COMP), nodemask=(null) [ 1727.298438] CPU: 0 PID: 1913 Comm: kworker/0:2 Tainted: P 4.15.0-rc2-08575-gbc02198-dirty #612 [ 1727.331513] Hardware name: Generic DA850/OMAP-L138/AM18x [ 1727.354135] Workqueue: events drm_fb_helper_dirty_work [drm_kms_helper] [ 1727.379355] Backtrace: [ 1727.380665] [<c000da6c>] (dump_backtrace) from [<c000dd34>] (show_stack+0x18/0x1c) [ 1727.423509] r7:00000040 r6:c0521840 r5:ffffe000 r4:00000000 [ 1727.434302] [<c000dd1c>] (show_stack) from [<c04631f0>] (dump_stack+0x20/0x28) [ 1727.468647] [<c04631d0>] (dump_stack) from [<c009ce14>] (warn_alloc+0x94/0x13c) [ 1727.481443] [<c009cd84>] (warn_alloc) from [<c009d834>] (__alloc_pages_nodemask+0x8d0/0xbd4) [ 1727.514315] r3:00000004 r2:c0521840 [ 1727.524305] r6:00000023 r5:00000000 r4:c05c915c [ 1727.530599] [<c009cf64>] (__alloc_pages_nodemask) from [<c00b5d84>] (kmalloc_order+0x20/0x54) [ 1727.554296] r10:00000000 r9:60000013 r8:c02f0e98 r7:014000c1 r6:c2ae9d94 r5:0000a000 [ 1727.575312] r4:00000000 [ 1727.587963] [<c00b5d64>] (kmalloc_order) from [<c00d6a3c>] (__kmalloc_track_caller+0x180/0x1a4) [ 1727.624311] [<c00d68bc>] (__kmalloc_track_caller) from [<c00b6094>] (krealloc+0x7c/0xc0) [ 1727.654324] r10:00000000 r9:60000013 r8:c02f0e98 r7:014000c1 r6:c2ae9d94 r5:0000a000 [ 1727.668407] r4:00000000 [ 1727.669779] [<c00b6018>] (krealloc) from [<c02f0e98>] (__spi_pump_messages+0x4bc/0x584) [ 1727.704329] r9:60000013 r8:c02ef590 r7:00000000 r6:c2ae9d94 r5:c2b50c00 r4:0000a000 [ 1727.710940] [<c02f09dc>] (__spi_pump_messages) from [<c02f1fc0>] (__spi_sync+0x250/0x284) [ 1727.744313] r10:00000000 r9:60000013 r8:c02ef590 r7:c2b50c00 r6:c2ae9d94 r5:c2b50400 [ 1727.751125] r4:60000013 [ 1727.752479] [<c02f1d70>] (__spi_sync) from [<c02f2020>] (spi_sync+0x2c/0x44) [ 1727.781959] r9:00000000 r8:c305a000 r7:c2b50400 r6:c2ae9d94 r5:c2ae9d94 r4:c2b50400 [ 1727.814395] [<c02f1ff4>] (spi_sync) from [<bf2a1170>] (tinydrm_spi_transfer+0x118/0x1b8 [tinydrm]) [ 1727.822355] r5:7ffffffc r4:00000000 [ 1727.840616] [<bf2a1058>] (tinydrm_spi_transfer [tinydrm]) from [<bf2b33ec>] (mipi_dbi_typec3_command+0x114/0x1cc [mipi_dbi]) [ 1727.874285] r10:c05e67e4 r9:00000000 r8:00000010 r7:c2b50400 r6:c3050000 r5:c2bd6010 [ 1727.881098] r4:0000a000 [ 1727.882486] [<bf2b32d8>] (mipi_dbi_typec3_command [mipi_dbi]) from [<bf2b2074>] (mipi_dbi_command_buf+0x40/0x54 [mipi_dbi]) [ 1727.924298] r8:0000a000 r7:c3050000 r6:bf2b32d8 r5:c2bd65c0 r4:c2bd6010 [ 1727.929891] [<bf2b2034>] (mipi_dbi_command_buf [mipi_dbi]) from [<bf2b2668>] (mipi_dbi_fb_dirty+0x18c/0x218 [mipi_dbi]) [ 1727.964291] r9:00000000 r8:c3050000 r7:00000001 r6:c1f7f600 r5:c2bd65a0 r4:c2bd6010 [ 1727.971220] [<bf2b24dc>] (mipi_dbi_fb_dirty [mipi_dbi]) from [<bf265758>] (drm_fb_helper_dirty_work+0xc8/0xe4 [drm_kms_helper]) [ 1728.004256] r9:00000000 r8:c05e67e4 r7:c2f5d200 r6:00000000 r5:60000013 r4:bf2b24dc [ 1728.011371] [<bf265690>] (drm_fb_helper_dirty_work [drm_kms_helper]) from [<c0032504>] (process_one_work+0x140/0x454) [ 1728.054256] r5:c1f6de40 r4:c1e861f4 [ 1728.056676] [<c00323c4>] (process_one_work) from [<c0032858>] (worker_thread+0x40/0x64c) [ 1728.063570] r10:c05e67e4 r9:c2ae8000 r8:00000008 r7:c05f7220 r6:c05e67f8 r5:c1f6de58 [ 1728.090392] r4:c1f6de40 [ 1728.097104] [<c0032818>] (worker_thread) from [<c00383cc>] (kthread+0x108/0x148) [ 1728.103522] r10:c1ced258 r9:c283bea4 r8:c1f6de40 r7:c2ae8000 r6:00000000 r5:c058da00 [ 1728.144241] r4:c1ced240 [ 1728.145601] [<c00382c4>] (kthread) from [<c000a760>] (ret_from_fork+0x14/0x34) [ 1728.152331] r10:00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:c00382c4 [ 1728.182111] r4:c058da00 [ 1728.183397] Mem-Info: [ 1728.184877] active_anon:2927 inactive_anon:204 isolated_anon:0 active_file:2033 inactive_file:1830 isolated_file:0 unevictable:0 dirty:107 writeback:0 unstable:0 slab_reclaimable:996 slab_unreclaimable:1441 mapped:3107 shmem:320 pagetables:149 bounce:0 free:4279 free_pcp:0 free_cma:3098 [ 1728.254307] Node 0 active_anon:11732kB inactive_anon:792kB active_file:8188kB inactive_file:7376kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:12512kB dirty:456kB writeback:0kB shmem:1280kB writeback_tmp:0kB unstable:0kB all_unreclaimable? no [ 1728.304296] DMA free:16988kB min:820kB low:1024kB high:1228kB active_anon:11748kB inactive_anon:776kB active_file:8192kB inactive_file:7428kB unevictable:0kB writepending:464kB present:65536kB managed:58704kB mlocked:0kB kernel_stack:488kB pagetables:596kB bounce:0kB free_pcp:0kB local_pcp:0kB free_cma:12392kB [ 1728.364196] lowmem_reserve[]: 0 0 0 [ 1728.366509] DMA: 527*4kB (UMEHC) 412*8kB (UMEHC) 196*16kB (UMEHC) 106*32kB (UMEHC) 43*64kB (UEC) 14*128kB (UC) 2*256kB (C) 0*512kB 0*1024kB 0*2048kB 0*4096kB = 16988kB [ 1728.404211] 4225 total pagecache pages [ 1728.406722] 16384 pages RAM [ 1728.408239] 0 pages HighMem/MovableOnly [ 1728.410796] 1708 pages reserved [ 1728.412654] 4096 pages cma reserved [ 1728.437308] st7735r spi1.0: Failed to update display -12 [ 1737.138417] kworker/0:2: page allocation failure: order:4, mode:0x14040c1(GFP_KERNEL|GFP_DMA|__GFP_COMP), nodemask=(null) [ 1737.159532] CPU: 0 PID: 1913 Comm: kworker/0:2 Tainted: P 4.15.0-rc2-08575-gbc02198-dirty #612 [ 1737.171194] Hardware name: Generic DA850/OMAP-L138/AM18x [ 1737.176610] Workqueue: events drm_fb_helper_dirty_work [drm_kms_helper] [ 1737.182601] Backtrace: [ 1737.184259] [<c000da6c>] (dump_backtrace) from [<c000dd34>] (show_stack+0x18/0x1c) [ 1737.194828] r7:00000040 r6:c0521840 r5:ffffe000 r4:00000000 [ 1737.200031] [<c000dd1c>] (show_stack) from [<c04631f0>] (dump_stack+0x20/0x28) [ 1737.208030] [<c04631d0>] (dump_stack) from [<c009ce14>] (warn_alloc+0x94/0x13c) [ 1737.216805] [<c009cd84>] (warn_alloc) from [<c009d834>] (__alloc_pages_nodemask+0x8d0/0xbd4) [ 1737.224964] r3:00000004 r2:c0521840 [ 1737.230560] r6:00000021 r5:00000000 r4:c05c915c [ 1737.234807] [<c009cf64>] (__alloc_pages_nodemask) from [<c00b5d84>] (kmalloc_order+0x20/0x54) [ 1737.245280] r10:00000000 r9:60000013 r8:c02f0e98 r7:014000c1 r6:c2ae9d94 r5:0000a000 [ 1737.252513] r4:00000000 [ 1737.254103] [<c00b5d64>] (kmalloc_order) from [<c00d6a3c>] (__kmalloc_track_caller+0x180/0x1a4) [ 1737.272789] [<c00d68bc>] (__kmalloc_track_caller) from [<c00b6094>] (krealloc+0x7c/0xc0) [ 1737.281922] r10:00000000 r9:60000013 r8:c02f0e98 r7:014000c1 r6:c2ae9d94 r5:0000a000 [ 1737.290161] r4:00000000 [ 1737.296344] [<c00b6018>] (krealloc) from [<c02f0e98>] (__spi_pump_messages+0x4bc/0x584) [ 1737.305276] r9:60000013 r8:c02ef590 r7:00000000 r6:c2ae9d94 r5:c2b50c00 r4:0000a000 [ 1737.312438] [<c02f09dc>] (__spi_pump_messages) from [<c02f1fc0>] (__spi_sync+0x250/0x284) [ 1737.322216] r10:00000000 r9:60000013 r8:c02ef590 r7:c2b50c00 r6:c2ae9d94 r5:c2b50400 [ 1737.333626] r4:60000013 [ 1737.335001] [<c02f1d70>] (__spi_sync) from [<c02f2020>] (spi_sync+0x2c/0x44) [ 1737.340842] r9:00000000 r8:c305a000 r7:c2b50400 r6:c2ae9d94 r5:c2ae9d94 r4:c2b50400 [ 1737.349354] [<c02f1ff4>] (spi_sync) from [<bf2a1170>] (tinydrm_spi_transfer+0x118/0x1b8 [tinydrm]) [ 1737.363624] r5:7ffffffc r4:00000000 [ 1737.366094] [<bf2a1058>] (tinydrm_spi_transfer [tinydrm]) from [<bf2b33ec>] (mipi_dbi_typec3_command+0x114/0x1cc [mipi_dbi]) [ 1737.392253] r10:c05e67e4 r9:00000000 r8:00000010 r7:c2b50400 r6:c3050000 r5:c2bd6010 [ 1737.403576] r4:0000a000 [ 1737.405642] [<bf2b32d8>] (mipi_dbi_typec3_command [mipi_dbi]) from [<bf2b2074>] (mipi_dbi_command_buf+0x40/0x54 [mipi_dbi]) [ 1737.416696] r8:0000a000 r7:c3050000 r6:bf2b32d8 r5:c2bd65c0 r4:c2bd6010 [ 1737.427416] [<bf2b2034>] (mipi_dbi_command_buf [mipi_dbi]) from [<bf2b2668>] (mipi_dbi_fb_dirty+0x18c/0x218 [mipi_dbi]) [ 1737.438798] r9:00000000 r8:c3050000 r7:00000001 r6:c1f7f600 r5:c2bd65a0 r4:c2bd6010 [ 1737.446789] [<bf2b24dc>] (mipi_dbi_fb_dirty [mipi_dbi]) from [<bf265758>] (drm_fb_helper_dirty_work+0xc8/0xe4 [drm_kms_helper]) [ 1737.463800] r9:00000000 r8:c05e67e4 r7:c2f5d200 r6:00000000 r5:60000013 r4:bf2b24dc [ 1737.470718] [<bf265690>] (drm_fb_helper_dirty_work [drm_kms_helper]) from [<c0032504>] (process_one_work+0x140/0x454) [ 1737.486679] r5:c1f6de40 r4:c1e861f4 [ 1737.489820] [<c00323c4>] (process_one_work) from [<c0032858>] (worker_thread+0x40/0x64c) [ 1737.507452] r10:c05e67e4 r9:c2ae8000 r8:00000008 r7:c05f7220 r6:c05e67f8 r5:c1f6de58 [ 1737.523644] r4:c1f6de40 [ 1737.525018] [<c0032818>] (worker_thread) from [<c00383cc>] (kthread+0x108/0x148) [ 1737.531212] r10:c1ced258 r9:c283bea4 r8:c1f6de40 r7:c2ae8000 r6:00000000 r5:c058da00 [ 1737.554995] r4:c1ced240 [ 1737.563744] [<c00382c4>] (kthread) from [<c000a760>] (ret_from_fork+0x14/0x34) [ 1737.569786] r10:00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:c00382c4 [ 1737.585266] r4:c058da00 [ 1737.586555] Mem-Info: [ 1737.587627] active_anon:3212 inactive_anon:30 isolated_anon:0 active_file:1829 inactive_file:1706 isolated_file:0 unevictable:0 dirty:126 writeback:0 unstable:0 slab_reclaimable:1000 slab_unreclaimable:1430 mapped:2734 shmem:321 pagetables:154 bounce:0 free:4503 free_pcp:0 free_cma:3162 [ 1737.615567] Node 0 active_anon:12848kB inactive_anon:120kB active_file:7372kB inactive_file:6824kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:10936kB dirty:504kB writeback:0kB shmem:1284kB writeback_tmp:0kB unstable:0kB all_unreclaimable? no [ 1737.645083] DMA free:17984kB min:820kB low:1024kB high:1228kB active_anon:12848kB inactive_anon:120kB active_file:7360kB inactive_file:6792kB unevictable:0kB writepending:508kB present:65536kB managed:58704kB mlocked:0kB kernel_stack:496kB pagetables:616kB bounce:0kB free_pcp:20kB local_pcp:20kB free_cma:12648kB [ 1737.674601] lowmem_reserve[]: 0 0 0 [ 1737.676914] DMA: 589*4kB (UMEHC) 358*8kB (UMHC) 225*16kB (UMHC) 123*32kB (UMEHC) 45*64kB (UEC) 14*128kB (UC) 2*256kB (C) 0*512kB 0*1024kB 0*2048kB 0*4096kB = 17940kB [ 1737.701573] 3883 total pagecache pages [ 1737.704671] 16384 pages RAM [ 1737.706592] 0 pages HighMem/MovableOnly [ 1737.709186] 1708 pages reserved [ 1737.711055] 4096 pages cma reserved [ 1742.177435] kworker/0:2: page allocation failure: order:4, mode:0x14040c1(GFP_KERNEL|GFP_DMA|__GFP_COMP), nodemask=(null) [ 1742.213617] CPU: 0 PID: 1913 Comm: kworker/0:2 Tainted: P 4.15.0-rc2-08575-gbc02198-dirty #612 [ 1742.231618] Hardware name: Generic DA850/OMAP-L138/AM18x [ 1742.237868] Workqueue: events drm_fb_helper_dirty_work [drm_kms_helper] [ 1742.245854] Backtrace: [ 1742.248000] [<c000da6c>] (dump_backtrace) from [<c000dd34>] (show_stack+0x18/0x1c) [ 1742.256895] r7:00000040 r6:c0521840 r5:ffffe000 r4:00000000 [ 1742.262244] [<c000dd1c>] (show_stack) from [<c04631f0>] (dump_stack+0x20/0x28) [ 1742.269239] [<c04631d0>] (dump_stack) from [<c009ce14>] (warn_alloc+0x94/0x13c) [ 1742.277081] [<c009cd84>] (warn_alloc) from [<c009d834>] (__alloc_pages_nodemask+0x8d0/0xbd4) [ 1742.287239] r3:00000004 r2:c0521840 [ 1742.290457] r6:00000022 r5:00000000 r4:c05c915c [ 1742.294861] [<c009cf64>] (__alloc_pages_nodemask) from [<c00b5d84>] (kmalloc_order+0x20/0x54) [ 1742.311390] r10:00000000 r9:60000013 r8:c02f0e98 r7:014000c1 r6:c2ae9d94 r5:0000a000 [ 1742.319808] r4:00000000 [ 1742.322683] [<c00b5d64>] (kmalloc_order) from [<c00d6a3c>] (__kmalloc_track_caller+0x180/0x1a4) [ 1742.331975] [<c00d68bc>] (__kmalloc_track_caller) from [<c00b6094>] (krealloc+0x7c/0xc0) [ 1742.341748] r10:00000000 r9:60000013 r8:c02f0e98 r7:014000c1 r6:c2ae9d94 r5:0000a000 [ 1742.350902] r4:00000000 [ 1742.354117] [<c00b6018>] (krealloc) from [<c02f0e98>] (__spi_pump_messages+0x4bc/0x584) [ 1742.362572] r9:60000013 r8:c02ef590 r7:00000000 r6:c2ae9d94 r5:c2b50c00 r4:0000a000 [ 1742.370122] [<c02f09dc>] (__spi_pump_messages) from [<c02f1fc0>] (__spi_sync+0x250/0x284) [ 1742.379851] r10:00000000 r9:60000013 r8:c02ef590 r7:c2b50c00 r6:c2ae9d94 r5:c2b50400 [ 1742.388300] r4:60000013 [ 1742.392540] [<c02f1d70>] (__spi_sync) from [<c02f2020>] (spi_sync+0x2c/0x44) [ 1742.400902] r9:00000000 r8:c305a000 r7:c2b50400 r6:c2ae9d94 r5:c2ae9d94 r4:c2b50400 [ 1742.408553] [<c02f1ff4>] (spi_sync) from [<bf2a1170>] (tinydrm_spi_transfer+0x118/0x1b8 [tinydrm]) [ 1742.418971] r5:7ffffffc r4:00000000 [ 1742.422301] [<bf2a1058>] (tinydrm_spi_transfer [tinydrm]) from [<bf2b33ec>] (mipi_dbi_typec3_command+0x114/0x1cc [mipi_dbi]) [ 1742.435020] r10:c05e67e4 r9:00000000 r8:00000010 r7:c2b50400 r6:c3050000 r5:c2bd6010 [ 1742.443874] r4:0000a000 [ 1742.446156] [<bf2b32d8>] (mipi_dbi_typec3_command [mipi_dbi]) from [<bf2b2074>] (mipi_dbi_command_buf+0x40/0x54 [mipi_dbi]) [ 1742.458093] r8:0000a000 r7:c3050000 r6:bf2b32d8 r5:c2bd65c0 r4:c2bd6010 [ 1742.464897] [<bf2b2034>] (mipi_dbi_command_buf [mipi_dbi]) from [<bf2b2668>] (mipi_dbi_fb_dirty+0x18c/0x218 [mipi_dbi]) [ 1742.476362] r9:00000000 r8:c3050000 r7:00000001 r6:c1f7f600 r5:c2bd65a0 r4:c2bd6010 [ 1742.484232] [<bf2b24dc>] (mipi_dbi_fb_dirty [mipi_dbi]) from [<bf265758>] (drm_fb_helper_dirty_work+0xc8/0xe4 [drm_kms_helper]) [ 1742.497323] r9:00000000 r8:c05e67e4 r7:c2f5d200 r6:00000000 r5:60000013 r4:bf2b24dc [ 1742.505287] [<bf265690>] (drm_fb_helper_dirty_work [drm_kms_helper]) from [<c0032504>] (process_one_work+0x140/0x454) [ 1742.514945] r5:c1f6de40 r4:c1e861f4 [ 1742.517333] [<c00323c4>] (process_one_work) from [<c0032858>] (worker_thread+0x40/0x64c) [ 1742.524410] r10:c05e67e4 r9:c2ae8000 r8:00000008 r7:c05f7220 r6:c05e67f8 r5:c1f6de58 [ 1742.531014] r4:c1f6de40 [ 1742.532332] [<c0032818>] (worker_thread) from [<c00383cc>] (kthread+0x108/0x148) [ 1742.538869] r10:c1ced258 r9:c283bea4 r8:c1f6de40 r7:c2ae8000 r6:00000000 r5:c058da00 [ 1742.545653] r4:c1ced240 [ 1742.546985] [<c00382c4>] (kthread) from [<c000a760>] (ret_from_fork+0x14/0x34) [ 1742.553796] r10:00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:c00382c4 [ 1742.560411] r4:c058da00 [ 1742.561674] Mem-Info: [ 1742.562739] active_anon:3212 inactive_anon:30 isolated_anon:0 active_file:1891 inactive_file:1541 isolated_file:0 unevictable:0 dirty:0 writeback:61 unstable:0 slab_reclaimable:1000 slab_unreclaimable:1476 mapped:2123 shmem:321 pagetables:154 bounce:0 free:4556 free_pcp:5 free_cma:3162 [ 1742.588213] Node 0 active_anon:12848kB inactive_anon:120kB active_file:7564kB inactive_file:6164kB unevictable:0kB isolated(anon):0kB isolated(file):0kB mapped:8492kB dirty:0kB writeback:244kB shmem:1284kB writeback_tmp:0kB unstable:0kB all_unreclaimable? no [ 1742.610916] DMA free:18224kB min:820kB low:1024kB high:1228kB active_anon:12848kB inactive_anon:120kB active_file:7564kB inactive_file:6164kB unevictable:0kB writepending:244kB present:65536kB managed:58704kB mlocked:0kB kernel_stack:496kB pagetables:616kB bounce:0kB free_pcp:20kB local_pcp:20kB free_cma:12648kB [ 1742.638628] lowmem_reserve[]: 0 0 0 [ 1742.640936] DMA: 676*4kB (UMEHC) 294*8kB (UMHC) 261*16kB (UMHC) 117*32kB (UMEHC) 46*64kB (UMEC) 14*128kB (UC) 2*256kB (C) 0*512kB 0*1024kB 0*2048kB 0*4096kB = 18224kB [ 1742.655056] 3753 total pagecache pages [ 1742.657553] 16384 pages RAM [ 1742.659927] 0 pages HighMem/MovableOnly [ 1742.664521] 1708 pages reserved [ 1742.667263] 4096 pages cma reserved
Den 11.12.2017 13.45, skrev Noralf Trønnes:
Den 11.12.2017 04.28, skrev David Lechner:
I'm using drm-misc/drm-misc-next and occasionally getting errors as seen in the stack traces below. I'm not really sure what to make of it. Any ideas?
The spi controller driver has told the spi core to allocate dummy buffers for tx/rx: spi_sync -> __spi_pump_messages -> spi_map_msg -> krealloc -> __do_krealloc -> kmalloc_track_caller
order:4 means it's trying to allocate 2^4*PAGE_SIZE = 64kB, which probably is the max DMA limit. So this is a pixel data transfer.
On my Raspberry Pi I've got 43 chunks of 64kB available if I have understood this right:
$ sudo cat /proc/buddyinfo Node 0, zone Normal 40 68 66 51 43 46 13 1 3 3 75
I don't know what those dummy buffers are used for.
tinydrm has a spi_max module parameter that can set the chunk size. I have wondered if I should just remove this parameter when spi-bcm2835 has been fixed as explained here: https://lists.freedesktop.org/archives/dri-devel/2017-February/132725.html I'm figuring it is better to add this parameter if the problem arises again, instead of preparing for something that might not be a problem anymore.
But now I'm reminded of this dummy buffer and if we were to send the entire framebuffer in one go, the dummy buffer would have to be the same size as the framebuffer. Not sure how well that works on long running boards with little ram, to be able to allocate 320*480*2 = 300kB ~= 512kB (continous) for the largest SPI displays on every flush, after months of run time.
How much ram do you have on the Lego module?
Noralf.
On 12/11/2017 07:37 AM, Noralf Trønnes wrote:
Den 11.12.2017 13.45, skrev Noralf Trønnes:
Den 11.12.2017 04.28, skrev David Lechner:
I'm using drm-misc/drm-misc-next and occasionally getting errors as seen in the stack traces below. I'm not really sure what to make of it. Any ideas?
The spi controller driver has told the spi core to allocate dummy buffers for tx/rx: spi_sync -> __spi_pump_messages -> spi_map_msg -> krealloc -> __do_krealloc -> kmalloc_track_caller
order:4 means it's trying to allocate 2^4*PAGE_SIZE = 64kB, which probably is the max DMA limit. So this is a pixel data transfer.
On my Raspberry Pi I've got 43 chunks of 64kB available if I have understood this right:
$ sudo cat /proc/buddyinfo Node 0, zone Normal 40 68 66 51 43 46 13 1 3 3 75
I don't know what those dummy buffers are used for.
tinydrm has a spi_max module parameter that can set the chunk size. I have wondered if I should just remove this parameter when spi-bcm2835 has been fixed as explained here: https://lists.freedesktop.org/archives/dri-devel/2017-February/132725.html I'm figuring it is better to add this parameter if the problem arises again, instead of preparing for something that might not be a problem anymore.
But now I'm reminded of this dummy buffer and if we were to send the entire framebuffer in one go, the dummy buffer would have to be the same size as the framebuffer. Not sure how well that works on long running boards with little ram, to be able to allocate 320*480*2 = 300kB ~= 512kB (continous) for the largest SPI displays on every flush, after months of run time.
How much ram do you have on the Lego module?
64MB
On 12/11/2017 06:45 AM, Noralf Trønnes wrote:
Den 11.12.2017 04.28, skrev David Lechner:
I'm using drm-misc/drm-misc-next and occasionally getting errors as seen in the stack traces below. I'm not really sure what to make of it. Any ideas?
I'm starting to wonder if there is some sort of race condition involved. I only get this warning on some boots, but when I do, it happens multiple times. Also, when I was debugging a an unrelated problem, I enabled some of the spin lock checking kernel options that really slow down the kernel. When I did this, I got this warning all of the time.
Would it be sensible to allocate a dummy RX buffer once instead of letting SPI allocate a new one for every transfer?
The spi controller driver has told the spi core to allocate dummy buffers for tx/rx: spi_sync -> __spi_pump_messages -> spi_map_msg -> krealloc -> __do_krealloc -> kmalloc_track_caller
order:4 means it's trying to allocate 2^4*PAGE_SIZE = 64kB, which probably is the max DMA limit. So this is a pixel data transfer.
On my Raspberry Pi I've got 43 chunks of 64kB available if I have understood this right:
$ sudo cat /proc/buddyinfo Node 0, zone Normal 40 68 66 51 43 46 13 1 3 3 75
I don't know what those dummy buffers are used for.
Noralf.
Den 14.12.2017 17.25, skrev David Lechner:
On 12/11/2017 06:45 AM, Noralf Trønnes wrote:
Den 11.12.2017 04.28, skrev David Lechner:
I'm using drm-misc/drm-misc-next and occasionally getting errors as seen in the stack traces below. I'm not really sure what to make of it. Any ideas?
I'm starting to wonder if there is some sort of race condition involved. I only get this warning on some boots, but when I do, it happens multiple times. Also, when I was debugging a an unrelated problem, I enabled some of the spin lock checking kernel options that really slow down the kernel. When I did this, I got this warning all of the time.
Would it be sensible to allocate a dummy RX buffer once instead of letting SPI allocate a new one for every transfer?
I have looked at the code and the dummy buffer is needed by some drivers for DMA transfers. They need both tx and rx buffers to do the transfer. A solution might be to let tinydrm allocate a dummy rx buffer and attach it to every spi_transfer.
We could check if it's really needed:
if (spi->controller->flags & (SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX)) // allocate dummy rx buffer
And maybe something like this:
+ * @dummy_rx_buf: Optional dummy rx buffer to avoid per transfer allocation of + * dummy rx buffers in the spi core.
int tinydrm_spi_transfer(struct spi_device *spi, u32 speed_hz, struct spi_transfer *header, u8 bpw, const void *buf, - size_t len) + size_t len, void dummy_rx_buf) { struct spi_transfer tr = { .bits_per_word = bpw, .speed_hz = speed_hz, + .rx_buf = dummy_rx_buf, };
Noralf.
The spi controller driver has told the spi core to allocate dummy buffers for tx/rx: spi_sync -> __spi_pump_messages -> spi_map_msg -> krealloc -> __do_krealloc -> kmalloc_track_caller
order:4 means it's trying to allocate 2^4*PAGE_SIZE = 64kB, which probably is the max DMA limit. So this is a pixel data transfer.
On my Raspberry Pi I've got 43 chunks of 64kB available if I have understood this right:
$ sudo cat /proc/buddyinfo Node 0, zone Normal 40 68 66 51 43 46 13 1 3 3 75
I don't know what those dummy buffers are used for.
Noralf.
On 12/14/2017 01:55 PM, Noralf Trønnes wrote:
Den 14.12.2017 17.25, skrev David Lechner:
On 12/11/2017 06:45 AM, Noralf Trønnes wrote:
Den 11.12.2017 04.28, skrev David Lechner:
I'm using drm-misc/drm-misc-next and occasionally getting errors as seen in the stack traces below. I'm not really sure what to make of it. Any ideas?
I'm starting to wonder if there is some sort of race condition involved. I only get this warning on some boots, but when I do, it happens multiple times. Also, when I was debugging a an unrelated problem, I enabled some of the spin lock checking kernel options that really slow down the kernel. When I did this, I got this warning all of the time.
Would it be sensible to allocate a dummy RX buffer once instead of letting SPI allocate a new one for every transfer?
I have looked at the code and the dummy buffer is needed by some drivers for DMA transfers. They need both tx and rx buffers to do the transfer. A solution might be to let tinydrm allocate a dummy rx buffer and attach it to every spi_transfer.
We could check if it's really needed:
if (spi->controller->flags & (SPI_CONTROLLER_MUST_RX | SPI_CONTROLLER_MUST_TX)) // allocate dummy rx buffer
And maybe something like this:
- @dummy_rx_buf: Optional dummy rx buffer to avoid per transfer allocation of
- * dummy rx buffers in the spi core.
int tinydrm_spi_transfer(struct spi_device *spi, u32 speed_hz, struct spi_transfer *header, u8 bpw, const void *buf, - size_t len) + size_t len, void dummy_rx_buf) { struct spi_transfer tr = { .bits_per_word = bpw, .speed_hz = speed_hz, + .rx_buf = dummy_rx_buf, };
Noralf.
FWIW, the problem seems to go away if CONFIG_SWAP=y.
I also made the changes as suggested and it seems to be working for CONFIG_SWAP=n. Preventing constant reallocations seems like a good idea to me even when memory is not limited. I'll submit a patch after a bit more testing.
dri-devel@lists.freedesktop.org