1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * DMA-BUF: dmabuf usage of all processes statistics.
4 *
5 * Copyright (c) 2022 Huawei Device Co., Ltd.
6 */
7
8#ifndef __DMA_BUF_PROCESS_INFO_H
9#define __DMA_BUF_PROCESS_INFO_H
10
11#ifdef CONFIG_DMABUF_PROCESS_INFO
12/**
13 * init_dma_buf_task_info - init exp_pid and exp_task_comm of dma_buf
14 * @buf:	[in]	pointer to struct dma_buf. If @buf IS_ERR_OR_NULL,
15 *		return with doing nothing.
16 */
17void init_dma_buf_task_info(struct dma_buf *buf);
18
19/**
20 * dma_buf_exp_pid - return exp_pid of @buf
21 * @buf:	[in]	pointer to struct dma_buf
22 *
23 * Return 0 if @buf IS_ERR_OR_NULL, else return buf->exp_pid
24 */
25pid_t dma_buf_exp_pid(const struct dma_buf *buf);
26
27/**
28 * dma_buf_exp_task_comm - return exp_task_comm of @buf
29 * @buf:	[in]	pointer to struct dma_buf
30 *
31 * Return NULL if @buf IS_ERR_OR_NULL, else return buf->exp_task_comm
32 */
33const char *dma_buf_exp_task_comm(const struct dma_buf *buf);
34
35/**
36 * dma_buf_process_info_init_procfs - module init: create node in procfs
37 */
38void dma_buf_process_info_init_procfs(void);
39
40/**
41 * dma_buf_process_info_uninit_procfs - module exit: remove node in procfs
42 */
43void dma_buf_process_info_uninit_procfs(void);
44
45/**
46 * dma_buf_process_info_init_debugfs - create debug node under @parent
47 * in debugfs.
48 * @parent:	[in]	pointer to struct dentry. If @parent IS_ERR_OR_NULL,
49 *		return -EINVAL
50 *
51 * Return 0 if success, otherwise return errno.
52 *
53 * Note that there is no related uninit function, since the debug node will
54 * be removed in dma_buf_uninit_debugfs() when dma_buf_deinit() called.
55 */
56int dma_buf_process_info_init_debugfs(struct dentry *parent);
57
58#else /* CONFIG_DMABUF_PROCESS_INFO */
59
60static inline void init_dma_buf_task_info(struct dma_buf *buf) {}
61
62static inline pid_t dma_buf_exp_pid(const struct dma_buf *buf)
63{
64	return 0;
65}
66
67static inline const char *dma_buf_exp_task_comm(const struct dma_buf *buf)
68{
69	return NULL;
70}
71
72static inline void dma_buf_process_info_init_procfs(void) {}
73
74static inline void dma_buf_process_info_uninit_procfs(void) {}
75
76static inline int
77dma_buf_process_info_init_debugfs(struct dentry *parent)
78{
79	return 0;
80}
81#endif /* CONFIG_DMABUF_PROCESS_INFO */
82#endif /* __DMA_BUF_PROCESS_INFO_H */
83
84