mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Wang Nan <wangnan0@huawei.com>
To: <acme@kernel.org>, <ast@plumgrid.com>,
	<brendan.d.gregg@gmail.com>, <daniel@iogearbox.net>,
	<namhyung@kernel.org>, <masami.hiramatsu.pt@hitachi.com>,
	<paulus@samba.org>, <a.p.zijlstra@chello.nl>, <mingo@redhat.com>,
	<jolsa@kernel.org>, <dsahern@gmail.com>
Cc: <linux-kernel@vger.kernel.org>, <lizefan@huawei.com>,
	<hekuang@huawei.com>, <xiakaixu@huawei.com>, <pi3orama@163.com>
Subject: [RFC PATCH v8 38/49] bpf tools: Load instructions buffer using load_program()
Date: Wed, 24 Jun 2015 12:31:42 +0000	[thread overview]
Message-ID: <1435149113-51142-39-git-send-email-wangnan0@huawei.com> (raw)
In-Reply-To: <1435149113-51142-1-git-send-email-wangnan0@huawei.com>

Extract code for loading a 'struct bpf_insn' array into kernel to
load_program() and makes bpf_program__load() to call it. Now we have
function loads instructions into kernel. It will be used by further
patches, which creates different instances from a program and load them
into kernel.

Signed-off-by: Wang Nan <wangnan0@huawei.com>
---
 tools/lib/bpf/libbpf.c | 51 ++++++++++++++++++++++++++++++--------------------
 1 file changed, 31 insertions(+), 20 deletions(-)

diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index 5147a98..a2f2991 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -745,48 +745,59 @@ static int bpf_object__collect_reloc(struct bpf_object *obj)
 }
 
 static int
-bpf_program__load(struct bpf_program *prog,
-		  char *license, u32 kern_version)
+load_program(struct bpf_insn *insns, int insns_cnt,
+	     char *license, u32 kern_version, int *pfd)
 {
-	int fd, err;
+	int ret;
 	char *log_buf;
 
-	if (!prog->insns || !prog->insns_cnt)
+	if (!insns || !insns_cnt)
 		return -EINVAL;
 
 	log_buf = malloc(BPF_LOG_BUF_SIZE);
 	if (!log_buf)
 		pr_warning("Alloc log buffer for bpf loader error, continue without log\n");
 
-	fd = bpf_load_program(BPF_PROG_TYPE_KPROBE, prog->insns,
-			      prog->insns_cnt, license,
-			      kern_version, log_buf,
-			      BPF_LOG_BUF_SIZE);
+	ret = bpf_load_program(BPF_PROG_TYPE_KPROBE, insns,
+			       insns_cnt, license, kern_version,
+			       log_buf, BPF_LOG_BUF_SIZE);
 
-	if (fd >= 0) {
-		prog->fd = fd;
-		pr_debug("load bpf program '%s': fd = %d\n",
-			 prog->section_name, prog->fd);
-		err = 0;
+	if (ret >= 0) {
+		*pfd = ret;
+		ret = 0;
 		goto out;
 	}
 
-	err = -EINVAL;
-	pr_warning("load bpf program '%s' failed: %s\n",
-		   prog->section_name, strerror(errno));
+	ret = -EINVAL;
+	pr_warning("load bpf program failed: %s\n", strerror(errno));
 
 	if (log_buf) {
-		pr_warning("bpf: load: failed to load program '%s':\n",
-			   prog->section_name);
 		pr_warning("-- BEGIN DUMP LOG ---\n");
-		pr_warning("%s\n", log_buf);
+		pr_warning("\n%s\n", log_buf);
 		pr_warning("-- END LOG --\n");
 	}
 
 out:
+	free(log_buf);
+	return ret;
+}
+
+static int
+bpf_program__load(struct bpf_program *prog,
+		  char *license, u32 kern_version)
+{
+	int err, fd;
+
+	err = load_program(prog->insns, prog->insns_cnt,
+			   license, kern_version, &fd);
+	if (!err)
+		prog->fd = fd;
+
+	if (err)
+		pr_warning("failed to load program '%s'\n",
+			   prog->section_name);
 	zfree(&prog->insns);
 	prog->insns_cnt = 0;
-	free(log_buf);
 	return err;
 }
 
-- 
1.8.3.4


  parent reply	other threads:[~2015-06-24 12:41 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-24 12:31 [RFC PATCH v8 00/49] perf tools: filtering events using eBPF programs Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 01/49] tools build: Add feature check for eBPF API Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 02/49] bpf tools: Introduce 'bpf' library to tools Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 03/49] bpf tools: Allow caller to set printing function Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 04/49] bpf tools: Open eBPF object file and do basic validation Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 05/49] bpf tools: Read eBPF object from buffer Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 06/49] bpf tools: Check endianess and make libbpf fail early Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 07/49] bpf tools: Iterate over ELF sections to collect information Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 08/49] bpf tools: Collect version and license from ELF sections Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 09/49] bpf tools: Collect map definitions from 'maps' section Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 10/49] bpf tools: Collect symbol table from SHT_SYMTAB section Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 11/49] bpf tools: Collect eBPF programs from their own sections Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 12/49] bpf tools: Collect relocation sections from SHT_REL sections Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 13/49] bpf tools: Record map accessing instructions for each program Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 14/49] bpf tools: Add bpf.c/h for common bpf operations Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 15/49] bpf tools: Create eBPF maps defined in an object file Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 16/49] bpf tools: Relocate eBPF programs Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 17/49] bpf tools: Introduce bpf_load_program() to bpf.c Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 18/49] bpf tools: Load eBPF programs in object files into kernel Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 19/49] bpf tools: Introduce accessors for struct bpf_program Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 20/49] bpf tools: Introduce accessors for struct bpf_object Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 21/49] bpf tools: Link all bpf objects onto a list Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 22/49] perf tools: Make perf depend on libbpf Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 23/49] perf tools: Introduce llvm config options Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 24/49] perf tools: Call clang to compile C source to object code Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 25/49] perf tests: Add LLVM test for eBPF on-the-fly compiling Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 26/49] perf tools: Auto detecting kernel build directory Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 27/49] perf tools: Auto detecting kernel include options Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 28/49] perf record: Enable passing bpf object file to --event Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 29/49] perf record: Compile scriptlets if pass '.c' " Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 30/49] perf tools: Parse probe points of eBPF programs during preparation Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 31/49] perf probe: Attach trace_probe_event with perf_probe_event Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 32/49] perf record: Probe at kprobe points Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 33/49] perf record: Load all eBPF object into kernel Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 34/49] perf tools: Add bpf_fd field to evsel and config it Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 35/49] perf tools: Attach eBPF program to perf event Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 36/49] perf tools: Suppress probing messages when probing by BPF loading Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 37/49] perf record: Add clang options for compiling BPF scripts Wang Nan
