This patch allows statistics to be enabled for each DMA-BUF in sysfs by enabling the config CONFIG_DMABUF_SYSFS_STATS. The following stats will be exposed by the interface: /sys/kernel/dmabuf/buffers/<inode_number>/exporter_name /sys/kernel/dmabuf/buffers/<inode_number>/size /sys/kernel/dmabuf/buffers/<inode_number>/attachments/<attach_uid>/device /sys/kernel/dmabuf/buffers/<inode_number>/attachments/<attach_uid>/map_counter The inode_number is unique for each DMA-BUF and was added earlier [1] in order to allow userspace to track DMA-BUF usage across different processes. Currently, this information is exposed in /sys/kernel/debug/dma_buf/bufinfo. However, since debugfs is considered unsafe to be mounted in production, it is being duplicated in sysfs. This information will be used to derive DMA-BUF per-exporter stats and per-device usage stats for Android Bug reports. The corresponding userspace changes can be found at [2]. Telemetry tools will also capture this information(along with other memory metrics) periodically as well as on important events like a foreground app kill (which might have been triggered by Low Memory Killer). It will also contribute to provide a snapshot of the system memory usage on other events such as OOM kills and Application Not Responding events. A shell script that can be run on a classic Linux environment to read out the DMA-BUF statistics can be found at [3](suggested by John Stultz). The patch contains the following improvements over the previous version: 1) Each attachment is represented by its own directory to allow creating a symlink to the importing device and to also provide room for future expansion. 2) The number of distinct mappings of each attachment is exposed in a separate file. 3) The per-buffer statistics are now in /sys/kernel/dmabuf/buffers inorder to make the interface expandable in future. All of the improvements above are based on suggestions/feedback from Daniel Vetter and Christian König. [1]: https://lore.kernel.org/patchwork/patch/1088791/ [2]: https://android-review.googlesource.com/q/topic:%22dmabuf-sysfs%22+(status:open%20OR%20status:merged) [3]: https://android-review.googlesource.com/c/platform/system/memory/libmeminfo/+/1549734 Bug: 167709539 Link: https://lore.kernel.org/linux-media/20210126204240.418297-1-hridya@google.com/ [hridya: minor rebase needed in include/linux/dma-buf.h for backporting] Signed-off-by: Hridya Valsaraju <hridya@google.com> Reported-by: kernel test robot <lkp@intel.com> Change-Id: I8a3342b57f2e21ff349839f5cf665980c97bf849
81 lines
2.6 KiB
Plaintext
81 lines
2.6 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0-only
|
|
menu "DMABUF options"
|
|
|
|
config SYNC_FILE
|
|
bool "Explicit Synchronization Framework"
|
|
default n
|
|
select DMA_SHARED_BUFFER
|
|
help
|
|
The Sync File Framework adds explicit synchronization via
|
|
userspace. It enables send/receive 'struct dma_fence' objects to/from
|
|
userspace via Sync File fds for synchronization between drivers via
|
|
userspace components. It has been ported from Android.
|
|
|
|
The first and main user for this is graphics in which a fence is
|
|
associated with a buffer. When a job is submitted to the GPU a fence
|
|
is attached to the buffer and is transferred via userspace, using Sync
|
|
Files fds, to the DRM driver for example. More details at
|
|
Documentation/driver-api/sync_file.rst.
|
|
|
|
config SW_SYNC
|
|
bool "Sync File Validation Framework"
|
|
default n
|
|
depends on SYNC_FILE
|
|
depends on DEBUG_FS
|
|
help
|
|
A sync object driver that uses a 32bit counter to coordinate
|
|
synchronization. Useful when there is no hardware primitive backing
|
|
the synchronization.
|
|
|
|
WARNING: improper use of this can result in deadlocking kernel
|
|
drivers from userspace. Intended for test and debug only.
|
|
|
|
config UDMABUF
|
|
bool "userspace dmabuf misc driver"
|
|
default n
|
|
depends on DMA_SHARED_BUFFER
|
|
depends on MEMFD_CREATE || COMPILE_TEST
|
|
help
|
|
A driver to let userspace turn memfd regions into dma-bufs.
|
|
Qemu can use this to create host dmabufs for guest framebuffers.
|
|
|
|
config DMABUF_MOVE_NOTIFY
|
|
bool "Move notify between drivers (EXPERIMENTAL)"
|
|
default n
|
|
help
|
|
Don't pin buffers if the dynamic DMA-buf interface is available on
|
|
both the exporter as well as the importer. This fixes a security
|
|
problem where userspace is able to pin unrestricted amounts of memory
|
|
through DMA-buf.
|
|
This is marked experimental because we don't yet have a consistent
|
|
execution context and memory management between drivers.
|
|
|
|
config DMABUF_SELFTESTS
|
|
tristate "Selftests for the dma-buf interfaces"
|
|
default n
|
|
depends on DMA_SHARED_BUFFER
|
|
|
|
menuconfig DMABUF_HEAPS
|
|
bool "DMA-BUF Userland Memory Heaps"
|
|
select DMA_SHARED_BUFFER
|
|
help
|
|
Choose this option to enable the DMA-BUF userland memory heaps.
|
|
This options creates per heap chardevs in /dev/dma_heap/ which
|
|
allows userspace to allocate dma-bufs that can be shared
|
|
between drivers.
|
|
|
|
menuconfig DMABUF_SYSFS_STATS
|
|
bool "DMA-BUF sysfs statistics"
|
|
select DMA_SHARED_BUFFER
|
|
help
|
|
Choose this option to enable DMA-BUF sysfs statistics
|
|
in location /sys/kernel/dmabuf/buffers.
|
|
|
|
/sys/kernel/dmabuf/buffers/<inode_number> will contain
|
|
statistics for the DMA-BUF with the unique inode number
|
|
<inode_number>.
|
|
|
|
source "drivers/dma-buf/heaps/Kconfig"
|
|
|
|
endmenu
|