perf ebpf: Add the libbpf glue
The 'bpf-loader.[ch]' files are introduced in this patch. Which will be the interface between perf and libbpf. bpf__prepare_load() resides in bpf-loader.c. Following patches will enrich these two files. Signed-off-by: Wang Nan <wangnan0@huawei.com> Acked-by: Alexei Starovoitov <ast@plumgrid.com> Cc: Brendan Gregg <brendan.d.gregg@gmail.com> Cc: Daniel Borkmann <daniel@iogearbox.net> Cc: David Ahern <dsahern@gmail.com> Cc: He Kuang <hekuang@huawei.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Kaixu Xia <xiakaixu@huawei.com> Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Zefan Li <lizefan@huawei.com> Cc: pi3orama@163.com Link: http://lkml.kernel.org/r/1444826502-49291-3-git-send-email-wangnan0@huawei.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
		
							parent
							
								
									ed63f34c02
								
							
						
					
					
						commit
						69d262a93a
					
				
							
								
								
									
										57
									
								
								tools/perf/util/bpf-loader.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								tools/perf/util/bpf-loader.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,57 @@ | ||||
| /*
 | ||||
|  * bpf-loader.c | ||||
|  * | ||||
|  * Copyright (C) 2015 Wang Nan <wangnan0@huawei.com> | ||||
|  * Copyright (C) 2015 Huawei Inc. | ||||
|  */ | ||||
| 
 | ||||
| #include <bpf/libbpf.h> | ||||
| #include <linux/err.h> | ||||
| #include "perf.h" | ||||
| #include "debug.h" | ||||
| #include "bpf-loader.h" | ||||
| 
 | ||||
| #define DEFINE_PRINT_FN(name, level) \ | ||||
| static int libbpf_##name(const char *fmt, ...)	\ | ||||
| {						\ | ||||
| 	va_list args;				\ | ||||
| 	int ret;				\ | ||||
| 						\ | ||||
| 	va_start(args, fmt);			\ | ||||
| 	ret = veprintf(level, verbose, pr_fmt(fmt), args);\ | ||||
| 	va_end(args);				\ | ||||
| 	return ret;				\ | ||||
| } | ||||
| 
 | ||||
| DEFINE_PRINT_FN(warning, 0) | ||||
| DEFINE_PRINT_FN(info, 0) | ||||
| DEFINE_PRINT_FN(debug, 1) | ||||
| 
 | ||||
| struct bpf_object *bpf__prepare_load(const char *filename) | ||||
| { | ||||
| 	struct bpf_object *obj; | ||||
| 	static bool libbpf_initialized; | ||||
| 
 | ||||
| 	if (!libbpf_initialized) { | ||||
| 		libbpf_set_print(libbpf_warning, | ||||
| 				 libbpf_info, | ||||
| 				 libbpf_debug); | ||||
| 		libbpf_initialized = true; | ||||
| 	} | ||||
| 
 | ||||
| 	obj = bpf_object__open(filename); | ||||
| 	if (!obj) { | ||||
| 		pr_debug("bpf: failed to load %s\n", filename); | ||||
| 		return ERR_PTR(-EINVAL); | ||||
| 	} | ||||
| 
 | ||||
| 	return obj; | ||||
| } | ||||
| 
 | ||||
| void bpf__clear(void) | ||||
| { | ||||
| 	struct bpf_object *obj, *tmp; | ||||
| 
 | ||||
| 	bpf_object__for_each_safe(obj, tmp) | ||||
| 		bpf_object__close(obj); | ||||
| } | ||||
							
								
								
									
										29
									
								
								tools/perf/util/bpf-loader.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								tools/perf/util/bpf-loader.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,29 @@ | ||||
| /*
 | ||||
|  * Copyright (C) 2015, Wang Nan <wangnan0@huawei.com> | ||||
|  * Copyright (C) 2015, Huawei Inc. | ||||
|  */ | ||||
| #ifndef __BPF_LOADER_H | ||||
| #define __BPF_LOADER_H | ||||
| 
 | ||||
| #include <linux/compiler.h> | ||||
| #include <linux/err.h> | ||||
| #include <string.h> | ||||
| #include "debug.h" | ||||
| 
 | ||||
| struct bpf_object; | ||||
| 
 | ||||
| #ifdef HAVE_LIBBPF_SUPPORT | ||||
| struct bpf_object *bpf__prepare_load(const char *filename); | ||||
| 
 | ||||
| void bpf__clear(void); | ||||
| #else | ||||
| static inline struct bpf_object * | ||||
| bpf__prepare_load(const char *filename __maybe_unused) | ||||
| { | ||||
| 	pr_debug("ERROR: eBPF object loading is disabled during compiling.\n"); | ||||
| 	return ERR_PTR(-ENOTSUP); | ||||
| } | ||||
| 
 | ||||
| static inline void bpf__clear(void) { } | ||||
| #endif | ||||
| #endif | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user