2015-06-24 12:31 ` Wang Nan [this message]
2015-06-26  8:28   ` [RFC PATCH v8 38/49] bpf tools: Load instructions buffer using load_program() Alexei Starovoitov
2015-06-26 11:00     ` Wangnan (F)
2015-06-24 12:31 ` [RFC PATCH v8 39/49] bpf tools: Load a program with different instance using preprocessor Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 40/49] perf tools: Fix probe-event.h include Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 41/49] perf probe: Reset tev->args and tev->nargs when failure Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 42/49] perf tools: Move linux/filter.h to tools/include Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 43/49] perf tools: Iterater over tev instead of pev in bpf__for_each_program Wang Nan
2015-06-26  8:29   ` Alexei Starovoitov
2015-06-24 12:31 ` [RFC PATCH v8 44/49] perf tools: Add BPF_PROLOGUE config options for further patches Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 45/49] perf tools: Introduce arch_get_reg_info() for x86 Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 46/49] perf tools: Add prologue for BPF programs for fetching arguments Wang Nan
2015-06-26  4:23   ` Wangnan (F)
2015-06-26  8:32   ` Alexei Starovoitov
2015-06-24 12:31 ` [RFC PATCH v8 47/49] perf tools: Generate prologue for BPF programs Wang Nan
2015-06-26  8:40   ` Alexei Starovoitov
2015-06-24 12:31 ` [RFC PATCH v8 48/49] perf tools: Use same BPF program if arguments are identical Wang Nan
2015-06-24 12:31 ` [RFC PATCH v8 49/49] perf record: Support custom vmlinux path Wang Nan
2015-06-26  8:37 ` [RFC PATCH v8 00/49] perf tools: filtering events using eBPF programs Alexei Starovoitov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1435149113-51142-39-git-send-email-wangnan0@huawei.com \
    --to=wangnan0@huawei.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@kernel.org \
    --cc=ast@plumgrid.com \
    --cc=brendan.d.gregg@gmail.com \
    --cc=daniel@iogearbox.net \
    --cc=dsahern@gmail.com \
    --cc=hekuang@huawei.com \
    --cc=jolsa@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lizefan@huawei.com \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.org \
    --cc=paulus@samba.org \
    --cc=pi3orama@163.com \
    --cc=xiakaixu@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®