#undef TRACE_SYSTEM
#define TRACE_SYSTEM fence

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

#include <linux/tracepoint.h>

struct fence;

TRACE_EVENT(fence_annotate_wait_on,

	/* fence: the fence waiting on f1, f1: the fence to be waited on. */
	TP_PROTO(struct fence *fence, struct fence *f1),

	TP_ARGS(fence, f1),

	TP_STRUCT__entry(
		__string(driver, fence->ops->get_driver_name(fence))
		__string(timeline, fence->ops->get_timeline_name(fence))
		__field(unsigned int, context)
		__field(unsigned int, seqno)

		__string(waiting_driver, f1->ops->get_driver_name(f1))
		__string(waiting_timeline, f1->ops->get_timeline_name(f1))
		__field(unsigned int, waiting_context)
		__field(unsigned int, waiting_seqno)
	),

	TP_fast_assign(
		__assign_str(driver, fence->ops->get_driver_name(fence))
		__assign_str(timeline, fence->ops->get_timeline_name(fence))
		__entry->context = fence->context;
		__entry->seqno = fence->seqno;

		__assign_str(waiting_driver, f1->ops->get_driver_name(f1))
		__assign_str(waiting_timeline, f1->ops->get_timeline_name(f1))
		__entry->waiting_context = f1->context;
		__entry->waiting_seqno = f1->seqno;

	),

	TP_printk("driver=%s timeline=%s context=%u seqno=%u "	\
		  "waits on driver=%s timeline=%s context=%u seqno=%u",
		  __get_str(driver), __get_str(timeline), __entry->context,
		  __entry->seqno,
		  __get_str(waiting_driver), __get_str(waiting_timeline),
		  __entry->waiting_context, __entry->waiting_seqno)
);

DECLARE_EVENT_CLASS(fence,

	TP_PROTO(struct fence *fence),

	TP_ARGS(fence),

	TP_STRUCT__entry(
		__string(driver, fence->ops->get_driver_name(fence))
		__string(timeline, fence->ops->get_timeline_name(fence))
		__field(unsigned int, context)
		__field(unsigned int, seqno)
	),

	TP_fast_assign(
		__assign_str(driver, fence->ops->get_driver_name(fence))
		__assign_str(timeline, fence->ops->get_timeline_name(fence))
		__entry->context = fence->context;
		__entry->seqno = fence->seqno;
	),

	TP_printk("driver=%s timeline=%s context=%u seqno=%u",
		  __get_str(driver), __get_str(timeline), __entry->context,
		  __entry->seqno)
);

DEFINE_EVENT(fence, fence_emit,

	TP_PROTO(struct fence *fence),

	TP_ARGS(fence)
);

DEFINE_EVENT(fence, fence_init,

	TP_PROTO(struct fence *fence),

	TP_ARGS(fence)
);

DEFINE_EVENT(fence, fence_destroy,

	TP_PROTO(struct fence *fence),

	TP_ARGS(fence)
);

DEFINE_EVENT(fence, fence_enable_signal,

	TP_PROTO(struct fence *fence),

	TP_ARGS(fence)
);

DEFINE_EVENT(fence, fence_signaled,

	TP_PROTO(struct fence *fence),

	TP_ARGS(fence)
);

DEFINE_EVENT(fence, fence_wait_start,

	TP_PROTO(struct fence *fence),

	TP_ARGS(fence)
);

DEFINE_EVENT(fence, fence_wait_end,

	TP_PROTO(struct fence *fence),

	TP_ARGS(fence)
);

#endif /*  _TRACE_FENCE_H */

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