LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH] mm: cma: add trace events for CMA allocations and freeings
@ 2015-04-01 13:31 Stefan Strogin
  2015-04-02  7:33 ` Joonsoo Kim
  0 siblings, 1 reply; 4+ messages in thread
From: Stefan Strogin @ 2015-04-01 13:31 UTC (permalink / raw)
  To: linux-mm, linux-kernel
  Cc: Stefan Strogin, Steven Rostedt, Ingo Molnar, Joonsoo Kim,
	Andrew Morton, Marek Szyprowski, Michal Nazarewicz, aneesh.kumar,
	Laurent Pinchart, Sasha Levin, Dmitry Safonov, Pintu Kumar,
	Laura Abbott, Dyasly Sergey, Vyacheslav Tyrtov,
	Aleksei Mateosian, gioh.kim, stefan.strogin

Add trace events for cma_alloc() and cma_release().

The cma_alloc tracepoint is used both for successful and failed allocations,
in case of allocation failure pfn=-1UL is stored and printed.

Signed-off-by: Stefan Strogin <stefan.strogin@gmail.com>
---

Took out from the patch set "mm: cma: add some debug information for CMA" v4
(http://thread.gmane.org/gmane.linux.kernel.mm/129903) because of probable
uselessness of the rest of the patches.

Changes from the version from the patch set:
- Constify the struct page * parameter passed to the tracepoints.
- Pass both pfn and struct page * to the tracepoints to decrease unnecessary
  pfn_to_page() and page_to_pfn() calls and avoid using them in TP_printk.
- Store and print pfn=-1UL instead of pfn=0, because 0th pfn can truly exist
  on some architectures.

 include/trace/events/cma.h | 63 ++++++++++++++++++++++++++++++++++++++++++++++
 mm/cma.c                   |  5 ++++
 2 files changed, 68 insertions(+)
 create mode 100644 include/trace/events/cma.h

diff --git a/include/trace/events/cma.h b/include/trace/events/cma.h
new file mode 100644
index 0000000..e01b35d
--- /dev/null
+++ b/include/trace/events/cma.h
@@ -0,0 +1,63 @@
+#undef TRACE_SYSTEM
+#define TRACE_SYSTEM cma
+
+#if !defined(_TRACE_CMA_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_CMA_H
+
+#include <linux/types.h>
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(cma_alloc,
+
+	TP_PROTO(unsigned long pfn, const struct page *page,
+		 unsigned int count),
+
+	TP_ARGS(pfn, page, count),
+
+	TP_STRUCT__entry(
+		__field(unsigned long, pfn)
+		__field(const struct page *, page)
+		__field(unsigned int, count)
+	),
+
+	TP_fast_assign(
+		__entry->pfn = pfn;
+		__entry->page = page;
+		__entry->count = count;
+	),
+
+	TP_printk("pfn=%lx page=%p count=%u",
+		  __entry->pfn,
+		  __entry->page,
+		  __entry->count)
+);
+
+TRACE_EVENT(cma_release,
+
+	TP_PROTO(unsigned long pfn, const struct page *page,
+		 unsigned int count),
+
+	TP_ARGS(pfn, page, count),
+
+	TP_STRUCT__entry(
+		__field(unsigned long, pfn)
+		__field(const struct page *, page)
+		__field(unsigned int, count)
+	),
+
+	TP_fast_assign(
+		__entry->pfn = pfn;
+		__entry->page = page;
+		__entry->count = count;
+	),
+
+	TP_printk("pfn=%lx page=%p count=%u",
+		  __entry->pfn,
+		  __entry->page,
+		  __entry->count)
+);
+
+#endif /* _TRACE_CMA_H */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
diff --git a/mm/cma.c b/mm/cma.c
index 47203fa..e9410b7c 100644
--- a/mm/cma.c
+++ b/mm/cma.c
@@ -23,6 +23,7 @@
 #  define DEBUG
 #endif
 #endif
+#define CREATE_TRACE_POINTS
 
 #include <linux/memblock.h>
 #include <linux/err.h>
@@ -34,6 +35,7 @@
 #include <linux/cma.h>
 #include <linux/highmem.h>
 #include <linux/io.h>
+#include <trace/events/cma.h>
 
 #include "cma.h"
 
@@ -414,6 +416,8 @@ struct page *cma_alloc(struct cma *cma, unsigned int count, unsigned int align)
 		start = bitmap_no + mask + 1;
 	}
 
+	trace_cma_alloc(page ? pfn : -1UL, page, count);
+
 	pr_debug("%s(): returned %p\n", __func__, page);
 	return page;
 }
@@ -446,6 +450,7 @@ bool cma_release(struct cma *cma, const struct page *pages, unsigned int count)
 
 	free_contig_range(pfn, count);
 	cma_clear_bitmap(cma, pfn, count);
+	trace_cma_release(pfn, pages, count);
 
 	return true;
 }
-- 
2.1.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] mm: cma: add trace events for CMA allocations and freeings
  2015-04-01 13:31 [PATCH] mm: cma: add trace events for CMA allocations and freeings Stefan Strogin
@ 2015-04-02  7:33 ` Joonsoo Kim
  2015-04-02 13:04   ` Stefan Strogin
  0 siblings, 1 reply; 4+ messages in thread
From: Joonsoo Kim @ 2015-04-02  7:33 UTC (permalink / raw)
  To: Stefan Strogin
  Cc: linux-mm, linux-kernel, Steven Rostedt, Ingo Molnar,
	Andrew Morton, Marek Szyprowski, Michal Nazarewicz, aneesh.kumar,
	Laurent Pinchart, Sasha Levin, Dmitry Safonov, Pintu Kumar,
	Laura Abbott, Dyasly Sergey, Vyacheslav Tyrtov,
	Aleksei Mateosian, gioh.kim, stefan.strogin

Hello,

On Wed, Apr 01, 2015 at 04:31:43PM +0300, Stefan Strogin wrote:
> Add trace events for cma_alloc() and cma_release().
> 
> The cma_alloc tracepoint is used both for successful and failed allocations,
> in case of allocation failure pfn=-1UL is stored and printed.
> 
> Signed-off-by: Stefan Strogin <stefan.strogin@gmail.com>
> ---
> 
> Took out from the patch set "mm: cma: add some debug information for CMA" v4
> (http://thread.gmane.org/gmane.linux.kernel.mm/129903) because of probable
> uselessness of the rest of the patches.

I think that patch 5/5 in previous submission is handy and
simple to merge. Although we can calculate it by using bitmap,
it would be good to get that information(used size and maxchunk size)
directly.


> @@ -414,6 +416,8 @@ struct page *cma_alloc(struct cma *cma, unsigned int count, unsigned int align)
>  		start = bitmap_no + mask + 1;
>  	}
>  
> +	trace_cma_alloc(page ? pfn : -1UL, page, count);
> +

I think that tracing align is also useful.
Is there any reason not to include it?

Thanks.


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] mm: cma: add trace events for CMA allocations and freeings
  2015-04-02  7:33 ` Joonsoo Kim
