From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751882AbdBAOnd (ORCPT ); Wed, 1 Feb 2017 09:43:33 -0500 Received: from terminus.zytor.com ([65.50.211.136]:48378 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751103AbdBAOna (ORCPT ); Wed, 1 Feb 2017 09:43:30 -0500 Date: Wed, 1 Feb 2017 06:42:53 -0800 From: tip-bot for Joe Stringer Message-ID: Cc: ast@fb.com, daniel@iogearbox.net, hpa@zytor.com, tglx@linutronix.de, linux-kernel@vger.kernel.org, joe@ovn.org, acme@redhat.com, mingo@kernel.org, wangnan0@huawei.com Reply-To: hpa@zytor.com, daniel@iogearbox.net, ast@fb.com, wangnan0@huawei.com, mingo@kernel.org, acme@redhat.com, joe@ovn.org, linux-kernel@vger.kernel.org, tglx@linutronix.de In-Reply-To: <20170126212001.14103-7-joe@ovn.org> References: <20170126212001.14103-7-joe@ovn.org> To: linux-tip-commits@vger.kernel.org Subject: [tip:perf/core] perf test: Add libbpf pinning test Git-Commit-ID: a26305363d4b3a586a2d3554c22705538aa4e926 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: a26305363d4b3a586a2d3554c22705538aa4e926 Gitweb: http://git.kernel.org/tip/a26305363d4b3a586a2d3554c22705538aa4e926 Author: Joe Stringer AuthorDate: Thu, 26 Jan 2017 13:20:01 -0800 Committer: Arnaldo Carvalho de Melo CommitDate: Tue, 31 Jan 2017 16:20:08 -0300 perf test: Add libbpf pinning test Add a test for the newly added BPF object pinning functionality. For example: # tools/perf/perf test 37 37: BPF filter : 37.1: Basic BPF filtering : Ok 37.2: BPF pinning : Ok 37.3: BPF prologue generation : Ok 37.4: BPF relocation checker : Ok # tools/perf/perf test 37 -v 2>&1 | grep pinned libbpf: pinned map '/sys/fs/bpf/perf_test/flip_table' libbpf: pinned program '/sys/fs/bpf/perf_test/func=SyS_epoll_wait/0' Signed-off-by: Joe Stringer Requested-and-Tested-by: Arnaldo Carvalho de Melo Cc: Alexei Starovoitov Cc: Daniel Borkmann Cc: Wang Nan Cc: netdev@vger.kernel.org Link: http://lkml.kernel.org/r/20170126212001.14103-7-joe@ovn.org Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/tests/bpf.c | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/tools/perf/tests/bpf.c b/tools/perf/tests/bpf.c index 92343f4..1a04fe7 100644 --- a/tools/perf/tests/bpf.c +++ b/tools/perf/tests/bpf.c @@ -5,11 +5,13 @@ #include #include #include +#include #include #include "tests.h" #include "llvm.h" #include "debug.h" #define NR_ITERS 111 +#define PERF_TEST_BPF_PATH "/sys/fs/bpf/perf_test" #ifdef HAVE_LIBBPF_SUPPORT @@ -54,6 +56,7 @@ static struct { const char *msg_load_fail; int (*target_func)(void); int expect_result; + bool pin; } bpf_testcase_table[] = { { LLVM_TESTCASE_BASE, @@ -63,6 +66,17 @@ static struct { "load bpf object failed", &epoll_wait_loop, (NR_ITERS + 1) / 2, + false, + }, + { + LLVM_TESTCASE_BASE, + "BPF pinning", + "[bpf_pinning]", + "fix kbuild first", + "check your vmlinux setting?", + &epoll_wait_loop, + (NR_ITERS + 1) / 2, + true, }, #ifdef HAVE_BPF_PROLOGUE { @@ -73,6 +87,7 @@ static struct { "check your vmlinux setting?", &llseek_loop, (NR_ITERS + 1) / 4, + false, }, #endif { @@ -83,6 +98,7 @@ static struct { "libbpf error when dealing with relocation", NULL, 0, + false, }, }; @@ -226,10 +242,34 @@ static int __test__bpf(int idx) goto out; } - if (obj) + if (obj) { ret = do_test(obj, bpf_testcase_table[idx].target_func, bpf_testcase_table[idx].expect_result); + if (ret != TEST_OK) + goto out; + if (bpf_testcase_table[idx].pin) { + int err; + + if (!bpf_fs__mount()) { + pr_debug("BPF filesystem not mounted\n"); + ret = TEST_FAIL; + goto out; + } + err = mkdir(PERF_TEST_BPF_PATH, 0777); + if (err && errno != EEXIST) { + pr_debug("Failed to make perf_test dir: %s\n", + strerror(errno)); + ret = TEST_FAIL; + goto out; + } + if (bpf_object__pin(obj, PERF_TEST_BPF_PATH)) + ret = TEST_FAIL; + if (rm_rf(PERF_TEST_BPF_PATH)) + ret = TEST_FAIL; + } + } + out: bpf__clear(); return ret;