1/* SPDX-License-Identifier: GPL-2.0 */
2#undef TRACE_SYSTEM
3#define TRACE_SYSTEM percpu
4
5#if !defined(_TRACE_PERCPU_H) || defined(TRACE_HEADER_MULTI_READ)
6#define _TRACE_PERCPU_H
7
8#include <linux/tracepoint.h>
9#include <trace/events/mmflags.h>
10
11TRACE_EVENT(percpu_alloc_percpu,
12
13	TP_PROTO(unsigned long call_site,
14		 bool reserved, bool is_atomic, size_t size,
15		 size_t align, void *base_addr, int off,
16		 void __percpu *ptr, size_t bytes_alloc, gfp_t gfp_flags),
17
18	TP_ARGS(call_site, reserved, is_atomic, size, align, base_addr, off,
19		ptr, bytes_alloc, gfp_flags),
20
21	TP_STRUCT__entry(
22		__field(	unsigned long,		call_site	)
23		__field(	bool,			reserved	)
24		__field(	bool,			is_atomic	)
25		__field(	size_t,			size		)
26		__field(	size_t,			align		)
27		__field(	void *,			base_addr	)
28		__field(	int,			off		)
29		__field(	void __percpu *,	ptr		)
30		__field(	size_t,			bytes_alloc	)
31		__field(	unsigned long,		gfp_flags	)
32	),
33	TP_fast_assign(
34		__entry->call_site	= call_site;
35		__entry->reserved	= reserved;
36		__entry->is_atomic	= is_atomic;
37		__entry->size		= size;
38		__entry->align		= align;
39		__entry->base_addr	= base_addr;
40		__entry->off		= off;
41		__entry->ptr		= ptr;
42		__entry->bytes_alloc	= bytes_alloc;
43		__entry->gfp_flags	= (__force unsigned long)gfp_flags;
44	),
45
46	TP_printk("call_site=%pS reserved=%d is_atomic=%d size=%zu align=%zu base_addr=%p off=%d ptr=%p bytes_alloc=%zu gfp_flags=%s",
47		  (void *)__entry->call_site,
48		  __entry->reserved, __entry->is_atomic,
49		  __entry->size, __entry->align,
50		  __entry->base_addr, __entry->off, __entry->ptr,
51		  __entry->bytes_alloc, show_gfp_flags(__entry->gfp_flags))
52);
53
54TRACE_EVENT(percpu_free_percpu,
55
56	TP_PROTO(void *base_addr, int off, void __percpu *ptr),
57
58	TP_ARGS(base_addr, off, ptr),
59
60	TP_STRUCT__entry(
61		__field(	void *,			base_addr	)
62		__field(	int,			off		)
63		__field(	void __percpu *,	ptr		)
64	),
65
66	TP_fast_assign(
67		__entry->base_addr	= base_addr;
68		__entry->off		= off;
69		__entry->ptr		= ptr;
70	),
71
72	TP_printk("base_addr=%p off=%d ptr=%p",
73		__entry->base_addr, __entry->off, __entry->ptr)
74);
75
76TRACE_EVENT(percpu_alloc_percpu_fail,
77
78	TP_PROTO(bool reserved, bool is_atomic, size_t size, size_t align),
79
80	TP_ARGS(reserved, is_atomic, size, align),
81
82	TP_STRUCT__entry(
83		__field(	bool,	reserved	)
84		__field(	bool,	is_atomic	)
85		__field(	size_t,	size		)
86		__field(	size_t, align		)
87	),
88
89	TP_fast_assign(
90		__entry->reserved	= reserved;
91		__entry->is_atomic	= is_atomic;
92		__entry->size		= size;
93		__entry->align		= align;
94	),
95
96	TP_printk("reserved=%d is_atomic=%d size=%zu align=%zu",
97		  __entry->reserved, __entry->is_atomic,
98		  __entry->size, __entry->align)
99);
100
101TRACE_EVENT(percpu_create_chunk,
102
103	TP_PROTO(void *base_addr),
104
105	TP_ARGS(base_addr),
106
107	TP_STRUCT__entry(
108		__field(	void *, base_addr	)
109	),
110
111	TP_fast_assign(
112		__entry->base_addr	= base_addr;
113	),
114
115	TP_printk("base_addr=%p", __entry->base_addr)
116);
117
118TRACE_EVENT(percpu_destroy_chunk,
119
120	TP_PROTO(void *base_addr),
121
122	TP_ARGS(base_addr),
123
124	TP_STRUCT__entry(
125		__field(	void *,	base_addr	)
126	),
127
128	TP_fast_assign(
129		__entry->base_addr	= base_addr;
130	),
131
132	TP_printk("base_addr=%p", __entry->base_addr)
133);
134
135#endif /* _TRACE_PERCPU_H */
136
137#include <trace/define_trace.h>
138