diff options
-rw-r--r-- | include/trace/events/kmem.h | 74 | ||||
-rw-r--r-- | mm/page_alloc.c | 7 |
2 files changed, 80 insertions, 1 deletions
diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h index 1493c541f9c4..0d358a0d45c1 100644 --- a/include/trace/events/kmem.h +++ b/include/trace/events/kmem.h | |||
@@ -225,6 +225,80 @@ TRACE_EVENT(kmem_cache_free, | |||
225 | 225 | ||
226 | TP_printk("call_site=%lx ptr=%p", __entry->call_site, __entry->ptr) | 226 | TP_printk("call_site=%lx ptr=%p", __entry->call_site, __entry->ptr) |
227 | ); | 227 | ); |
228 | |||
229 | TRACE_EVENT(mm_page_free_direct, | ||
230 | |||
231 | TP_PROTO(struct page *page, unsigned int order), | ||
232 | |||
233 | TP_ARGS(page, order), | ||
234 | |||
235 | TP_STRUCT__entry( | ||
236 | __field( struct page *, page ) | ||
237 | __field( unsigned int, order ) | ||
238 | ), | ||
239 | |||
240 | TP_fast_assign( | ||
241 | __entry->page = page; | ||
242 | __entry->order = order; | ||
243 | ), | ||
244 | |||
245 | TP_printk("page=%p pfn=%lu order=%d", | ||
246 | __entry->page, | ||
247 | page_to_pfn(__entry->page), | ||
248 | __entry->order) | ||
249 | ); | ||
250 | |||
251 | TRACE_EVENT(mm_pagevec_free, | ||
252 | |||
253 | TP_PROTO(struct page *page, int cold), | ||
254 | |||
255 | TP_ARGS(page, cold), | ||
256 | |||
257 | TP_STRUCT__entry( | ||
258 | __field( struct page *, page ) | ||
259 | __field( int, cold ) | ||
260 | ), | ||
261 | |||
262 | TP_fast_assign( | ||
263 | __entry->page = page; | ||
264 | __entry->cold = cold; | ||
265 | ), | ||
266 | |||
267 | TP_printk("page=%p pfn=%lu order=0 cold=%d", | ||
268 | __entry->page, | ||
269 | page_to_pfn(__entry->page), | ||
270 | __entry->cold) | ||
271 | ); | ||
272 | |||
273 | TRACE_EVENT(mm_page_alloc, | ||
274 | |||
275 | TP_PROTO(struct page *page, unsigned int order, | ||
276 | gfp_t gfp_flags, int migratetype), | ||
277 | |||
278 | TP_ARGS(page, order, gfp_flags, migratetype), | ||
279 | |||
280 | TP_STRUCT__entry( | ||
281 | __field( struct page *, page ) | ||
282 | __field( unsigned int, order ) | ||
283 | __field( gfp_t, gfp_flags ) | ||
284 | __field( int, migratetype ) | ||
285 | ), | ||
286 | |||
287 | TP_fast_assign( | ||
288 | __entry->page = page; | ||
289 | __entry->order = order; | ||
290 | __entry->gfp_flags = gfp_flags; | ||
291 | __entry->migratetype = migratetype; | ||
292 | ), | ||
293 | |||
294 | TP_printk("page=%p pfn=%lu order=%d migratetype=%d gfp_flags=%s", | ||
295 | __entry->page, | ||
296 | page_to_pfn(__entry->page), | ||
297 | __entry->order, | ||
298 | __entry->migratetype, | ||
299 | show_gfp_flags(__entry->gfp_flags)) | ||
300 | ); | ||
301 | |||
228 | #endif /* _TRACE_KMEM_H */ | 302 | #endif /* _TRACE_KMEM_H */ |
229 | 303 | ||
230 | /* This part must be outside protection */ | 304 | /* This part must be outside protection */ |
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 913a8ebd3a8e..80f954d82d77 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c | |||
@@ -1076,6 +1076,7 @@ static void free_hot_cold_page(struct page *page, int cold) | |||
1076 | 1076 | ||
1077 | void free_hot_page(struct page *page) | 1077 | void free_hot_page(struct page *page) |
1078 | { | 1078 | { |
1079 | trace_mm_page_free_direct(page, 0); | ||
1079 | free_hot_cold_page(page, 0); | 1080 | free_hot_cold_page(page, 0); |
1080 | } | 1081 | } |
1081 | 1082 | ||
@@ -1920,6 +1921,7 @@ __alloc_pages_nodemask(gfp_t gfp_mask, unsigned int order, | |||
1920 | zonelist, high_zoneidx, nodemask, | 1921 | zonelist, high_zoneidx, nodemask, |
1921 | preferred_zone, migratetype); | 1922 | preferred_zone, migratetype); |
1922 | 1923 | ||
1924 | trace_mm_page_alloc(page, order, gfp_mask, migratetype); | ||
1923 | return page; | 1925 | return page; |
1924 | } | 1926 | } |
1925 | EXPORT_SYMBOL(__alloc_pages_nodemask); | 1927 | EXPORT_SYMBOL(__alloc_pages_nodemask); |
@@ -1954,13 +1956,16 @@ void __pagevec_free(struct pagevec *pvec) | |||
1954 | { | 1956 | { |
1955 | int i = pagevec_count(pvec); | 1957 | int i = pagevec_count(pvec); |
1956 | 1958 | ||
1957 | while (--i >= 0) | 1959 | while (--i >= 0) { |
1960 | trace_mm_pagevec_free(pvec->pages[i], pvec->cold); | ||
1958 | free_hot_cold_page(pvec->pages[i], pvec->cold); | 1961 | free_hot_cold_page(pvec->pages[i], pvec->cold); |
1962 | } | ||
1959 | } | 1963 | } |
1960 | 1964 | ||
1961 | void __free_pages(struct page *page, unsigned int order) | 1965 | void __free_pages(struct page *page, unsigned int order) |
1962 | { | 1966 | { |
1963 | if (put_page_testzero(page)) { | 1967 | if (put_page_testzero(page)) { |
1968 | trace_mm_page_free_direct(page, order); | ||
1964 | if (order == 0) | 1969 | if (order == 0) |
1965 | free_hot_page(page); | 1970 | free_hot_page(page); |
1966 | else | 1971 | else |