root/include/trace/events/dma_buf.h
/* SPDX-License-Identifier: GPL-2.0 */
#undef TRACE_SYSTEM
#define TRACE_SYSTEM dma_buf

#if !defined(_TRACE_DMA_BUF_H) || defined(TRACE_HEADER_MULTI_READ)
#define _TRACE_DMA_BUF_H

#include <linux/dma-buf.h>
#include <linux/tracepoint.h>

DECLARE_EVENT_CLASS(dma_buf,

        TP_PROTO(struct dma_buf *dmabuf),

        TP_ARGS(dmabuf),

        TP_STRUCT__entry(
                __string(       exp_name,               dmabuf->exp_name)
                __field(        size_t,                 size)
                __field(        ino_t,                  ino)
        ),

        TP_fast_assign(
                __assign_str(exp_name);
                __entry->size   = dmabuf->size;
                __entry->ino    = dmabuf->file->f_inode->i_ino;
        ),

        TP_printk("exp_name=%s size=%zu ino=%lu",
                  __get_str(exp_name),
                  __entry->size,
                  __entry->ino)
);

DECLARE_EVENT_CLASS(dma_buf_attach_dev,

        TP_PROTO(struct dma_buf *dmabuf, struct dma_buf_attachment *attach,
                bool is_dynamic, struct device *dev),

        TP_ARGS(dmabuf, attach, is_dynamic, dev),

        TP_STRUCT__entry(
                __string(       dev_name,                       dev_name(dev))
                __string(       exp_name,                       dmabuf->exp_name)
                __field(        size_t,                         size)
                __field(        ino_t,                          ino)
                __field(        struct dma_buf_attachment *,    attach)
                __field(        bool,                           is_dynamic)
        ),

        TP_fast_assign(
                __assign_str(dev_name);
                __assign_str(exp_name);
                __entry->size           = dmabuf->size;
                __entry->ino            = dmabuf->file->f_inode->i_ino;
                __entry->is_dynamic     = is_dynamic;
                __entry->attach         = attach;
        ),

        TP_printk("exp_name=%s size=%zu ino=%lu attachment:%p is_dynamic=%d dev_name=%s",
                  __get_str(exp_name),
                  __entry->size,
                  __entry->ino,
                  __entry->attach,
                  __entry->is_dynamic,
                  __get_str(dev_name))
);

DECLARE_EVENT_CLASS(dma_buf_fd,

        TP_PROTO(struct dma_buf *dmabuf, int fd),

        TP_ARGS(dmabuf, fd),

        TP_STRUCT__entry(
                __string(       exp_name,               dmabuf->exp_name)
                __field(        size_t,                 size)
                __field(        ino_t,                  ino)
                __field(        int,                    fd)
        ),

        TP_fast_assign(
                __assign_str(exp_name);
                __entry->size   = dmabuf->size;
                __entry->ino    = dmabuf->file->f_inode->i_ino;
                __entry->fd     = fd;
        ),

        TP_printk("exp_name=%s size=%zu ino=%lu fd=%d",
                  __get_str(exp_name),
                  __entry->size,
                  __entry->ino,
                  __entry->fd)
);

DEFINE_EVENT(dma_buf, dma_buf_export,

        TP_PROTO(struct dma_buf *dmabuf),

        TP_ARGS(dmabuf)
);

DEFINE_EVENT(dma_buf, dma_buf_mmap_internal,

        TP_PROTO(struct dma_buf *dmabuf),

        TP_ARGS(dmabuf)
);

DEFINE_EVENT(dma_buf, dma_buf_mmap,

        TP_PROTO(struct dma_buf *dmabuf),

        TP_ARGS(dmabuf)
);

DEFINE_EVENT(dma_buf, dma_buf_put,

        TP_PROTO(struct dma_buf *dmabuf),

        TP_ARGS(dmabuf)
);

DEFINE_EVENT(dma_buf_attach_dev, dma_buf_dynamic_attach,

        TP_PROTO(struct dma_buf *dmabuf, struct dma_buf_attachment *attach,
                bool is_dynamic, struct device *dev),

        TP_ARGS(dmabuf, attach, is_dynamic, dev)
);

DEFINE_EVENT(dma_buf_attach_dev, dma_buf_detach,

        TP_PROTO(struct dma_buf *dmabuf, struct dma_buf_attachment *attach,
                bool is_dynamic, struct device *dev),

        TP_ARGS(dmabuf, attach, is_dynamic, dev)
);

DEFINE_EVENT_CONDITION(dma_buf_fd, dma_buf_fd,

        TP_PROTO(struct dma_buf *dmabuf, int fd),

        TP_ARGS(dmabuf, fd),

        TP_CONDITION(fd >= 0)
);

DEFINE_EVENT(dma_buf_fd, dma_buf_get,

        TP_PROTO(struct dma_buf *dmabuf, int fd),

        TP_ARGS(dmabuf, fd)
);

#endif /* _TRACE_DMA_BUF_H */

/* This part must be outside protection */
#include <trace/define_trace.h>