xref: /openbmc/linux/include/trace/events/kmem.h (revision f1a79412)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2d0b6e04aSLi Zefan #undef TRACE_SYSTEM
3d0b6e04aSLi Zefan #define TRACE_SYSTEM kmem
4d0b6e04aSLi Zefan 
5ad8d75ffSSteven Rostedt #if !defined(_TRACE_KMEM_H) || defined(TRACE_HEADER_MULTI_READ)
6ad8d75ffSSteven Rostedt #define _TRACE_KMEM_H
7ad8d75ffSSteven Rostedt 
8ad8d75ffSSteven Rostedt #include <linux/types.h>
9ad8d75ffSSteven Rostedt #include <linux/tracepoint.h>
10420adbe9SVlastimil Babka #include <trace/events/mmflags.h>
1162ba180eSSteven Rostedt 
122c1d697fSHyeonggon Yoo TRACE_EVENT(kmem_cache_alloc,
13ad8d75ffSSteven Rostedt 
14ad8d75ffSSteven Rostedt 	TP_PROTO(unsigned long call_site,
15ad8d75ffSSteven Rostedt 		 const void *ptr,
16b347aa7bSVasily Averin 		 struct kmem_cache *s,
17ad8d75ffSSteven Rostedt 		 gfp_t gfp_flags,
18ad8d75ffSSteven Rostedt 		 int node),
19ad8d75ffSSteven Rostedt 
202c1d697fSHyeonggon Yoo 	TP_ARGS(call_site, ptr, s, gfp_flags, node),
21ad8d75ffSSteven Rostedt 
22ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
23ad8d75ffSSteven Rostedt 		__field(	unsigned long,	call_site	)
24ad8d75ffSSteven Rostedt 		__field(	const void *,	ptr		)
25ad8d75ffSSteven Rostedt 		__field(	size_t,		bytes_req	)
26ad8d75ffSSteven Rostedt 		__field(	size_t,		bytes_alloc	)
27fe573327SVasily Averin 		__field(	unsigned long,	gfp_flags	)
28ad8d75ffSSteven Rostedt 		__field(	int,		node		)
29b347aa7bSVasily Averin 		__field(	bool,		accounted	)
30ad8d75ffSSteven Rostedt 	),
31ad8d75ffSSteven Rostedt 
32ad8d75ffSSteven Rostedt 	TP_fast_assign(
33ad8d75ffSSteven Rostedt 		__entry->call_site	= call_site;
34ad8d75ffSSteven Rostedt 		__entry->ptr		= ptr;
352c1d697fSHyeonggon Yoo 		__entry->bytes_req	= s->object_size;
362c1d697fSHyeonggon Yoo 		__entry->bytes_alloc	= s->size;
37fe573327SVasily Averin 		__entry->gfp_flags	= (__force unsigned long)gfp_flags;
38ad8d75ffSSteven Rostedt 		__entry->node		= node;
39b347aa7bSVasily Averin 		__entry->accounted	= IS_ENABLED(CONFIG_MEMCG_KMEM) ?
40b347aa7bSVasily Averin 					  ((gfp_flags & __GFP_ACCOUNT) ||
412c1d697fSHyeonggon Yoo 					  (s->flags & SLAB_ACCOUNT)) : false;
42ad8d75ffSSteven Rostedt 	),
43ad8d75ffSSteven Rostedt 
44b347aa7bSVasily Averin 	TP_printk("call_site=%pS ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%s node=%d accounted=%s",
457e168b9bSJunyong Sun 		(void *)__entry->call_site,
46ad8d75ffSSteven Rostedt 		__entry->ptr,
47ad8d75ffSSteven Rostedt 		__entry->bytes_req,
48ad8d75ffSSteven Rostedt 		__entry->bytes_alloc,
4962ba180eSSteven Rostedt 		show_gfp_flags(__entry->gfp_flags),
50b347aa7bSVasily Averin 		__entry->node,
51b347aa7bSVasily Averin 		__entry->accounted ? "true" : "false")
52ad8d75ffSSteven Rostedt );
53ad8d75ffSSteven Rostedt 
542c1d697fSHyeonggon Yoo TRACE_EVENT(kmalloc,
55ad8d75ffSSteven Rostedt 
562c1d697fSHyeonggon Yoo 	TP_PROTO(unsigned long call_site,
572c1d697fSHyeonggon Yoo 		 const void *ptr,
582c1d697fSHyeonggon Yoo 		 size_t bytes_req,
592c1d697fSHyeonggon Yoo 		 size_t bytes_alloc,
602c1d697fSHyeonggon Yoo 		 gfp_t gfp_flags,
612c1d697fSHyeonggon Yoo 		 int node),
62ad8d75ffSSteven Rostedt 
632c1d697fSHyeonggon Yoo 	TP_ARGS(call_site, ptr, bytes_req, bytes_alloc, gfp_flags, node),
64ad8d75ffSSteven Rostedt 
652c1d697fSHyeonggon Yoo 	TP_STRUCT__entry(
662c1d697fSHyeonggon Yoo 		__field(	unsigned long,	call_site	)
672c1d697fSHyeonggon Yoo 		__field(	const void *,	ptr		)
682c1d697fSHyeonggon Yoo 		__field(	size_t,		bytes_req	)
692c1d697fSHyeonggon Yoo 		__field(	size_t,		bytes_alloc	)
702c1d697fSHyeonggon Yoo 		__field(	unsigned long,	gfp_flags	)
712c1d697fSHyeonggon Yoo 		__field(	int,		node		)
722c1d697fSHyeonggon Yoo 	),
7353d0422cSLi Zefan 
742c1d697fSHyeonggon Yoo 	TP_fast_assign(
752c1d697fSHyeonggon Yoo 		__entry->call_site	= call_site;
762c1d697fSHyeonggon Yoo 		__entry->ptr		= ptr;
772c1d697fSHyeonggon Yoo 		__entry->bytes_req	= bytes_req;
782c1d697fSHyeonggon Yoo 		__entry->bytes_alloc	= bytes_alloc;
792c1d697fSHyeonggon Yoo 		__entry->gfp_flags	= (__force unsigned long)gfp_flags;
802c1d697fSHyeonggon Yoo 		__entry->node		= node;
812c1d697fSHyeonggon Yoo 	),
8253d0422cSLi Zefan 
832c1d697fSHyeonggon Yoo 	TP_printk("call_site=%pS ptr=%p bytes_req=%zu bytes_alloc=%zu gfp_flags=%s node=%d accounted=%s",
842c1d697fSHyeonggon Yoo 		(void *)__entry->call_site,
852c1d697fSHyeonggon Yoo 		__entry->ptr,
862c1d697fSHyeonggon Yoo 		__entry->bytes_req,
872c1d697fSHyeonggon Yoo 		__entry->bytes_alloc,
882c1d697fSHyeonggon Yoo 		show_gfp_flags(__entry->gfp_flags),
892c1d697fSHyeonggon Yoo 		__entry->node,
902c1d697fSHyeonggon Yoo 		(IS_ENABLED(CONFIG_MEMCG_KMEM) &&
912c1d697fSHyeonggon Yoo 		 (__entry->gfp_flags & (__force unsigned long)__GFP_ACCOUNT)) ? "true" : "false")
9253d0422cSLi Zefan );
9353d0422cSLi Zefan 
943544de8eSJacob Wen TRACE_EVENT(kfree,
95ad8d75ffSSteven Rostedt 
96ad8d75ffSSteven Rostedt 	TP_PROTO(unsigned long call_site, const void *ptr),
97ad8d75ffSSteven Rostedt 
98ad8d75ffSSteven Rostedt 	TP_ARGS(call_site, ptr),
99ad8d75ffSSteven Rostedt 
100ad8d75ffSSteven Rostedt 	TP_STRUCT__entry(
101ad8d75ffSSteven Rostedt 		__field(	unsigned long,	call_site	)
102ad8d75ffSSteven Rostedt 		__field(	const void *,	ptr		)
103ad8d75ffSSteven Rostedt 	),
104ad8d75ffSSteven Rostedt 
105ad8d75ffSSteven Rostedt 	TP_fast_assign(
106ad8d75ffSSteven Rostedt 		__entry->call_site	= call_site;
107ad8d75ffSSteven Rostedt 		__entry->ptr		= ptr;
108ad8d75ffSSteven Rostedt 	),
109ad8d75ffSSteven Rostedt 
110f7d6316fSChangbin Du 	TP_printk("call_site=%pS ptr=%p",
111f7d6316fSChangbin Du 		  (void *)__entry->call_site, __entry->ptr)
112ad8d75ffSSteven Rostedt );
113ad8d75ffSSteven Rostedt 
1143544de8eSJacob Wen TRACE_EVENT(kmem_cache_free,
115ad8d75ffSSteven Rostedt 
1162c1d697fSHyeonggon Yoo 	TP_PROTO(unsigned long call_site, const void *ptr, const struct kmem_cache *s),
117ad8d75ffSSteven Rostedt 
1182c1d697fSHyeonggon Yoo 	TP_ARGS(call_site, ptr, s),
119ad8d75ffSSteven Rostedt 
1203544de8eSJacob Wen 	TP_STRUCT__entry(
1213544de8eSJacob Wen 		__field(	unsigned long,	call_site	)
1223544de8eSJacob Wen 		__field(	const void *,	ptr		)
1232c1d697fSHyeonggon Yoo 		__string(	name,		s->name		)
1243544de8eSJacob Wen 	),
125ad8d75ffSSteven Rostedt 
1263544de8eSJacob Wen 	TP_fast_assign(
1273544de8eSJacob Wen 		__entry->call_site	= call_site;
1283544de8eSJacob Wen 		__entry->ptr		= ptr;
1292c1d697fSHyeonggon Yoo 		__assign_str(name, s->name);
1303544de8eSJacob Wen 	),
131ad8d75ffSSteven Rostedt 
1323544de8eSJacob Wen 	TP_printk("call_site=%pS ptr=%p name=%s",
133d8145679SSteven Rostedt (VMware) 		  (void *)__entry->call_site, __entry->ptr, __get_str(name))
134ad8d75ffSSteven Rostedt );
1354b4f278cSMel Gorman 
136633f6f58SSteven Rostedt (Red Hat) TRACE_EVENT(mm_page_free,
1374b4f278cSMel Gorman 
1384b4f278cSMel Gorman 	TP_PROTO(struct page *page, unsigned int order),
1394b4f278cSMel Gorman 
1404b4f278cSMel Gorman 	TP_ARGS(page, order),
1414b4f278cSMel Gorman 
1424b4f278cSMel Gorman 	TP_STRUCT__entry(
1439fdd8a87SNamhyung Kim 		__field(	unsigned long,	pfn		)
1444b4f278cSMel Gorman 		__field(	unsigned int,	order		)
1454b4f278cSMel Gorman 	),
1464b4f278cSMel Gorman 
1474b4f278cSMel Gorman 	TP_fast_assign(
1489fdd8a87SNamhyung Kim 		__entry->pfn		= page_to_pfn(page);
1494b4f278cSMel Gorman 		__entry->order		= order;
1504b4f278cSMel Gorman 	),
1514b4f278cSMel Gorman 
15253d884a6SVincent Whitchurch 	TP_printk("page=%p pfn=0x%lx order=%d",
1539fdd8a87SNamhyung Kim 			pfn_to_page(__entry->pfn),
1549fdd8a87SNamhyung Kim 			__entry->pfn,
1554b4f278cSMel Gorman 			__entry->order)
1564b4f278cSMel Gorman );
1574b4f278cSMel Gorman 
158b413d48aSKonstantin Khlebnikov TRACE_EVENT(mm_page_free_batched,
1594b4f278cSMel Gorman 
1602d4894b5SMel Gorman 	TP_PROTO(struct page *page),
1614b4f278cSMel Gorman 
1622d4894b5SMel Gorman 	TP_ARGS(page),
1634b4f278cSMel Gorman 
1644b4f278cSMel Gorman 	TP_STRUCT__entry(
1659fdd8a87SNamhyung Kim 		__field(	unsigned long,	pfn		)
1664b4f278cSMel Gorman 	),
1674b4f278cSMel Gorman 
1684b4f278cSMel Gorman 	TP_fast_assign(
1699fdd8a87SNamhyung Kim 		__entry->pfn		= page_to_pfn(page);
1704b4f278cSMel Gorman 	),
1714b4f278cSMel Gorman 
17253d884a6SVincent Whitchurch 	TP_printk("page=%p pfn=0x%lx order=0",
1739fdd8a87SNamhyung Kim 			pfn_to_page(__entry->pfn),
1742d4894b5SMel Gorman 			__entry->pfn)
1754b4f278cSMel Gorman );
1764b4f278cSMel Gorman 
1774b4f278cSMel Gorman TRACE_EVENT(mm_page_alloc,
1784b4f278cSMel Gorman 
1794b4f278cSMel Gorman 	TP_PROTO(struct page *page, unsigned int order,
1804b4f278cSMel Gorman 			gfp_t gfp_flags, int migratetype),
1814b4f278cSMel Gorman 
1824b4f278cSMel Gorman 	TP_ARGS(page, order, gfp_flags, migratetype),
1834b4f278cSMel Gorman 
1844b4f278cSMel Gorman 	TP_STRUCT__entry(
1859fdd8a87SNamhyung Kim 		__field(	unsigned long,	pfn		)
1864b4f278cSMel Gorman 		__field(	unsigned int,	order		)
187fe573327SVasily Averin 		__field(	unsigned long,	gfp_flags	)
1884b4f278cSMel Gorman 		__field(	int,		migratetype	)
1894b4f278cSMel Gorman 	),
1904b4f278cSMel Gorman 
1914b4f278cSMel Gorman 	TP_fast_assign(
1929fdd8a87SNamhyung Kim 		__entry->pfn		= page ? page_to_pfn(page) : -1UL;
1934b4f278cSMel Gorman 		__entry->order		= order;
194fe573327SVasily Averin 		__entry->gfp_flags	= (__force unsigned long)gfp_flags;
1954b4f278cSMel Gorman 		__entry->migratetype	= migratetype;
1964b4f278cSMel Gorman 	),
1974b4f278cSMel Gorman 
19853d884a6SVincent Whitchurch 	TP_printk("page=%p pfn=0x%lx order=%d migratetype=%d gfp_flags=%s",
1999fdd8a87SNamhyung Kim 		__entry->pfn != -1UL ? pfn_to_page(__entry->pfn) : NULL,
2009fdd8a87SNamhyung Kim 		__entry->pfn != -1UL ? __entry->pfn : 0,
2014b4f278cSMel Gorman 		__entry->order,
2024b4f278cSMel Gorman 		__entry->migratetype,
2034b4f278cSMel Gorman 		show_gfp_flags(__entry->gfp_flags))
2044b4f278cSMel Gorman );
2054b4f278cSMel Gorman 
20653d0422cSLi Zefan DECLARE_EVENT_CLASS(mm_page,
2070d3d062aSMel Gorman 
20810e0f753SWonhyuk Yang 	TP_PROTO(struct page *page, unsigned int order, int migratetype,
20910e0f753SWonhyuk Yang 		 int percpu_refill),
2100d3d062aSMel Gorman 
21110e0f753SWonhyuk Yang 	TP_ARGS(page, order, migratetype, percpu_refill),
2120d3d062aSMel Gorman 
2130d3d062aSMel Gorman 	TP_STRUCT__entry(
2149fdd8a87SNamhyung Kim 		__field(	unsigned long,	pfn		)
2150d3d062aSMel Gorman 		__field(	unsigned int,	order		)
2160d3d062aSMel Gorman 		__field(	int,		migratetype	)
21710e0f753SWonhyuk Yang 		__field(	int,		percpu_refill	)
2180d3d062aSMel Gorman 	),
2190d3d062aSMel Gorman 
2200d3d062aSMel Gorman 	TP_fast_assign(
2219fdd8a87SNamhyung Kim 		__entry->pfn		= page ? page_to_pfn(page) : -1UL;
2220d3d062aSMel Gorman 		__entry->order		= order;
2230d3d062aSMel Gorman 		__entry->migratetype	= migratetype;
22410e0f753SWonhyuk Yang 		__entry->percpu_refill	= percpu_refill;
2250d3d062aSMel Gorman 	),
2260d3d062aSMel Gorman 
22753d884a6SVincent Whitchurch 	TP_printk("page=%p pfn=0x%lx order=%u migratetype=%d percpu_refill=%d",
2289fdd8a87SNamhyung Kim 		__entry->pfn != -1UL ? pfn_to_page(__entry->pfn) : NULL,
2299fdd8a87SNamhyung Kim 		__entry->pfn != -1UL ? __entry->pfn : 0,
2300d3d062aSMel Gorman 		__entry->order,
2310d3d062aSMel Gorman 		__entry->migratetype,
23210e0f753SWonhyuk Yang 		__entry->percpu_refill)
2330d3d062aSMel Gorman );
2340d3d062aSMel Gorman 
23553d0422cSLi Zefan DEFINE_EVENT(mm_page, mm_page_alloc_zone_locked,
2360d3d062aSMel Gorman 
23710e0f753SWonhyuk Yang 	TP_PROTO(struct page *page, unsigned int order, int migratetype,
23810e0f753SWonhyuk Yang 		 int percpu_refill),
23953d0422cSLi Zefan 
24010e0f753SWonhyuk Yang 	TP_ARGS(page, order, migratetype, percpu_refill)
24153d0422cSLi Zefan );
24253d0422cSLi Zefan 
243633f6f58SSteven Rostedt (Red Hat) TRACE_EVENT(mm_page_pcpu_drain,
24453d0422cSLi Zefan 
24553d0422cSLi Zefan 	TP_PROTO(struct page *page, unsigned int order, int migratetype),
2460d3d062aSMel Gorman 
2470d3d062aSMel Gorman 	TP_ARGS(page, order, migratetype),
2480d3d062aSMel Gorman 
249649b8de2SShreyas B. Prabhu 	TP_STRUCT__entry(
250649b8de2SShreyas B. Prabhu 		__field(	unsigned long,	pfn		)
251649b8de2SShreyas B. Prabhu 		__field(	unsigned int,	order		)
252649b8de2SShreyas B. Prabhu 		__field(	int,		migratetype	)
253649b8de2SShreyas B. Prabhu 	),
254649b8de2SShreyas B. Prabhu 
255649b8de2SShreyas B. Prabhu 	TP_fast_assign(
256649b8de2SShreyas B. Prabhu 		__entry->pfn		= page ? page_to_pfn(page) : -1UL;
257649b8de2SShreyas B. Prabhu 		__entry->order		= order;
258649b8de2SShreyas B. Prabhu 		__entry->migratetype	= migratetype;
259649b8de2SShreyas B. Prabhu 	),
260649b8de2SShreyas B. Prabhu 
26153d884a6SVincent Whitchurch 	TP_printk("page=%p pfn=0x%lx order=%d migratetype=%d",
2629fdd8a87SNamhyung Kim 		pfn_to_page(__entry->pfn), __entry->pfn,
26353d0422cSLi Zefan 		__entry->order, __entry->migratetype)
2640d3d062aSMel Gorman );
2650d3d062aSMel Gorman 
266e0fff1bdSMel Gorman TRACE_EVENT(mm_page_alloc_extfrag,
267e0fff1bdSMel Gorman 
268e0fff1bdSMel Gorman 	TP_PROTO(struct page *page,
269e0fff1bdSMel Gorman 		int alloc_order, int fallback_order,
27099592d59SVlastimil Babka 		int alloc_migratetype, int fallback_migratetype),
271e0fff1bdSMel Gorman 
272e0fff1bdSMel Gorman 	TP_ARGS(page,
273e0fff1bdSMel Gorman 		alloc_order, fallback_order,
27499592d59SVlastimil Babka 		alloc_migratetype, fallback_migratetype),
275e0fff1bdSMel Gorman 
276e0fff1bdSMel Gorman 	TP_STRUCT__entry(
2779fdd8a87SNamhyung Kim 		__field(	unsigned long,	pfn			)
278e0fff1bdSMel Gorman 		__field(	int,		alloc_order		)
279e0fff1bdSMel Gorman 		__field(	int,		fallback_order		)
280e0fff1bdSMel Gorman 		__field(	int,		alloc_migratetype	)
281e0fff1bdSMel Gorman 		__field(	int,		fallback_migratetype	)
282f92310c1SSrivatsa S. Bhat 		__field(	int,		change_ownership	)
283e0fff1bdSMel Gorman 	),
284e0fff1bdSMel Gorman 
285e0fff1bdSMel Gorman 	TP_fast_assign(
2869fdd8a87SNamhyung Kim 		__entry->pfn			= page_to_pfn(page);
287e0fff1bdSMel Gorman 		__entry->alloc_order		= alloc_order;
288e0fff1bdSMel Gorman 		__entry->fallback_order		= fallback_order;
289e0fff1bdSMel Gorman 		__entry->alloc_migratetype	= alloc_migratetype;
290e0fff1bdSMel Gorman 		__entry->fallback_migratetype	= fallback_migratetype;
29199592d59SVlastimil Babka 		__entry->change_ownership	= (alloc_migratetype ==
29299592d59SVlastimil Babka 					get_pageblock_migratetype(page));
293e0fff1bdSMel Gorman 	),
294e0fff1bdSMel Gorman 
29553d884a6SVincent Whitchurch 	TP_printk("page=%p pfn=0x%lx alloc_order=%d fallback_order=%d pageblock_order=%d alloc_migratetype=%d fallback_migratetype=%d fragmenting=%d change_ownership=%d",
2969fdd8a87SNamhyung Kim 		pfn_to_page(__entry->pfn),
2979fdd8a87SNamhyung Kim 		__entry->pfn,
298e0fff1bdSMel Gorman 		__entry->alloc_order,
299e0fff1bdSMel Gorman 		__entry->fallback_order,
300e0fff1bdSMel Gorman 		pageblock_order,
301e0fff1bdSMel Gorman 		__entry->alloc_migratetype,
302e0fff1bdSMel Gorman 		__entry->fallback_migratetype,
303e0fff1bdSMel Gorman 		__entry->fallback_order < pageblock_order,
304f92310c1SSrivatsa S. Bhat 		__entry->change_ownership)
305e0fff1bdSMel Gorman );
306e0fff1bdSMel Gorman 
307e4dcad20SJoel Fernandes (Google) /*
308e4dcad20SJoel Fernandes (Google)  * Required for uniquely and securely identifying mm in rss_stat tracepoint.
309e4dcad20SJoel Fernandes (Google)  */
310e4dcad20SJoel Fernandes (Google) #ifndef __PTR_TO_HASHVAL
mm_ptr_to_hash(const void * ptr)311e4dcad20SJoel Fernandes (Google) static unsigned int __maybe_unused mm_ptr_to_hash(const void *ptr)
312e4dcad20SJoel Fernandes (Google) {
313e4dcad20SJoel Fernandes (Google) 	int ret;
314e4dcad20SJoel Fernandes (Google) 	unsigned long hashval;
315e4dcad20SJoel Fernandes (Google) 
316e4dcad20SJoel Fernandes (Google) 	ret = ptr_to_hashval(ptr, &hashval);
317e4dcad20SJoel Fernandes (Google) 	if (ret)
318e4dcad20SJoel Fernandes (Google) 		return 0;
319e4dcad20SJoel Fernandes (Google) 
320e4dcad20SJoel Fernandes (Google) 	/* The hashed value is only 32-bit */
321e4dcad20SJoel Fernandes (Google) 	return (unsigned int)hashval;
322e4dcad20SJoel Fernandes (Google) }
323e4dcad20SJoel Fernandes (Google) #define __PTR_TO_HASHVAL
324e4dcad20SJoel Fernandes (Google) #endif
325e4dcad20SJoel Fernandes (Google) 
326f9001107SOvidiu Panait #define TRACE_MM_PAGES		\
327f9001107SOvidiu Panait 	EM(MM_FILEPAGES)	\
328f9001107SOvidiu Panait 	EM(MM_ANONPAGES)	\
329f9001107SOvidiu Panait 	EM(MM_SWAPENTS)		\
330f9001107SOvidiu Panait 	EMe(MM_SHMEMPAGES)
331f9001107SOvidiu Panait 
332f9001107SOvidiu Panait #undef EM
333f9001107SOvidiu Panait #undef EMe
334f9001107SOvidiu Panait 
335f9001107SOvidiu Panait #define EM(a)	TRACE_DEFINE_ENUM(a);
336f9001107SOvidiu Panait #define EMe(a)	TRACE_DEFINE_ENUM(a);
337f9001107SOvidiu Panait 
338f9001107SOvidiu Panait TRACE_MM_PAGES
339f9001107SOvidiu Panait 
340f9001107SOvidiu Panait #undef EM
341f9001107SOvidiu Panait #undef EMe
342f9001107SOvidiu Panait 
343f9001107SOvidiu Panait #define EM(a)	{ a, #a },
344f9001107SOvidiu Panait #define EMe(a)	{ a, #a }
345f9001107SOvidiu Panait 
346b3d1411bSJoel Fernandes (Google) TRACE_EVENT(rss_stat,
347b3d1411bSJoel Fernandes (Google) 
348e4dcad20SJoel Fernandes (Google) 	TP_PROTO(struct mm_struct *mm,
349*f1a79412SShakeel Butt 		int member),
350b3d1411bSJoel Fernandes (Google) 
351*f1a79412SShakeel Butt 	TP_ARGS(mm, member),
352b3d1411bSJoel Fernandes (Google) 
353b3d1411bSJoel Fernandes (Google) 	TP_STRUCT__entry(
354e4dcad20SJoel Fernandes (Google) 		__field(unsigned int, mm_id)
355e4dcad20SJoel Fernandes (Google) 		__field(unsigned int, curr)
356b3d1411bSJoel Fernandes (Google) 		__field(int, member)
357b3d1411bSJoel Fernandes (Google) 		__field(long, size)
358b3d1411bSJoel Fernandes (Google) 	),
359b3d1411bSJoel Fernandes (Google) 
360b3d1411bSJoel Fernandes (Google) 	TP_fast_assign(
361e4dcad20SJoel Fernandes (Google) 		__entry->mm_id = mm_ptr_to_hash(mm);
362e4dcad20SJoel Fernandes (Google) 		__entry->curr = !!(current->mm == mm);
363b3d1411bSJoel Fernandes (Google) 		__entry->member = member;
364*f1a79412SShakeel Butt 		__entry->size = (percpu_counter_sum_positive(&mm->rss_stat[member])
365*f1a79412SShakeel Butt 							    << PAGE_SHIFT);
366b3d1411bSJoel Fernandes (Google) 	),
367b3d1411bSJoel Fernandes (Google) 
368f9001107SOvidiu Panait 	TP_printk("mm_id=%u curr=%d type=%s size=%ldB",
369e4dcad20SJoel Fernandes (Google) 		__entry->mm_id,
370e4dcad20SJoel Fernandes (Google) 		__entry->curr,
371f9001107SOvidiu Panait 		__print_symbolic(__entry->member, TRACE_MM_PAGES),
372b3d1411bSJoel Fernandes (Google) 		__entry->size)
373b3d1411bSJoel Fernandes (Google) 	);
374ad8d75ffSSteven Rostedt #endif /* _TRACE_KMEM_H */
375ad8d75ffSSteven Rostedt 
376ad8d75ffSSteven Rostedt /* This part must be outside protection */
377ad8d75ffSSteven Rostedt #include <trace/define_trace.h>
378