On Wed, May 18, 2022 at 5:03 AM Christian König christian.koenig@amd.com wrote:
Am 18.05.22 um 01:09 schrieb T.J. Mercier:
[SNIP]
Perhaps we should go just one step further and make a misc device node for dmabug debugging information to be in and just have userspace poll/read on the device node and we spit the info that used to be in debugfs out through that? That way this only affects systems when they want to read the information and not normal code paths? Yeah that's a hack, but this whole thing feels overly complex now.
Yeah, totally agree on the complexity note. I'm just absolutely not keen to add hack over hack over hack to make something work which from my point of view has some serious issues with it's design.
Why is this patch a hack? We found a problem with the initial design which nobody saw when it was originally created, and now we're trying to address it within the constraints that exist.
Well the issue is that you don't try to tackle the underlying problem, but rather just mitigate the unforeseen consequences. That is pretty clearly a hack to me.
Is there some other solution to the problem of exports getting blocked that you would suggest here?
Well pretty much the same as Greg outlined as well. Go back to your drawing board and come back with a solution which does not need such workarounds.
Alternatively you can give me a full overview of the design and explain why exactly that interface here is necessary in exactly that form.
We ended up here because we could not use debugfs. https://source.android.com/setup/start/android-11-release#debugfs
Another idea was adding per-buffer stats to procfs, but that was not an option since per-buffer stats are not process specific.
So it seemed like sysfs was an appropriate solution at the time. It comes with a stable interface as a bonus, but with the limitation of 1 value per file this leads to creating lots of files in sysfs for all dma buffers. This leads to increased kernfs lock contention, and unfortunately we try to take the lock on the hot path.
With the description and links to the userspace code which actually uses the feature I feel like that's a complete picture of what's currently happening with this interface. If you could explain what information is missing I'll do my best to provide it. https://cs.android.com/android/platform/superproject/+/master:system/memory/... https://cs.android.com/android/platform/superproject/+/master:system/memory/... https://cs.android.com/android/platform/superproject/+/master:frameworks/nat...
For example trying to do accounting based on DMA-bufs is extremely questionable to begin with. See a modern game for example can have between 10k and 100k of different buffers, reserving one file descriptor for each of those objects is absolutely not going to work.
So my request is to please describe your full use case and not just why you think this patch is justified.
The use case was described in the commit message when the feature was initially added (after discussion about it on the list) including links to code that uses the feature: https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flore.kerne...
Yeah and to be honest I have the strong feeling now that this was absolutely not well thought through.
I'm open to working on a replacement for this if we can't find an acceptable solution here, but I would appreciate some direction on what would be acceptable. For example Greg's idea sounds workable, but the question is if it mergeable?
This description as well as the in kernel documentation are not even remotely sufficient to explain what you guys are doing with this.
So please come up with a complete design description for both userspace and kernel why this interface here is necessary inside the upstream kernel.
If you can't convince me that this is a good idea I will just bluntly mark this DMA-buf sysfs interface as deprecated.
Regards, Christian.
Regards, Christian.
thanks,
greg k-h