aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lib
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2017-07-30 05:15:13 -0400
committerIngo Molnar <mingo@kernel.org>2017-07-30 05:15:13 -0400
commitf5db340f19f14a8df9dfd22d71fba1513e9f1f7e (patch)
tree131d3345bc987aee3c922624de816492e7f323a4 /tools/lib
parentee438ec8f33c5af0d4a4ffb935c5b9272e8c2680 (diff)
parent38115f2f8cec8087d558c062e779c443a01f87d6 (diff)
Merge branch 'perf/urgent' into perf/core, to pick up latest fixes and refresh the tree
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'tools/lib')
-rw-r--r--tools/lib/bpf/bpf.c72
-rw-r--r--tools/lib/bpf/bpf.h7
2 files changed, 76 insertions, 3 deletions
diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c
index 6e178987af8e..412a7c82995a 100644
--- a/tools/lib/bpf/bpf.c
+++ b/tools/lib/bpf/bpf.c
@@ -120,7 +120,7 @@ int bpf_load_program(enum bpf_prog_type type, const struct bpf_insn *insns,
120int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns, 120int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns,
121 size_t insns_cnt, int strict_alignment, 121 size_t insns_cnt, int strict_alignment,
122 const char *license, __u32 kern_version, 122 const char *license, __u32 kern_version,
123 char *log_buf, size_t log_buf_sz) 123 char *log_buf, size_t log_buf_sz, int log_level)
124{ 124{
125 union bpf_attr attr; 125 union bpf_attr attr;
126 126
@@ -131,7 +131,7 @@ int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns,
131 attr.license = ptr_to_u64(license); 131 attr.license = ptr_to_u64(license);
132 attr.log_buf = ptr_to_u64(log_buf); 132 attr.log_buf = ptr_to_u64(log_buf);
133 attr.log_size = log_buf_sz; 133 attr.log_size = log_buf_sz;
134 attr.log_level = 2; 134 attr.log_level = log_level;
135 log_buf[0] = 0; 135 log_buf[0] = 0;
136 attr.kern_version = kern_version; 136 attr.kern_version = kern_version;
137 attr.prog_flags = strict_alignment ? BPF_F_STRICT_ALIGNMENT : 0; 137 attr.prog_flags = strict_alignment ? BPF_F_STRICT_ALIGNMENT : 0;
@@ -257,3 +257,71 @@ int bpf_prog_test_run(int prog_fd, int repeat, void *data, __u32 size,
257 *duration = attr.test.duration; 257 *duration = attr.test.duration;
258 return ret; 258 return ret;
259} 259}
260
261int bpf_prog_get_next_id(__u32 start_id, __u32 *next_id)
262{
263 union bpf_attr attr;
264 int err;
265
266 bzero(&attr, sizeof(attr));
267 attr.start_id = start_id;
268
269 err = sys_bpf(BPF_PROG_GET_NEXT_ID, &attr, sizeof(attr));
270 if (!err)
271 *next_id = attr.next_id;
272
273 return err;
274}
275
276int bpf_map_get_next_id(__u32 start_id, __u32 *next_id)
277{
278 union bpf_attr attr;
279 int err;
280
281 bzero(&attr, sizeof(attr));
282 attr.start_id = start_id;
283
284 err = sys_bpf(BPF_MAP_GET_NEXT_ID, &attr, sizeof(attr));
285 if (!err)
286 *next_id = attr.next_id;
287
288 return err;
289}
290
291int bpf_prog_get_fd_by_id(__u32 id)
292{
293 union bpf_attr attr;
294
295 bzero(&attr, sizeof(attr));
296 attr.prog_id = id;
297
298 return sys_bpf(BPF_PROG_GET_FD_BY_ID, &attr, sizeof(attr));
299}
300
301int bpf_map_get_fd_by_id(__u32 id)
302{
303 union bpf_attr attr;
304
305 bzero(&attr, sizeof(attr));
306 attr.map_id = id;
307
308 return sys_bpf(BPF_MAP_GET_FD_BY_ID, &attr, sizeof(attr));
309}
310
311int bpf_obj_get_info_by_fd(int prog_fd, void *info, __u32 *info_len)
312{
313 union bpf_attr attr;
314 int err;
315
316 bzero(&attr, sizeof(attr));
317 bzero(info, *info_len);
318 attr.info.bpf_fd = prog_fd;
319 attr.info.info_len = *info_len;
320 attr.info.info = ptr_to_u64(info);
321
322 err = sys_bpf(BPF_OBJ_GET_INFO_BY_FD, &attr, sizeof(attr));
323 if (!err)
324 *info_len = attr.info.info_len;
325
326 return err;
327}
diff --git a/tools/lib/bpf/bpf.h b/tools/lib/bpf/bpf.h
index 972bd8333eb7..418c86e69bcb 100644
--- a/tools/lib/bpf/bpf.h
+++ b/tools/lib/bpf/bpf.h
@@ -38,7 +38,7 @@ int bpf_load_program(enum bpf_prog_type type, const struct bpf_insn *insns,
38int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns, 38int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns,
39 size_t insns_cnt, int strict_alignment, 39 size_t insns_cnt, int strict_alignment,
40 const char *license, __u32 kern_version, 40 const char *license, __u32 kern_version,
41 char *log_buf, size_t log_buf_sz); 41 char *log_buf, size_t log_buf_sz, int log_level);
42 42
43int bpf_map_update_elem(int fd, const void *key, const void *value, 43int bpf_map_update_elem(int fd, const void *key, const void *value,
44 __u64 flags); 44 __u64 flags);
@@ -54,5 +54,10 @@ int bpf_prog_detach(int attachable_fd, enum bpf_attach_type type);
54int bpf_prog_test_run(int prog_fd, int repeat, void *data, __u32 size, 54int bpf_prog_test_run(int prog_fd, int repeat, void *data, __u32 size,
55 void *data_out, __u32 *size_out, __u32 *retval, 55 void *data_out, __u32 *size_out, __u32 *retval,
56 __u32 *duration); 56 __u32 *duration);
57int bpf_prog_get_next_id(__u32 start_id, __u32 *next_id);
58int bpf_map_get_next_id(__u32 start_id, __u32 *next_id);
59int bpf_prog_get_fd_by_id(__u32 id);
60int bpf_map_get_fd_by_id(__u32 id);
61int bpf_obj_get_info_by_fd(int prog_fd, void *info, __u32 *info_len);
57 62
58#endif 63#endif