On 12/2/2015 8:13 PM, Steven Rostedt wrote:
On Wed, 2 Dec 2015 15:36:50 -0800
Dave Hansen <dave.hansen@xxxxxxxxx> wrote:
On 12/02/2015 02:53 PM, Yang Shi wrote:
diff --git a/mm/gup.c b/mm/gup.c
index deafa2c..10245a4 100644
--- a/mm/gup.c
+++ b/mm/gup.c
@@ -13,6 +13,9 @@
#include <linux/rwsem.h>
#include <linux/hugetlb.h>
+#define CREATE_TRACE_POINTS
+#include <trace/events/gup.h>
+
#include <asm/pgtable.h>
#include <asm/tlbflush.h>
This needs to be _the_ last thing that gets #included. Otherwise, you
risk colliding with any other trace header that gets implicitly included
below.
Agreed.
@@ -1340,6 +1346,8 @@ int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
start, len)))
return 0;
+ trace_gup_get_user_pages_fast(start, nr_pages, write, pages);
+
/*
* Disable interrupts. We use the nested form as we can already have
* interrupts disabled by get_futex_key.
It would be _really_ nice to be able to see return values from the
various gup calls as well. Is that feasible?
Only if you rewrite the functions to have a single return code path
that we can add a tracepoint too. Or have a wrapper function that gets
Yes. My preliminary test just could cover the success case. gup could
return errno from different a few code path.
called directly that calls these functions internally and the tracepoint
can trap the return value.
This will incur more changes in other subsystems (futex, kvm, etc), I'm
not sure if it is worth making such changes to get return value.
I can probably make function_graph tracer give return values, although
it will give a return value for void functions as well. And it may give
long long returns for int returns that may have bogus data in the
higher bits.
If the return value requirement is not limited to gup, the approach
sounds more reasonable.
Thanks,
Yang
-- Steve
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@xxxxxxxxx. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>