Re: dma-api debugfs directory is not created since debugfs is not initialized

From: Robin Murphy
Date: Tue Apr 27 2021 - 08:32:58 EST


On 2021-04-27 12:39, Greg KH wrote:
On Tue, Apr 27, 2021 at 01:34:27PM +0200, Corentin Labbe wrote:
Hello

I try to debug some DMA problem on next-20210427, and so I have enabled CONFIG_DMA_API_DEBUG=y.
But the dma-api directory does show up in debugfs, but lot of other directory exists in it.

Does it show up properly in 5.12?

After debugging it seems due to commit 56348560d495 ("debugfs: do not attempt to create a new file before the filesystem is initalized")
Reverting the commit permit to "dma-api" debugfs to be found. (but seems not the right way to fix it).

We have had some odd start-up ordering issues that the above commit has
caused to show. Given that this commit is now in stable kernels, with
no report of this issue so far, I'm worried that maybe this is a dma
subsystem ordering issue?

Both debugfs_init() and dma_debug_init() do run at core_initcall level, and disassembling the vmlinux from my current working tree does indeed suggest that they somehow end up in the wrong relative order:

[...]
ffff80001160d0c8 <__initcall__kmod_debug__325_918_dma_debug_init1>:
ffff80001160d0c8: feb0d528 .word 0xfeb0d528

[...]

ffff80001160d108 <__initcall__kmod_debugfs__357_848_debugfs_init1>:
ffff80001160d108: fff4326c .word 0xfff4326c
[...]


I always had the impression that initcall ordering tended to work out roughly alphabetical, such that entries from fs/* might come before kernel/*, but I guess it's at the whims of the linker in the end :/

Perhaps the easiest thing to do is split out dma_debug_fs_init() and run that at a later level? We do want the dma-debug infrastructure itself to be up as early as possible, but I think the debugfs view of its internals can happily wait until closer to the time that there's actually a userspace to be able to look at it.

Robin.