@ 2015-04-02 13:04   ` Stefan Strogin
  2015-04-02 13:13     ` [PATCH] mm-cma-add-trace-events-for-cma-allocations-and-freeings-fix Stefan Strogin
  0 siblings, 1 reply; 4+ messages in thread
From: Stefan Strogin @ 2015-04-02 13:04 UTC (permalink / raw)
  To: Joonsoo Kim
  Cc: linux-mm, linux-kernel, Steven Rostedt, Ingo Molnar,
	Andrew Morton, Marek Szyprowski, Michal Nazarewicz, aneesh.kumar,
	Laurent Pinchart, Sasha Levin, Dmitry Safonov, Pintu Kumar,
	Laura Abbott, Dyasly Sergey, Vyacheslav Tyrtov,
	Aleksei Mateosian, gioh.kim, stefan.strogin

Hello Joonsoo,

On 02/04/15 10:33, Joonsoo Kim wrote:
> Hello,
> 
> On Wed, Apr 01, 2015 at 04:31:43PM +0300, Stefan Strogin wrote:
>> Add trace events for cma_alloc() and cma_release().
>>
>> The cma_alloc tracepoint is used both for successful and failed allocations,
>> in case of allocation failure pfn=-1UL is stored and printed.
>>
>> Signed-off-by: Stefan Strogin <stefan.strogin@gmail.com>
>> ---
>>
>> Took out from the patch set "mm: cma: add some debug information for CMA" v4
>> (http://thread.gmane.org/gmane.linux.kernel.mm/129903) because of probable
>> uselessness of the rest of the patches.
> 
> I think that patch 5/5 in previous submission is handy and
> simple to merge. Although we can calculate it by using bitmap,
> it would be good to get that information(used size and maxchunk size)
> directly.

Well, then I can send the patch 5/5 once more, this time singly.

> 
>> @@ -414,6 +416,8 @@ struct page *cma_alloc(struct cma *cma, unsigned int count, unsigned int align)
>>  		start = bitmap_no + mask + 1;
>>  	}
>>  
>> +	trace_cma_alloc(page ? pfn : -1UL, page, count);
>> +
> 
> I think that tracing align is also useful.
> Is there any reason not to include it?

