diff options
author | Dennis Zhou <dennisz@fb.com> | 2017-06-19 19:28:32 -0400 |
---|---|---|
committer | Tejun Heo <tj@kernel.org> | 2017-06-20 15:31:43 -0400 |
commit | df95e795a722892a9e0603ce4b9b62fab9f02967 (patch) | |
tree | f26b6c6c78874be2b866d516c42da69a67acc07c /mm/percpu.c | |
parent | 30a5b5367ef9d5c9055414e12ec2f02d9de2e70f (diff) | |
download | linux-df95e795a722892a9e0603ce4b9b62fab9f02967.tar.gz linux-df95e795a722892a9e0603ce4b9b62fab9f02967.tar.bz2 linux-df95e795a722892a9e0603ce4b9b62fab9f02967.zip |
percpu: add tracepoint support for percpu memory
Add support for tracepoints to the following events: chunk allocation,
chunk free, area allocation, area free, and area allocation failure.
This should let us replay percpu memory requests and evaluate
corresponding decisions.
Signed-off-by: Dennis Zhou <dennisz@fb.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'mm/percpu.c')
-rw-r--r-- | mm/percpu.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/mm/percpu.c b/mm/percpu.c index 44a1cadf74a7..a5bc3634d2a9 100644 --- a/mm/percpu.c +++ b/mm/percpu.c @@ -76,6 +76,9 @@ #include <asm/tlbflush.h> #include <asm/io.h> +#define CREATE_TRACE_POINTS +#include <trace/events/percpu.h> + #include "percpu-internal.h" #define PCPU_SLOT_BASE_SHIFT 5 /* 1-31 shares the same slot */ @@ -1015,11 +1018,17 @@ area_found: ptr = __addr_to_pcpu_ptr(chunk->base_addr + off); kmemleak_alloc_percpu(ptr, size, gfp); + + trace_percpu_alloc_percpu(reserved, is_atomic, size, align, + chunk->base_addr, off, ptr); + return ptr; fail_unlock: spin_unlock_irqrestore(&pcpu_lock, flags); fail: + trace_percpu_alloc_percpu_fail(reserved, is_atomic, size, align); + if (!is_atomic && warn_limit) { pr_warn("allocation failed, size=%zu align=%zu atomic=%d, %s\n", size, align, is_atomic, err); @@ -1269,6 +1278,8 @@ void free_percpu(void __percpu *ptr) } } + trace_percpu_free_percpu(chunk->base_addr, off, ptr); + spin_unlock_irqrestore(&pcpu_lock, flags); } EXPORT_SYMBOL_GPL(free_percpu); @@ -1719,6 +1730,7 @@ int __init pcpu_setup_first_chunk(const struct pcpu_alloc_info *ai, pcpu_chunk_relocate(pcpu_first_chunk, -1); pcpu_stats_chunk_alloc(); + trace_percpu_create_chunk(base_addr); /* we're done */ pcpu_base_addr = base_addr; |