In our case (DMA) alignment is easily calculated from the allocation
size and CONFIG_CMA_ALIGNMENT. But I think you're right, e.g. it may be
not so obvious on powerpc kvm? Anyway it won't be a shortcoming if we
trace 'align' too.

> 
> Thanks.

Thank you for the reply.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH] mm-cma-add-trace-events-for-cma-allocations-and-freeings-fix
  2015-04-02 13:04   ` Stefan Strogin
@ 2015-04-02 13:13     ` Stefan Strogin
  0 siblings, 0 replies; 4+ messages in thread
From: Stefan Strogin @ 2015-04-02 13:13 UTC (permalink / raw)
  To: linux-mm, linux-kernel, Joonsoo Kim, Andrew Morton
  Cc: Stefan Strogin, Stefan Strogin, Steven Rostedt, Ingo Molnar,
	Marek Szyprowski, Michal Nazarewicz, aneesh.kumar,
	Laurent Pinchart, Sasha Levin, Dmitry Safonov, Pintu Kumar,
	Laura Abbott, Dyasly Sergey, Vyacheslav Tyrtov,
	Aleksei Mateosian, gioh.kim

Trace 'align' too in cma_alloc trace event.

Signed-off-by: Stefan Strogin <stefan.strogin@gmail.com>
---
 include/trace/events/cma.h | 11 +++++++----
 mm/cma.c                   |  2 +-
 2 files changed, 8 insertions(+), 5 deletions(-)

diff --git a/include/trace/events/cma.h b/include/trace/events/cma.h
index e01b35d..d7cd961 100644
--- a/include/trace/events/cma.h
+++ b/include/trace/events/cma.h
@@ -10,26 +10,29 @@
 TRACE_EVENT(cma_alloc,
 
 	TP_PROTO(unsigned long pfn, const struct page *page,
-		 unsigned int count),
+		 unsigned int count, unsigned int align),
 
-	TP_ARGS(pfn, page, count),
+	TP_ARGS(pfn, page, count, align),
 
 	TP_STRUCT__entry(
 		__field(unsigned long, pfn)
 		__field(const struct page *, page)
 		__field(unsigned int, count)
+		__field(unsigned int, align)
 	),
 
 	TP_fast_assign(
 		__entry->pfn = pfn;
 		__entry->page = page;
 		__entry->count = count;
+		__entry->align = align;
 	),
 
-	TP_printk("pfn=%lx page=%p count=%u",
+	TP_printk("pfn=%lx page=%p count=%u align=%u",
 		  __entry->pfn,
 		  __entry->page,
-		  __entry->count)
+		  __entry->count,
+		  __entry->align)
 );
 
 TRACE_EVENT(cma_release,
diff --git a/mm/cma.c b/mm/cma.c
index e9410b7c..3a7a67b 100644
--- a/mm/cma.c
+++ b/mm/cma.c
@@ -416,7 +416,7 @@ struct page *cma_alloc(struct cma *cma, unsigned int count, unsigned int align)
 		start = bitmap_no + mask + 1;
 	}
 
-	trace_cma_alloc(page ? pfn : -1UL, page, count);
+	trace_cma_alloc(page ? pfn : -1UL, page, count, align);
 
 	pr_debug("%s(): returned %p\n", __func__, page);
 	return page;
-- 
2.1.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2015-04-02 13:14 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-01 13:31 [PATCH] mm: cma: add trace events for CMA allocations and freeings Stefan Strogin
2015-04-02  7:33 ` Joonsoo Kim
2015-04-02 13:04   ` Stefan Strogin
2015-04-02 13:13     ` [PATCH] mm-cma-add-trace-events-for-cma-allocations-and-freeings-fix Stefan Strogin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).