Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1273315 > unrolled thread

[GIT PULL 00/37] perf/core improvements and fixes

Started byArnaldo Carvalho de Melo <acme@kernel.org>
First post2015-11-19 19:00 +0100
Last post2015-11-23 09:20 +0100
Articles 5 on this page of 45 — 7 participants

Back to article view | Back to linux.kernel


Contents

  [GIT PULL 00/37] perf/core improvements and fixes Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
    [PATCH 31/37] perf callchain: Add count fields to struct callchain_node Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
      Re: [PATCH 31/37] perf callchain: Add count fields to struct  callchain_node Frederic Weisbecker <fweisbec@gmail.com> - 2015-11-23 15:40 +0100
        Re: [PATCH 31/37] perf callchain: Add count fields to struct  callchain_node Namhyung Kim <namhyung@kernel.org> - 2015-11-24 06:20 +0100
    [PATCH 27/37] perf tools: Fix machine__create_kernel_maps to put kernel dso refcount Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
    [PATCH 06/37] perf bpf: Add BPF_PROLOGUE config options for further patches Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
    [PATCH 17/37] perf test: Print result for each LLVM subtest Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
    [PATCH 30/37] perf callchain: Abstract callchain print function Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
    [PATCH 10/37] perf bpf: Allow BPF program config probing options Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
    [PATCH 35/37] perf hists browser: Support folded callchains Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
    [PATCH 37/37] perf ui/gtk: Support folded callchains Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
    [PATCH 36/37] perf ui/gtk: Support flat callchains Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
    [PATCH 34/37] perf hists browser: Support flat callchains Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
      Re: [PATCH 34/37] perf hists browser: Support flat callchains Frederic Weisbecker <fweisbec@gmail.com> - 2015-11-23 16:20 +0100
        Re: [PATCH 34/37] perf hists browser: Support flat callchains Namhyung Kim <namhyung@kernel.org> - 2015-11-24 06:30 +0100
          Re: [PATCH 34/37] perf hists browser: Support flat callchains Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com> - 2015-11-24 15:50 +0100
            Re: [PATCH 34/37] perf hists browser: Support flat callchains Namhyung Kim <namhyung@kernel.org> - 2015-11-25 02:30 +0100
              Re: [PATCH 34/37] perf hists browser: Support flat callchains Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com> - 2015-11-25 02:40 +0100
                Re: [PATCH 34/37] perf hists browser: Support flat callchains Arnaldo Carvalho de Melo <arnaldo.melo@gmail.com> - 2015-11-25 03:20 +0100
                  Re: [PATCH 34/37] perf hists browser: Support flat callchains Namhyung Kim <namhyung@kernel.org> - 2015-11-25 22:10 +0100
    [PATCH 03/37] tools: Adopt memdup() from tools/perf, moving it to tools/lib/string.c Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
    [PATCH 02/37] tools: Fix selftests_install Makefile rule Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
    [PATCH 33/37] perf hists browser: Factor out hist_browser__show_callchain_list() Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
    [PATCH 32/37] perf report: Add callchain value option Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:00 +0100
    [PATCH 08/37] perf bpf: Allow BPF program attach to uprobe events Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 21/37] perf machine: Fix machine__findnew_module_map to put registered map Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 14/37] perf test: Fix 'perf test BPF' when it fails to find a suitable vmlinux Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 13/37] perf test: Test the BPF prologue adding infrastructure Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 16/37] perf tests: Pass the subtest index to each test routine Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 18/37] perf test: Print result for each BPF subtest Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 11/37] perf bpf: Add prologue for BPF programs for fetching arguments Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 19/37] perf test: Mute test cases error messages if verbose == 0 Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 22/37] perf machine: Fix machine__destroy_kernel_maps to drop vmlinux_maps references Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 12/37] perf bpf: Generate prologue for BPF programs Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 20/37] perf probe: Fix to free temporal Dwarf_Frame Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 25/37] perf tools: Fix to put new map after inserting to map_groups in dso__load_sym Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 28/37] perf machine: Fix machine__findnew_module_map to put dso Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 26/37] perf tools: Fix __dsos__addnew to put dso after adding it to the list Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 04/37] tools: Clone the kernel's strtobool function Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 23/37] perf machine: Fix to destroy kernel maps when machine exits Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    [PATCH 05/37] bpf tools: Load a program with different instances using preprocessor Arnaldo Carvalho de Melo <acme@kernel.org> - 2015-11-19 19:10 +0100
    RE: [GIT PULL 00/37] perf/core improvements and fixes 平松雅巳 / HIRAMATU,MASAMI   <masami.hiramatsu.pt@hitachi.com> - 2015-11-20 11:10 +0100
      Re: [GIT PULL 00/37] perf/core improvements and fixes 'Arnaldo Carvalho de Melo' <acme@kernel.org> - 2015-11-20 13:10 +0100
        RE: [GIT PULL 00/37] perf/core improvements and fixes 平松雅巳 / HIRAMATU,MASAMI   <masami.hiramatsu.pt@hitachi.com> - 2015-11-20 18:00 +0100
    Re: [GIT PULL 00/37] perf/core improvements and fixes Ingo Molnar <mingo@kernel.org> - 2015-11-23 09:20 +0100

Page 3 of 3 — ← Prev page 1 2 [3]


#1273349 — [PATCH 05/37] bpf tools: Load a program with different instances using preprocessor

FromArnaldo Carvalho de Melo <acme@kernel.org>
Date2015-11-19 19:10 +0100
Subject[PATCH 05/37] bpf tools: Load a program with different instances using preprocessor
Message-ID<qwBOH-4of-45@gated-at.bofh.it>
In reply to#1273315
From: Wang Nan <wangnan0@huawei.com>

This patch is a preparation for BPF prologue support which allows
generating a series of BPF bytecode for fetching kernel data before
calling program code. With the newly introduced multiple instances
support, perf is able to create different prologues for different kprobe
points.

Before this patch, a bpf_program can be loaded into kernel only once,
and get the only resulting fd. What this patch does is to allow creating
and loading different variants of one bpf_program, then fetching their
fds.

Here we describe the basic idea in this patch. The detailed description
of the newly introduced APIs can be found in comments in the patch body.

The key of this patch is the new mechanism in bpf_program__load().
Instead of loading BPF program into kernel directly, it calls a
'pre-processor' to generate program instances which would be finally
loaded into the kernel based on the original code. To enable the
generation of multiple instances, libbpf passes an index to the
pre-processor so it know which instance is being loaded.

Pre-processor should be called from libbpf's user (perf) using
bpf_program__set_prep(). The number of instances and the relationship
between indices and the target instance should be clear when calling
bpf_program__set_prep().

To retrieve a fd for a specific instance of a program,
bpf_program__nth_fd() is introduced. It returns the resulting fd
according to index.

Signed-off-by: He Kuang <hekuang@huawei.com>
Cc: Alexei Starovoitov <ast@kernel.org>
Cc: He Kuang <hekuang@huawei.com>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1447675815-166222-8-git-send-email-wangnan0@huawei.com
Signed-off-by: Wang Nan <wangnan0@huawei.com>
[ Enclosed multi-line if/else blocks with {}, (*func_ptr)() -> func_ptr() ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/lib/bpf/libbpf.c | 146 ++++++++++++++++++++++++++++++++++++++++++++++---
 tools/lib/bpf/libbpf.h |  64 ++++++++++++++++++++++
 2 files changed, 201 insertions(+), 9 deletions(-)

diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c
index e176bad19bcb..e3f4c3379f14 100644
--- a/tools/lib/bpf/libbpf.c
+++ b/tools/lib/bpf/libbpf.c
@@ -152,7 +152,11 @@ struct bpf_program {
 	} *reloc_desc;
 	int nr_reloc;
 
-	int fd;
+	struct {
+		int nr;
+		int *fds;
+	} instances;
+	bpf_program_prep_t preprocessor;
 
 	struct bpf_object *obj;
 	void *priv;
@@ -206,10 +210,25 @@ struct bpf_object {
 
 static void bpf_program__unload(struct bpf_program *prog)
 {
+	int i;
+
 	if (!prog)
 		return;
 
-	zclose(prog->fd);
+	/*
+	 * If the object is opened but the program was never loaded,
+	 * it is possible that prog->instances.nr == -1.
+	 */
+	if (prog->instances.nr > 0) {
+		for (i = 0; i < prog->instances.nr; i++)
+			zclose(prog->instances.fds[i]);
+	} else if (prog->instances.nr != -1) {
+		pr_warning("Internal error: instances.nr is %d\n",
+			   prog->instances.nr);
+	}
+
+	prog->instances.nr = -1;
+	zfree(&prog->instances.fds);
 }
 
 static void bpf_program__exit(struct bpf_program *prog)
@@ -260,7 +279,8 @@ bpf_program__init(void *data, size_t size, char *name, int idx,
 	memcpy(prog->insns, data,
 	       prog->insns_cnt * sizeof(struct bpf_insn));
 	prog->idx = idx;
-	prog->fd = -1;
+	prog->instances.fds = NULL;
+	prog->instances.nr = -1;
 
 	return 0;
 errout:
@@ -860,13 +880,73 @@ static int
 bpf_program__load(struct bpf_program *prog,
 		  char *license, u32 kern_version)
 {
-	int err, fd;
+	int err = 0, fd, i;
 
-	err = load_program(prog->insns, prog->insns_cnt,
-			   license, kern_version, &fd);
-	if (!err)
-		prog->fd = fd;
+	if (prog->instances.nr < 0 || !prog->instances.fds) {
+		if (prog->preprocessor) {
+			pr_warning("Internal error: can't load program '%s'\n",
+				   prog->section_name);
+			return -LIBBPF_ERRNO__INTERNAL;
+		}
 
+		prog->instances.fds = malloc(sizeof(int));
+		if (!prog->instances.fds) {
+			pr_warning("Not enough memory for BPF fds\n");
+			return -ENOMEM;
+		}
+		prog->instances.nr = 1;
+		prog->instances.fds[0] = -1;
+	}
+
+	if (!prog->preprocessor) {
+		if (prog->instances.nr != 1) {
+			pr_warning("Program '%s' is inconsistent: nr(%d) != 1\n",
+				   prog->section_name, prog->instances.nr);
+		}
+		err = load_program(prog->insns, prog->insns_cnt,
+				   license, kern_version, &fd);
+		if (!err)
+			prog->instances.fds[0] = fd;
+		goto out;
+	}
+
+	for (i = 0; i < prog->instances.nr; i++) {
+		struct bpf_prog_prep_result result;
+		bpf_program_prep_t preprocessor = prog->preprocessor;
+
+		bzero(&result, sizeof(result));
+		err = preprocessor(prog, i, prog->insns,
+				   prog->insns_cnt, &result);
+		if (err) {
+			pr_warning("Preprocessing the %dth instance of program '%s' failed\n",
+				   i, prog->section_name);
+			goto out;
+		}
+
+		if (!result.new_insn_ptr || !result.new_insn_cnt) {
+			pr_debug("Skip loading the %dth instance of program '%s'\n",
+				 i, prog->section_name);
+			prog->instances.fds[i] = -1;
+			if (result.pfd)
+				*result.pfd = -1;
+			continue;
+		}
+
+		err = load_program(result.new_insn_ptr,
+				   result.new_insn_cnt,
+				   license, kern_version, &fd);
+
+		if (err) {
+			pr_warning("Loading the %dth instance of program '%s' failed\n",
+					i, prog->section_name);
+			goto out;
+		}
+
+		if (result.pfd)
+			*result.pfd = fd;
+		prog->instances.fds[i] = fd;
+	}
+out:
 	if (err)
 		pr_warning("failed to load program '%s'\n",
 			   prog->section_name);
@@ -1121,5 +1201,53 @@ const char *bpf_program__title(struct bpf_program *prog, bool needs_copy)
 
 int bpf_program__fd(struct bpf_program *prog)
 {
-	return prog->fd;
+	return bpf_program__nth_fd(prog, 0);
+}
+
+int bpf_program__set_prep(struct bpf_program *prog, int nr_instances,
+			  bpf_program_prep_t prep)
+{
+	int *instances_fds;
+
+	if (nr_instances <= 0 || !prep)
+		return -EINVAL;
+
+	if (prog->instances.nr > 0 || prog->instances.fds) {
+		pr_warning("Can't set pre-processor after loading\n");
+		return -EINVAL;
+	}
+
+	instances_fds = malloc(sizeof(int) * nr_instances);
+	if (!instances_fds) {
+		pr_warning("alloc memory failed for fds\n");
+		return -ENOMEM;
+	}
+
+	/* fill all fd with -1 */
+	memset(instances_fds, -1, sizeof(int) * nr_instances);
+
+	prog->instances.nr = nr_instances;
+	prog->instances.fds = instances_fds;
+	prog->preprocessor = prep;
+	return 0;
+}
+
+int bpf_program__nth_fd(struct bpf_program *prog, int n)
+{
+	int fd;
+
+	if (n >= prog->instances.nr || n < 0) {
+		pr_warning("Can't get the %dth fd from program %s: only %d instances\n",
+			   n, prog->section_name, prog->instances.nr);
+		return -EINVAL;
+	}
+
+	fd = prog->instances.fds[n];
+	if (fd < 0) {
+		pr_warning("%dth instance of program '%s' is invalid\n",
+			   n, prog->section_name);
+		return -ENOENT;
+	}
+
+	return fd;
 }
diff --git a/tools/lib/bpf/libbpf.h b/tools/lib/bpf/libbpf.h
index c9a9aef2806c..949df4b346cf 100644
--- a/tools/lib/bpf/libbpf.h
+++ b/tools/lib/bpf/libbpf.h
@@ -88,6 +88,70 @@ const char *bpf_program__title(struct bpf_program *prog, bool needs_copy);
 
 int bpf_program__fd(struct bpf_program *prog);
 
+struct bpf_insn;
+
+/*
+ * Libbpf allows callers to adjust BPF programs before being loaded
+ * into kernel. One program in an object file can be transform into
+ * multiple variants to be attached to different code.
+ *
+ * bpf_program_prep_t, bpf_program__set_prep and bpf_program__nth_fd
+ * are APIs for this propose.
+ *
+ * - bpf_program_prep_t:
+ *   It defines 'preprocessor', which is a caller defined function
+ *   passed to libbpf through bpf_program__set_prep(), and will be
+ *   called before program is loaded. The processor should adjust
+ *   the program one time for each instances according to the number
+ *   passed to it.
+ *
+ * - bpf_program__set_prep:
+ *   Attachs a preprocessor to a BPF program. The number of instances
+ *   whould be created is also passed through this function.
+ *
+ * - bpf_program__nth_fd:
+ *   After the program is loaded, get resuling fds from bpf program for
+ *   each instances.
+ *
+ * If bpf_program__set_prep() is not used, the program whould be loaded
+ * without adjustment during bpf_object__load(). The program has only
+ * one instance. In this case bpf_program__fd(prog) is equal to
+ * bpf_program__nth_fd(prog, 0).
+ */
+
+struct bpf_prog_prep_result {
+	/*
+	 * If not NULL, load new instruction array.
+	 * If set to NULL, don't load this instance.
+	 */
+	struct bpf_insn *new_insn_ptr;
+	int new_insn_cnt;
+
+	/* If not NULL, result fd is set to it */
+	int *pfd;
+};
+
+/*
+ * Parameters of bpf_program_prep_t:
+ *  - prog:	The bpf_program being loaded.
+ *  - n:	Index of instance being generated.
+ *  - insns:	BPF instructions array.
+ *  - insns_cnt:Number of instructions in insns.
+ *  - res:	Output parameter, result of transformation.
+ *
+ * Return value:
+ *  - Zero: pre-processing success.
+ *  - Non-zero: pre-processing, stop loading.
+ */
+typedef int (*bpf_program_prep_t)(struct bpf_program *prog, int n,
+				  struct bpf_insn *insns, int insns_cnt,
+				  struct bpf_prog_prep_result *res);
+
+int bpf_program__set_prep(struct bpf_program *prog, int nr_instance,
+			  bpf_program_prep_t prep);
+
+int bpf_program__nth_fd(struct bpf_program *prog, int n);
+
 /*
  * We don't need __attribute__((packed)) now since it is
  * unnecessary for 'bpf_map_def' because they are all aligned.
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1273922

From平松雅巳 / HIRAMATU,MASAMI <masami.hiramatsu.pt@hitachi.com>
Date2015-11-20 11:10 +0100
Message-ID<qwQNI-5O7-9@gated-at.bofh.it>
In reply to#1273315
SGkgQXJuYWxkbywNCg0KSSBqdXN0IGhhdmUgYSBxdWVzdGlvbiBhYm91dCB0aGUgcmVmY250IGRl
YnVnZ2VyIHBhdGNoLiBJdCBzZWVtcw0KdGhhdCB0aGUgZGVidWdnZXIgaXRzZWxmIGlzIGRyb3Bw
ZWQgZnJvbSB0aGlzIHNlcmllcywgd291bGQgeW91DQpoYXZlIGEgcGxhbiB0byBtZXJnZSBpdCBh
ZnRlcndhcmRzPw0KDQpTaW5jZSBJJ2QgbGlrZSB0byBjaGFuZ2Ugb3RoZXIgcmVmY250cyB3aXRo
IG15IHJlZmNudCBBUEksIGFuZA0KYWxzbyB0byBhZGQgc29tZSBmZWF0dXJlcywgSSdkIGxpa2Ug
dG8gZGVjaWRlIEknZCBiZXR0ZXIgdXBkYXRlDQpteSBsb2NhbCBwYXRjaGVzIG9yIHdhaXQgZm9y
IHlvdXIgd29yayA6KQ0KDQpUaGFua3MhDQoNCg0KPkZyb206IEFybmFsZG8gQ2FydmFsaG8gZGUg
TWVsbyBbbWFpbHRvOmFjbWVAa2VybmVsLm9yZ10NCj4NCj5IaSBJbmdvLA0KPg0KPglQbGVhc2Ug
Y29uc2lkZXIgcHVsbGluZywgdGhpcyB3YXMgYmFzZWQgb24gdGlwL3BlcmYvdXJnZW50IGFuZCBJ
IGRpZCBhDQo+dGVzdCBtZXJnZSBvZiB0aXAvcGVyZi9jb3JlIHdpdGggdGlwL3BlcmYvdXJnZW50
IGFuZCB0aGVuIHdpdGggdGhpcyBicmFuY2gsDQo+aGF2ZW4ndCBub3RpY2VkIHByb2JsZW1zLA0K
Pg0KPkJlc3QgcmVnYXJkcywNCj4NCj4tIEFybmFsZG8NCj4NCj5UaGUgZm9sbG93aW5nIGNoYW5n
ZXMgc2luY2UgY29tbWl0IGUxNWJmODhhNDRkMWZjYjY4NTc1NGIyODY4YjFjZDI4OTI3YWYzYWE6
DQo+DQo+ICBNZXJnZSB0YWcgJ3BlcmYtdXJnZW50LWZvci1taW5nbycgb2YgZ2l0Oi8vZ2l0Lmtl
cm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2FjbWUvbGludXggaW50byBwZXJmL3Vy
Z2VudA0KPigyMDE1LTExLTE4IDA2OjU2OjQ4ICswMTAwKQ0KPg0KPmFyZSBhdmFpbGFibGUgaW4g
dGhlIGdpdCByZXBvc2l0b3J5IGF0Og0KPg0KPiAgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3Nj
bS9saW51eC9rZXJuZWwvZ2l0L2FjbWUvbGludXguZ2l0IHRhZ3MvcGVyZi1jb3JlLWZvci1taW5n
bw0KPg0KPmZvciB5b3UgdG8gZmV0Y2ggY2hhbmdlcyB1cCB0byAyYzZjYWZmMmIyNmZkZThmM2Y4
NzE4M2Y4Yzk3ZjJjZWJmZGJjYjk4Og0KPg0KPiAgcGVyZiB1aS9ndGs6IFN1cHBvcnQgZm9sZGVk
IGNhbGxjaGFpbnMgKDIwMTUtMTEtMTkgMTM6MTk6MjYgLTAzMDApDQo+DQo+LS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPnBl
cmYvY29yZSBpbXByb3ZlbWVudHMgYW5kIGZpeGVzOg0KPg0KPlVzZXIgdmlzaWJsZToNCj4NCj4t
IEFsbG93cyBCUEYgc2NyaXB0bGV0cyBzcGVjaWZ5IGFyZ3VtZW50cyB0byBiZSBmZXRjaGVkIHVz
aW5nDQo+ICBEV0FSRiBpbmZvLCB1c2luZyBhIHByb2xvZ3VlIGdlbmVyYXRlZCBhdCBjb21waWxl
L2J1aWxkIHRpbWUgKEhlIEt1YW5nLCBXYW5nIE5hbikNCj4NCj4tIEFsbG93IGF0dGFjaGluZyBC
UEYgc2NyaXB0bGV0cyB0byBtb2R1bGUgc3ltYm9scyAoV2FuZyBOYW4pDQo+DQo+LSBBbGxvdyBh
dHRhY2hpbmcgQlBGIHNjcmlwdGxldHMgdG8gdXNlcnNwYWNlIGNvZGUgdXNpbmcgdXByb2JlIChX
YW5nIE5hbikNCj4NCj4tIEJQRiBwcm9ncmFtcyBub3cgY2FuIHNwZWNpZnkgJ3BlcmYgcHJvYmUn
IHR1bmFibGVzIHZpYSBpdHMgc2VjdGlvbiBuYW1lLA0KPiAgc2VwYXJhdGluZyBrZXk9dmFsIHZh
bHVlcyB1c2luZyBzZW1pY29sb25zIChXYW5nIE5hbikNCj4NCj5UZXN0aW5nIHNvbWUgb2YgdGhl
c2UgbmV3IEJQRiBmZWF0dXJlczoNCj4NCj5Vc2UgY2FzZTogZ2V0IGNhbGxjaGFpbnMgd2hlbiBy
ZWNlaXZpbmcgU1NMIHBhY2tldHMsIGZpbHRlciB0aGVuIGluIHRoZQ0KPiAgICAgICAgICBrZXJu
ZWwsIGF0IGFyYml0cmFyeSBwbGFjZS4NCj4NCj4gICMgY2F0IHNzbC5icGYuYw0KPiAgI2RlZmlu
ZSBTRUMoTkFNRSkgX19hdHRyaWJ1dGVfXygoc2VjdGlvbihOQU1FKSwgdXNlZCkpDQo+DQo+ICBz
dHJ1Y3QgcHRfcmVnczsNCj4NCj4gIFNFQygiZnVuYz1fX2luZXRfbG9va3VwX2VzdGFibGlzaGVk
IGhudW0iKQ0KPiAgaW50IGZ1bmMoc3RydWN0IHB0X3JlZ3MgKmN0eCwgaW50IGVyciwgdW5zaWdu
ZWQgc2hvcnQgcG9ydCkNCj4gIHsNCj4gICAgICAgICAgcmV0dXJuIGVyciA9PSAwICYmIHBvcnQg
PT0gNDQzOw0KPiAgfQ0KPg0KPiAgY2hhciBfbGljZW5zZVtdIFNFQygibGljZW5zZSIpID0gIkdQ
TCI7DQo+ICBpbnQgIF92ZXJzaW9uICAgU0VDKCJ2ZXJzaW9uIikgPSBMSU5VWF9WRVJTSU9OX0NP
REU7DQo+ICAjDQo+ICAjIHBlcmYgcmVjb3JkIC1hIC1nIC1lIHNzbC5icGYuYw0KPiAgXkNbIHBl
cmYgcmVjb3JkOiBXb2tlbiB1cCAxIHRpbWVzIHRvIHdyaXRlIGRhdGEgXQ0KPiAgWyBwZXJmIHJl
Y29yZDogQ2FwdHVyZWQgYW5kIHdyb3RlIDAuNzg3IE1CIHBlcmYuZGF0YSAoMyBzYW1wbGVzKSBd
DQo+ICAjIHBlcmYgc2NyaXB0IHwgaGVhZCAtMzANCj4gIHN3YXBwZXIgICAgIDAgWzAwMF0gNTg3
ODMuMjY4MTE4OiBwZXJmX2JwZl9wcm9iZTpmdW5jOiAoZmZmZmZmZmY4MTZhMGY2MCkgaG51bT0w
eDFiYg0KPgkgOGEwZjYxIF9faW5ldF9sb29rdXBfZXN0YWJsaXNoZWQgKC9saWIvbW9kdWxlcy80
LjMuMCsvYnVpbGQvdm1saW51eCkNCj4JIDg5NmRlZiBpcF9yY3ZfZmluaXNoICgvbGliL21vZHVs
ZXMvNC4zLjArL2J1aWxkL3ZtbGludXgpDQo+CSA4OTc2YzIgaXBfcmN2ICgvbGliL21vZHVsZXMv
NC4zLjArL2J1aWxkL3ZtbGludXgpDQo+CSA4NTVlYmEgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3Jl
ICgvbGliL21vZHVsZXMvNC4zLjArL2J1aWxkL3ZtbGludXgpDQo+CSA4NTY1ZDggX19uZXRpZl9y
ZWNlaXZlX3NrYiAoL2xpYi9tb2R1bGVzLzQuMy4wKy9idWlsZC92bWxpbnV4KQ0KPgkgODU3MmE4
IHByb2Nlc3NfYmFja2xvZyAoL2xpYi9tb2R1bGVzLzQuMy4wKy9idWlsZC92bWxpbnV4KQ0KPgkg
ODU2YjExIG5ldF9yeF9hY3Rpb24gKC9saWIvbW9kdWxlcy80LjMuMCsvYnVpbGQvdm1saW51eCkN
Cj4JIDJhMjg0YiBfX2RvX3NvZnRpcnEgKC9saWIvbW9kdWxlcy80LjMuMCsvYnVpbGQvdm1saW51
eCkNCj4JIDJhMmJhMyBpcnFfZXhpdCAoL2xpYi9tb2R1bGVzLzQuMy4wKy9idWlsZC92bWxpbnV4
KQ0KPgkgOTZiN2E0IGRvX0lSUSAoL2xpYi9tb2R1bGVzLzQuMy4wKy9idWlsZC92bWxpbnV4KQ0K
PgkgOTY5ODA3IHJldF9mcm9tX2ludHIgKC9saWIvbW9kdWxlcy80LjMuMCsvYnVpbGQvdm1saW51
eCkNCj4JIDJkZWRlNSBjcHVfc3RhcnR1cF9lbnRyeSAoL2xpYi9tb2R1bGVzLzQuMy4wKy9idWls
ZC92bWxpbnV4KQ0KPgkgOTVkNWJjIHJlc3RfaW5pdCAoL2xpYi9tb2R1bGVzLzQuMy4wKy9idWls
ZC92bWxpbnV4KQ0KPgkxMTYzZmZhIHN0YXJ0X2tlcm5lbCAoW2tlcm5lbC52bWxpbnV4XS5pbml0
LnRleHQpDQo+CTExNjM0ZDcgeDg2XzY0X3N0YXJ0X3Jlc2VydmF0aW9ucyAoW2tlcm5lbC52bWxp
bnV4XS5pbml0LnRleHQpDQo+CTExNjM2MjMgeDg2XzY0X3N0YXJ0X2tlcm5lbCAoW2tlcm5lbC52
bWxpbnV4XS5pbml0LnRleHQpDQo+DQo+ICBxZW11LXN5c3RlbS14ODYgIDkxNzggWzAwM10gNTg3
ODUuNzkyNDE3OiBwZXJmX2JwZl9wcm9iZTpmdW5jOiAoZmZmZmZmZmY4MTZhMGY2MCkgaG51bT0w
eDFiYg0KPgkgOGEwZjYxIF9faW5ldF9sb29rdXBfZXN0YWJsaXNoZWQgKC9saWIvbW9kdWxlcy80
LjMuMCsvYnVpbGQvdm1saW51eCkNCj4JIDg5NmRlZiBpcF9yY3ZfZmluaXNoICgvbGliL21vZHVs
ZXMvNC4zLjArL2J1aWxkL3ZtbGludXgpDQo+CSA4OTc2YzIgaXBfcmN2ICgvbGliL21vZHVsZXMv
NC4zLjArL2J1aWxkL3ZtbGludXgpDQo+CSA4NTVlYmEgX19uZXRpZl9yZWNlaXZlX3NrYl9jb3Jl
ICgvbGliL21vZHVsZXMvNC4zLjArL2J1aWxkL3ZtbGludXgpDQo+CSA4NTY1ZDggX19uZXRpZl9y
ZWNlaXZlX3NrYiAoL2xpYi9tb2R1bGVzLzQuMy4wKy9idWlsZC92bWxpbnV4KQ0KPgkgODU2NjYw
IG5ldGlmX3JlY2VpdmVfc2tiX2ludGVybmFsICgvbGliL21vZHVsZXMvNC4zLjArL2J1aWxkL3Zt
bGludXgpDQo+CSA4NTY2ZWMgbmV0aWZfcmVjZWl2ZV9za2Jfc2sgKC9saWIvbW9kdWxlcy80LjMu
MCsvYnVpbGQvdm1saW51eCkNCj4JICAgNDMwYSBicl9oYW5kbGVfZnJhbWVfZmluaXNoIChbYnJp
ZGdlXSkNCj4JICAgNDhiYyBicl9oYW5kbGVfZnJhbWUgKFticmlkZ2VdKQ0KPgkgODU1ZjQ0IF9f
bmV0aWZfcmVjZWl2ZV9za2JfY29yZSAoL2xpYi9tb2R1bGVzLzQuMy4wKy9idWlsZC92bWxpbnV4
KQ0KPgkgODU2NWQ4IF9fbmV0aWZfcmVjZWl2ZV9za2IgKC9saWIvbW9kdWxlcy80LjMuMCsvYnVp
bGQvdm1saW51eCkNCj4gICMNCj4NCj4gIFVzZSAncGVyZiBwcm9iZScgdmFyaW91cyBvcHRpb25z
IHRvIGxpc3QgZnVuY3Rpb25zLCBzZWUgd2hhdCB2YXJpYWJsZXMgY2FuDQo+ICBiZSBjb2xsZWN0
ZWQgYXQgYW55IGdpdmVuIHBvaW50LCBleHBlcmltZW50IGZpcnN0IGNvbGxlY3Rpbmcgd2l0aG91
dCBhIGZpbHRlciwNCj4gIHRoZW4gZmlsdGVyLCB1c2UgaXQgdG9nZXRoZXIgd2l0aCAncGVyZiB0
cmFjZScsICdwZXJmIHRvcCcsIHdpdGggb3Igd2l0aG91dA0KPiAgY2FsbGNoYWlucywgaWYgaXQg
ZXhwbG9kZXMsIHBsZWFzZSB0ZWxsIHVzIQ0KPg0KPi0gSW50cm9kdWNlIGEgbmV3IGNhbGxjaGFp
biBtb2RlOiAiZm9sZGVkIiwgdGhhdCB3aWxsIGxpc3QgcGVyIGxpbmUNCj4gIHJlcHJlc2VudGF0
aW9ucyBvZiBhbGwgY2FsbGNoYWlucyBmb3IgYSBnaXZlIGhpc3RvZ3JhbSBlbnRyeSwgZmFjaWxp
dGF0aW5nDQo+ICAncGVyZiByZXBvcnQnIG91dHB1dCBwcm9jZXNzaW5nIGJ5IG90aGVyIHRvb2xz
LCBzdWNoIGFzIEJyZW5kYW4gR3JlZ2cncw0KPiAgZmxhbWVncmFwaCB0b29scyAoTmFtaHl1bmcg
S2ltKQ0KPg0KPiAgRS5nOg0KPg0KPiAjIHBlcmYgcmVwb3J0IHwgZ3JlcCAtdiBeIyB8IGhlYWQN
Cj4gICAgMTguMzclICAgICAwLjAwJSAgc3dhcHBlciAgW2tlcm5lbC5rYWxsc3ltc10gICBba10g
Y3B1X3N0YXJ0dXBfZW50cnkNCj4gICAgICAgICAgICAgICAgICAgIHwNCj4gICAgICAgICAgICAg
ICAgICAgIC0tLWNwdV9zdGFydHVwX2VudHJ5DQo+ICAgICAgICAgICAgICAgICAgICAgICB8DQo+
ICAgICAgICAgICAgICAgICAgICAgICB8LS0xMi4wNyUtLXN0YXJ0X3NlY29uZGFyeQ0KPiAgICAg
ICAgICAgICAgICAgICAgICAgfA0KPiAgICAgICAgICAgICAgICAgICAgICAgIC0tNi4zMCUtLXJl
c3RfaW5pdA0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9rZXJuZWwN
Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDg2XzY0X3N0YXJ0X3Jlc2VydmF0
aW9ucw0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ODZfNjRfc3RhcnRfa2Vy
bmVsDQo+ICAjDQo+DQo+IEJlY29tZXMsIGluICJmb2xkZWQiIG1vZGU6DQo+DQo+ICMgcGVyZiBy
ZXBvcnQgLWcgZm9sZGVkIHwgZ3JlcCAtdiBeIyB8IGhlYWQgLTUNCj4gICAgIDE4LjM3JSAgICAg
MC4wMCUgIHN3YXBwZXIgW2tlcm5lbC5rYWxsc3ltc10gICBba10gY3B1X3N0YXJ0dXBfZW50cnkN
Cj4gICAxMi4wNyUgY3B1X3N0YXJ0dXBfZW50cnk7c3RhcnRfc2Vjb25kYXJ5DQo+ICAgIDYuMzAl
IGNwdV9zdGFydHVwX2VudHJ5O3Jlc3RfaW5pdDtzdGFydF9rZXJuZWw7eDg2XzY0X3N0YXJ0X3Jl
c2VydmF0aW9uczt4ODZfNjRfc3RhcnRfa2VybmVsDQo+ICAgICAxNi45MCUgICAgIDAuMDAlICBz
d2FwcGVyIFtrZXJuZWwua2FsbHN5bXNdICAgW2tdIGNhbGxfY3B1aWRsZQ0KPiAgIDExLjIzJSBj
YWxsX2NwdWlkbGU7Y3B1X3N0YXJ0dXBfZW50cnk7c3RhcnRfc2Vjb25kYXJ5DQo+ICAgIDUuNjcl
IGNhbGxfY3B1aWRsZTtjcHVfc3RhcnR1cF9lbnRyeTtyZXN0X2luaXQ7c3RhcnRfa2VybmVsO3g4
Nl82NF9zdGFydF9yZXNlcnZhdGlvbnM7eDg2XzY0X3N0YXJ0X2tlcm5lbA0KPiAgICAgMTYuOTAl
ICAgICAwLjAwJSAgc3dhcHBlciBba2VybmVsLmthbGxzeW1zXSAgIFtrXSBjcHVpZGxlX2VudGVy
DQo+ICAgMTEuMjMlIGNwdWlkbGVfZW50ZXI7Y2FsbF9jcHVpZGxlO2NwdV9zdGFydHVwX2VudHJ5
O3N0YXJ0X3NlY29uZGFyeQ0KPiAgICA1LjY3JQ0KPmNwdWlkbGVfZW50ZXI7Y2FsbF9jcHVpZGxl
O2NwdV9zdGFydHVwX2VudHJ5O3Jlc3RfaW5pdDtzdGFydF9rZXJuZWw7eDg2XzY0X3N0YXJ0X3Jl
c2VydmF0aW9uczt4ODZfNjRfc3RhcnRfa2VybmVsDQo+ICAgICAxNS4xMiUgICAgIDAuMDAlICBz
d2FwcGVyIFtrZXJuZWwua2FsbHN5bXNdICAgW2tdIGNwdWlkbGVfZW50ZXJfc3RhdGUNCj4gICMN
Cj4NCj4gICBUaGUgdXNlciBjYW4gYWxzbyBzZWxlY3Qgb25lIG9mICJjb3VudCIsICJwZXJpb2Qi
IG9yICJwZXJjZW50IiBhcyB0aGUgZmlyc3QgY29sdW1uLg0KPg0KPkluZnJhc3RydWN0dXJlOg0K
Pg0KPi0gRml4IG11bHRpcGxlIGxlYWtzIGZvdW5kIHdpdGggdmFsZ3JpbmQgYW5kIGEgcmVmY291
bnQNCj4gIGRlYnVnZ2VyIChNYXNhbWkgSGlyYW1hdHN1KQ0KPg0KPi0gQWRkIGZ1cnRoZXIgJ3Bl
cmYgdGVzdCcgZW50cmllcyBmb3IgQlBGIGFuZCBMTFZNIChXYW5nIE5hbikNCj4NCj4tIEltcHJv
dmUgJ3BlcmYgdGVzdCcgdG8gc3Vwb3J0IHN1YnRlc3RzLCBzbyB0aGF0IHRoZSBzZXJpZXMgb2Yg
dGVzdHMNCj4gIHBlcmZvcm1lZCBpbiB0aGUgTExWTSBhbmQgQlBGIG1haW4gdGVzdHMgYXBwZWFy
IGluIHRoZSBkZWZhdWx0ICdwZXJmIHRlc3QnDQo+ICBvdXRwdXQgKFdhbmcgTmFuKQ0KPg0KPi0g
TW92ZSBtZW1kdXAoKSBmcm9tIHRvb2xzL3BlcmYgdG8gdG9vbHMvbGliL3N0cmluZy5jIChBcm5h
bGRvIENhcnZhbGhvIGRlIE1lbG8pDQo+DQo+LSBBZG9wdCBzdHJ0b2Jvb2woKSBmcm9tIHRoZSBr
ZXJuZWwgaW50byB0b29scy9saWIvIChXYW5nIE5hbikNCj4NCj4tIEZpeCBzZWxmdGVzdHNfaW5z
dGFsbCB0b29scy8gTWFrZWZpbGUgcnVsZSAoS2V2aW4gSGlsbWFuKQ0KPg0KPlNpZ25lZC1vZmYt
Ynk6IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUByZWRoYXQuY29tPg0KPg0KPi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0NCj5Bcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gKDMpOg0KPiAgICAgIHBlcmYgdGVzdDogRml4
IGJ1aWxkIG9mIEJQRiBhbmQgTExWTSBvbiBvbGRlciBnbGliYyBsaWJyYXJpZXMNCj4gICAgICB0
b29sczogQWRvcHQgbWVtZHVwKCkgZnJvbSB0b29scy9wZXJmLCBtb3ZpbmcgaXQgdG8gdG9vbHMv
bGliL3N0cmluZy5jDQo+ICAgICAgcGVyZiB0ZXN0czogUGFzcyB0aGUgc3VidGVzdCBpbmRleCB0
byBlYWNoIHRlc3Qgcm91dGluZQ0KPg0KPkhlIEt1YW5nICgxKToNCj4gICAgICBwZXJmIGJwZjog
QWRkIHByb2xvZ3VlIGZvciBCUEYgcHJvZ3JhbXMgZm9yIGZldGNoaW5nIGFyZ3VtZW50cw0KPg0K
PktldmluIEhpbG1hbiAoMSk6DQo+ICAgICAgdG9vbHM6IEZpeCBzZWxmdGVzdHNfaW5zdGFsbCBN
YWtlZmlsZSBydWxlDQo+DQo+TWFzYW1pIEhpcmFtYXRzdSAoOSk6DQo+ICAgICAgcGVyZiBwcm9i
ZTogRml4IHRvIGZyZWUgdGVtcG9yYWwgRHdhcmZfRnJhbWUNCj4gICAgICBwZXJmIG1hY2hpbmU6
IEZpeCBtYWNoaW5lX19maW5kbmV3X21vZHVsZV9tYXAgdG8gcHV0IHJlZ2lzdGVyZWQgbWFwDQo+
ICAgICAgcGVyZiBtYWNoaW5lOiBGaXggbWFjaGluZV9fZGVzdHJveV9rZXJuZWxfbWFwcyB0byBk
cm9wIHZtbGludXhfbWFwcyByZWZlcmVuY2VzDQo+ICAgICAgcGVyZiBtYWNoaW5lOiBGaXggdG8g
ZGVzdHJveSBrZXJuZWwgbWFwcyB3aGVuIG1hY2hpbmUgZXhpdHMNCj4gICAgICBwZXJmIHRvb2xz
OiBNYWtlIHBlcmZfZXhlY19wYXRoKCkgYWx3YXlzIHJldHVybiBtYWxsb2MnZCBzdHJpbmcNCj4g
ICAgICBwZXJmIHRvb2xzOiBGaXggdG8gcHV0IG5ldyBtYXAgYWZ0ZXIgaW5zZXJ0aW5nIHRvIG1h
cF9ncm91cHMgaW4gZHNvX19sb2FkX3N5bQ0KPiAgICAgIHBlcmYgdG9vbHM6IEZpeCBfX2Rzb3Nf
X2FkZG5ldyB0byBwdXQgZHNvIGFmdGVyIGFkZGluZyBpdCB0byB0aGUgbGlzdA0KPiAgICAgIHBl
cmYgdG9vbHM6IEZpeCBtYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMgdG8gcHV0IGtlcm5lbCBk
c28gcmVmY291bnQNCj4gICAgICBwZXJmIG1hY2hpbmU6IEZpeCBtYWNoaW5lX19maW5kbmV3X21v
ZHVsZV9tYXAgdG8gcHV0IGRzbw0KPg0KPk5hbWh5dW5nIEtpbSAoOSk6DQo+ICAgICAgcGVyZiBy
ZXBvcnQ6IFN1cHBvcnQgZm9sZGVkIGNhbGxjaGFpbiBtb2RlIG9uIC0tc3RkaW8NCj4gICAgICBw
ZXJmIGNhbGxjaGFpbjogQWJzdHJhY3QgY2FsbGNoYWluIHByaW50IGZ1bmN0aW9uDQo+ICAgICAg
cGVyZiBjYWxsY2hhaW46IEFkZCBjb3VudCBmaWVsZHMgdG8gc3RydWN0IGNhbGxjaGFpbl9ub2Rl
DQo+ICAgICAgcGVyZiByZXBvcnQ6IEFkZCBjYWxsY2hhaW4gdmFsdWUgb3B0aW9uDQo+ICAgICAg
cGVyZiBoaXN0cyBicm93c2VyOiBGYWN0b3Igb3V0IGhpc3RfYnJvd3Nlcl9fc2hvd19jYWxsY2hh
aW5fbGlzdCgpDQo+ICAgICAgcGVyZiBoaXN0cyBicm93c2VyOiBTdXBwb3J0IGZsYXQgY2FsbGNo
YWlucw0KPiAgICAgIHBlcmYgaGlzdHMgYnJvd3NlcjogU3VwcG9ydCBmb2xkZWQgY2FsbGNoYWlu
cw0KPiAgICAgIHBlcmYgdWkvZ3RrOiBTdXBwb3J0IGZsYXQgY2FsbGNoYWlucw0KPiAgICAgIHBl
cmYgdWkvZ3RrOiBTdXBwb3J0IGZvbGRlZCBjYWxsY2hhaW5zDQo+DQo+V2FuZyBOYW4gKDE0KToN
Cj4gICAgICB0b29sczogQ2xvbmUgdGhlIGtlcm5lbCdzIHN0cnRvYm9vbCBmdW5jdGlvbg0KPiAg
ICAgIGJwZiB0b29sczogTG9hZCBhIHByb2dyYW0gd2l0aCBkaWZmZXJlbnQgaW5zdGFuY2VzIHVz
aW5nIHByZXByb2Nlc3Nvcg0KPiAgICAgIHBlcmYgYnBmOiBBZGQgQlBGX1BST0xPR1VFIGNvbmZp
ZyBvcHRpb25zIGZvciBmdXJ0aGVyIHBhdGNoZXMNCj4gICAgICBwZXJmIGJwZjogQ29tcGlsZSBk
d2FyZi1yZWdzLmMgaWYgQ09ORklHX0JQRl9QUk9MT0dVRSBpcyBvbg0KPiAgICAgIHBlcmYgYnBm
OiBBbGxvdyBCUEYgcHJvZ3JhbSBhdHRhY2ggdG8gdXByb2JlIGV2ZW50cw0KPiAgICAgIHBlcmYg
YnBmOiBBbGxvdyBhdHRhY2hpbmcgQlBGIHByb2dyYW1zIHRvIG1vZHVsZXMgc3ltYm9scw0KPiAg
ICAgIHBlcmYgYnBmOiBBbGxvdyBCUEYgcHJvZ3JhbSBjb25maWcgcHJvYmluZyBvcHRpb25zDQo+
ICAgICAgcGVyZiBicGY6IEdlbmVyYXRlIHByb2xvZ3VlIGZvciBCUEYgcHJvZ3JhbXMNCj4gICAg
ICBwZXJmIHRlc3Q6IFRlc3QgdGhlIEJQRiBwcm9sb2d1ZSBhZGRpbmcgaW5mcmFzdHJ1Y3R1cmUN
Cj4gICAgICBwZXJmIHRlc3Q6IEZpeCAncGVyZiB0ZXN0IEJQRicgd2hlbiBpdCBmYWlscyB0byBm
aW5kIGEgc3VpdGFibGUgdm1saW51eA0KPiAgICAgIHBlcmYgYnBmOiBVc2Ugc2FtZSBCUEYgcHJv
Z3JhbSBpZiBhcmd1bWVudHMgYXJlIGlkZW50aWNhbA0KPiAgICAgIHBlcmYgdGVzdDogUHJpbnQg
cmVzdWx0IGZvciBlYWNoIExMVk0gc3VidGVzdA0KPiAgICAgIHBlcmYgdGVzdDogUHJpbnQgcmVz
dWx0IGZvciBlYWNoIEJQRiBzdWJ0ZXN0DQo+ICAgICAgcGVyZiB0ZXN0OiBNdXRlIHRlc3QgY2Fz
ZXMgZXJyb3IgbWVzc2FnZXMgaWYgdmVyYm9zZSA9PSAwDQo+DQo+IHRvb2xzL01ha2VmaWxlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstDQo+IHRvb2xzL2luY2x1ZGUvbGlu
dXgvc3RyaW5nLmggICAgICAgICAgICAgICAgIHwgIDExICsNCj4gdG9vbHMvbGliL2JwZi9saWJi
cGYuYyAgICAgICAgICAgICAgICAgICAgICAgfCAxNDYgKysrKysrKystDQo+IHRvb2xzL2xpYi9i
cGYvbGliYnBmLmggICAgICAgICAgICAgICAgICAgICAgIHwgIDY0ICsrKysNCj4gdG9vbHMvbGli
L3N0cmluZy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjIgKysrKw0KPiB0b29scy9w
ZXJmL0RvY3VtZW50YXRpb24vcGVyZi1yZXBvcnQudHh0ICAgICB8ICAxNCArLQ0KPiB0b29scy9w
ZXJmL01BTklGRVNUICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArDQo+IHRvb2xzL3Bl
cmYvYXJjaC94ODYvaW5jbHVkZS9hcmNoLXRlc3RzLmggICAgIHwgICA4ICstDQo+IHRvb2xzL3Bl
cmYvYXJjaC94ODYvdGVzdHMvaW5zbi14ODYuYyAgICAgICAgIHwgICAyICstDQo+IHRvb2xzL3Bl
cmYvYXJjaC94ODYvdGVzdHMvaW50ZWwtY3FtLmMgICAgICAgIHwgICAyICstDQo+IHRvb2xzL3Bl
cmYvYXJjaC94ODYvdGVzdHMvcGVyZi10aW1lLXRvLXRzYy5jIHwgICAyICstDQo+IHRvb2xzL3Bl
cmYvYXJjaC94ODYvdGVzdHMvcmRwbWMuYyAgICAgICAgICAgIHwgICAyICstDQo+IHRvb2xzL3Bl
cmYvYXJjaC94ODYvdXRpbC9CdWlsZCAgICAgICAgICAgICAgIHwgICAxICsNCj4gdG9vbHMvcGVy
Zi9idWlsdGluLXJlcG9ydC5jICAgICAgICAgICAgICAgICAgfCAgIDQgKy0NCj4gdG9vbHMvcGVy
Zi9jb25maWcvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgfCAgMTIgKw0KPiB0b29scy9wZXJm
L3Rlc3RzLy5naXRpZ25vcmUgICAgICAgICAgICAgICAgICB8ICAgMSArDQo+IHRvb2xzL3BlcmYv
dGVzdHMvQnVpbGQgICAgICAgICAgICAgICAgICAgICAgIHwgICA5ICstDQo+IHRvb2xzL3BlcmYv
dGVzdHMvYXR0ci5jICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstDQo+IHRvb2xzL3BlcmYv
dGVzdHMvYnBfc2lnbmFsLmMgICAgICAgICAgICAgICAgIHwgICAyICstDQo+IHRvb2xzL3BlcmYv
dGVzdHMvYnBfc2lnbmFsX292ZXJmbG93LmMgICAgICAgIHwgICAyICstDQo+IHRvb2xzL3BlcmYv
dGVzdHMvYnBmLXNjcmlwdC10ZXN0LXByb2xvZ3VlLmMgIHwgIDM1ICsrKw0KPiB0b29scy9wZXJm
L3Rlc3RzL2JwZi5jICAgICAgICAgICAgICAgICAgICAgICB8ICA5MyArKysrLS0NCj4gdG9vbHMv
cGVyZi90ZXN0cy9idWlsdGluLXRlc3QuYyAgICAgICAgICAgICAgfCAxMTIgKysrKysrLQ0KPiB0
b29scy9wZXJmL3Rlc3RzL2NvZGUtcmVhZGluZy5jICAgICAgICAgICAgICB8ICAgMiArLQ0KPiB0
b29scy9wZXJmL3Rlc3RzL2Rzby1kYXRhLmMgICAgICAgICAgICAgICAgICB8ICAgNiArLQ0KPiB0
b29scy9wZXJmL3Rlc3RzL2R3YXJmLXVud2luZC5jICAgICAgICAgICAgICB8ICAgMiArLQ0KPiB0
b29scy9wZXJmL3Rlc3RzL2V2c2VsLXJvdW5kdHJpcC1uYW1lLmMgICAgICB8ICAgMiArLQ0KPiB0
b29scy9wZXJmL3Rlc3RzL2V2c2VsLXRwLXNjaGVkLmMgICAgICAgICAgICB8ICAgMiArLQ0KPiB0
b29scy9wZXJmL3Rlc3RzL2ZkYXJyYXkuYyAgICAgICAgICAgICAgICAgICB8ICAgNCArLQ0KPiB0
b29scy9wZXJmL3Rlc3RzL2hpc3RzX2N1bXVsYXRlLmMgICAgICAgICAgICB8ICAgMiArLQ0KPiB0
b29scy9wZXJmL3Rlc3RzL2hpc3RzX2ZpbHRlci5jICAgICAgICAgICAgICB8ICAgMiArLQ0KPiB0
b29scy9wZXJmL3Rlc3RzL2hpc3RzX2xpbmsuYyAgICAgICAgICAgICAgICB8ICAgMiArLQ0KPiB0
b29scy9wZXJmL3Rlc3RzL2hpc3RzX291dHB1dC5jICAgICAgICAgICAgICB8ICAgMiArLQ0KPiB0
b29scy9wZXJmL3Rlc3RzL2tlZXAtdHJhY2tpbmcuYyAgICAgICAgICAgICB8ICAgMiArLQ0KPiB0
b29scy9wZXJmL3Rlc3RzL2ttb2QtcGF0aC5jICAgICAgICAgICAgICAgICB8ICAgMiArLQ0KPiB0
b29scy9wZXJmL3Rlc3RzL2xsdm0uYyAgICAgICAgICAgICAgICAgICAgICB8ICA3NSArKystLQ0K
PiB0b29scy9wZXJmL3Rlc3RzL2xsdm0uaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArDQo+
IHRvb2xzL3BlcmYvdGVzdHMvbW1hcC1iYXNpYy5jICAgICAgICAgICAgICAgIHwgICAyICstDQo+
IHRvb2xzL3BlcmYvdGVzdHMvbW1hcC10aHJlYWQtbG9va3VwLmMgICAgICAgIHwgICAyICstDQo+
IHRvb2xzL3BlcmYvdGVzdHMvb3BlbmF0LXN5c2NhbGwtYWxsLWNwdXMuYyAgIHwgICAyICstDQo+
IHRvb2xzL3BlcmYvdGVzdHMvb3BlbmF0LXN5c2NhbGwtdHAtZmllbGRzLmMgIHwgICAyICstDQo+
IHRvb2xzL3BlcmYvdGVzdHMvb3BlbmF0LXN5c2NhbGwuYyAgICAgICAgICAgIHwgICAyICstDQo+
IHRvb2xzL3BlcmYvdGVzdHMvcGFyc2UtZXZlbnRzLmMgICAgICAgICAgICAgIHwgICAyICstDQo+
IHRvb2xzL3BlcmYvdGVzdHMvcGFyc2Utbm8tc2FtcGxlLWlkLWFsbC5jICAgIHwgICAyICstDQo+
IHRvb2xzL3BlcmYvdGVzdHMvcGVyZi1yZWNvcmQuYyAgICAgICAgICAgICAgIHwgICAyICstDQo+
IHRvb2xzL3BlcmYvdGVzdHMvcG11LmMgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstDQo+
IHRvb2xzL3BlcmYvdGVzdHMvcHl0aG9uLXVzZS5jICAgICAgICAgICAgICAgIHwgICAzICstDQo+
IHRvb2xzL3BlcmYvdGVzdHMvc2FtcGxlLXBhcnNpbmcuYyAgICAgICAgICAgIHwgICAyICstDQo+
IHRvb2xzL3BlcmYvdGVzdHMvc3ctY2xvY2suYyAgICAgICAgICAgICAgICAgIHwgICAyICstDQo+
IHRvb2xzL3BlcmYvdGVzdHMvc3dpdGNoLXRyYWNraW5nLmMgICAgICAgICAgIHwgICAyICstDQo+
IHRvb2xzL3BlcmYvdGVzdHMvdGFzay1leGl0LmMgICAgICAgICAgICAgICAgIHwgICAyICstDQo+
IHRvb2xzL3BlcmYvdGVzdHMvdGVzdHMuaCAgICAgICAgICAgICAgICAgICAgIHwgIDg5ICsrKy0t
LQ0KPiB0b29scy9wZXJmL3Rlc3RzL3RocmVhZC1tYXAuYyAgICAgICAgICAgICAgICB8ICAgMiAr
LQ0KPiB0b29scy9wZXJmL3Rlc3RzL3RocmVhZC1tZy1zaGFyZS5jICAgICAgICAgICB8ICAgMiAr
LQ0KPiB0b29scy9wZXJmL3Rlc3RzL3RvcG9sb2d5LmMgICAgICAgICAgICAgICAgICB8ICAgMiAr
LQ0KPiB0b29scy9wZXJmL3Rlc3RzL3ZtbGludXgta2FsbHN5bXMuYyAgICAgICAgICB8ICAgMiAr
LQ0KPiB0b29scy9wZXJmL3VpL2Jyb3dzZXJzL2hpc3RzLmMgICAgICAgICAgICAgICB8IDMxNSAr
KysrKysrKysrKysrKysrKy0tDQo+IHRvb2xzL3BlcmYvdWkvZ3RrL2hpc3RzLmMgICAgICAgICAg
ICAgICAgICAgIHwgMTQ4ICsrKysrKysrLQ0KPiB0b29scy9wZXJmL3VpL3N0ZGlvL2hpc3QuYyAg
ICAgICAgICAgICAgICAgICB8ICA5NCArKysrKy0NCj4gdG9vbHMvcGVyZi91dGlsL0J1aWxkICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKw0KPiB0b29scy9wZXJmL3V0aWwvYnBmLWxvYWRl
ci5jICAgICAgICAgICAgICAgICB8IDQzNCArKysrKysrKysrKysrKysrKysrKysrKystDQo+IHRv
b2xzL3BlcmYvdXRpbC9icGYtbG9hZGVyLmggICAgICAgICAgICAgICAgIHwgICA0ICsNCj4gdG9v
bHMvcGVyZi91dGlsL2JwZi1wcm9sb2d1ZS5jICAgICAgICAgICAgICAgfCA0NTUgKysrKysrKysr
KysrKysrKysrKysrKysrKysrDQo+IHRvb2xzL3BlcmYvdXRpbC9icGYtcHJvbG9ndWUuaCAgICAg
ICAgICAgICAgIHwgIDM0ICsrDQo+IHRvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uYyAgICAgICAg
ICAgICAgICAgIHwgMTM1ICsrKysrKystDQo+IHRvb2xzL3BlcmYvdXRpbC9jYWxsY2hhaW4uaCAg
ICAgICAgICAgICAgICAgIHwgIDI4ICstDQo+IHRvb2xzL3BlcmYvdXRpbC9kc28uYyAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAyICsNCj4gdG9vbHMvcGVyZi91dGlsL2V4ZWNfY21kLmMgICAg
ICAgICAgICAgICAgICAgfCAgMjEgKy0NCj4gdG9vbHMvcGVyZi91dGlsL2V4ZWNfY21kLmggICAg
ICAgICAgICAgICAgICAgfCAgIDUgKy0NCj4gdG9vbHMvcGVyZi91dGlsL2hlbHAuYyAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDYgKy0NCj4gdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvbGludXgv
c3RyaW5nLmggICAgICAgfCAgIDMgLQ0KPiB0b29scy9wZXJmL3V0aWwvbWFjaGluZS5jICAgICAg
ICAgICAgICAgICAgICB8ICAxNyArLQ0KPiB0b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYyAg
ICAgICAgICAgICAgICB8ICAgNyArLQ0KPiB0b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMg
ICAgICAgICAgICAgICB8ICAgOSArLQ0KPiB0b29scy9wZXJmL3V0aWwvc3RyaW5nLmMgICAgICAg
ICAgICAgICAgICAgICB8ICAxNiAtDQo+IHRvb2xzL3BlcmYvdXRpbC9zeW1ib2wtZWxmLmMgICAg
ICAgICAgICAgICAgIHwgICAyICsNCj4gdG9vbHMvcGVyZi91dGlsL3V0aWwuYyAgICAgICAgICAg
ICAgICAgICAgICAgfCAgIDMgKy0NCj4gNzcgZmlsZXMgY2hhbmdlZCwgMjI4NiBpbnNlcnRpb25z
KCspLCAyODIgZGVsZXRpb25zKC0pDQo+IGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9pbmNsdWRl
L2xpbnV4L3N0cmluZy5oDQo+IGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy9saWIvc3RyaW5nLmMN
Cj4gY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3BlcmYvdGVzdHMvYnBmLXNjcmlwdC10ZXN0LXBy
b2xvZ3VlLmMNCj4gY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3BlcmYvdXRpbC9icGYtcHJvbG9n
dWUuYw0KPiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvcGVyZi91dGlsL2JwZi1wcm9sb2d1ZS5o
DQo+IGRlbGV0ZSBtb2RlIDEwMDY0NCB0b29scy9wZXJmL3V0aWwvaW5jbHVkZS9saW51eC9zdHJp
bmcuaA0K
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1274016

From'Arnaldo Carvalho de Melo' <acme@kernel.org>
Date2015-11-20 13:10 +0100
Message-ID<qwSFR-71A-33@gated-at.bofh.it>
In reply to#1273922
Em Fri, Nov 20, 2015 at 10:01:30AM +0000, 平松雅巳 / HIRAMATU,MASAMI escreveu:
> Hi Arnaldo,
> 
> I just have a question about the refcnt debugger patch. It seems
> that the debugger itself is dropped from this series, would you
> have a plan to merge it afterwards?

I concentrated on the fixes, leaving the debugger itself to be reviewed
later.
 
> Since I'd like to change other refcnts with my refcnt API, and
> also to add some features, I'd like to decide I'd better update
> my local patches or wait for your work :)

You can continue using it as you did, and the fixes can continue to be
applied before the debugger itself gets reviewed.

- Arnaldo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1274262

From平松雅巳 / HIRAMATU,MASAMI <masami.hiramatsu.pt@hitachi.com>
Date2015-11-20 18:00 +0100
Message-ID<qwXcu-1li-7@gated-at.bofh.it>
In reply to#1274016
PkZyb206ICdBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8nIFttYWlsdG86YWNtZUBrZXJuZWwub3Jn
XQ0KPg0KPkVtIEZyaSwgTm92IDIwLCAyMDE1IGF0IDEwOjAxOjMwQU0gKzAwMDAsIOW5s+advumb
heW3syAvIEhJUkFNQVRV77yMTUFTQU1JIGVzY3JldmV1Og0KPj4gSGkgQXJuYWxkbywNCj4+DQo+
PiBJIGp1c3QgaGF2ZSBhIHF1ZXN0aW9uIGFib3V0IHRoZSByZWZjbnQgZGVidWdnZXIgcGF0Y2gu
IEl0IHNlZW1zDQo+PiB0aGF0IHRoZSBkZWJ1Z2dlciBpdHNlbGYgaXMgZHJvcHBlZCBmcm9tIHRo
aXMgc2VyaWVzLCB3b3VsZCB5b3UNCj4+IGhhdmUgYSBwbGFuIHRvIG1lcmdlIGl0IGFmdGVyd2Fy
ZHM/DQo+DQo+SSBjb25jZW50cmF0ZWQgb24gdGhlIGZpeGVzLCBsZWF2aW5nIHRoZSBkZWJ1Z2dl
ciBpdHNlbGYgdG8gYmUgcmV2aWV3ZWQNCj5sYXRlci4NCj4NCj4+IFNpbmNlIEknZCBsaWtlIHRv
IGNoYW5nZSBvdGhlciByZWZjbnRzIHdpdGggbXkgcmVmY250IEFQSSwgYW5kDQo+PiBhbHNvIHRv
IGFkZCBzb21lIGZlYXR1cmVzLCBJJ2QgbGlrZSB0byBkZWNpZGUgSSdkIGJldHRlciB1cGRhdGUN
Cj4+IG15IGxvY2FsIHBhdGNoZXMgb3Igd2FpdCBmb3IgeW91ciB3b3JrIDopDQo+DQo+WW91IGNh
biBjb250aW51ZSB1c2luZyBpdCBhcyB5b3UgZGlkLCBhbmQgdGhlIGZpeGVzIGNhbiBjb250aW51
ZSB0byBiZQ0KPmFwcGxpZWQgYmVmb3JlIHRoZSBkZWJ1Z2dlciBpdHNlbGYgZ2V0cyByZXZpZXdl
ZC4NCg0KT0ssIHNvIEknbGwgY29udGludWUgdG8gcGxheSBvbiBteSBzZXJpZXMgOikNCg0KVGhh
bmsgeW91IQ0KDQotLSANCk1hc2FtaSBISVJBTUFUU1UNCkxpbnV4IFRlY2hub2xvZ3kgUmVzZWFy
Y2ggQ2VudGVyLCBTeXN0ZW0gUHJvZHVjdGl2aXR5IFJlc2VhcmNoIERlcHQuDQpDZW50ZXIgZm9y
IFRlY2hub2xvZ3kgSW5ub3ZhdGlvbiAtIFN5c3RlbXMgRW5naW5lZXJpbmcNCkhpdGFjaGksIEx0
ZC4sIFJlc2VhcmNoICYgRGV2ZWxvcG1lbnQgR3JvdXANCkUtbWFpbDogbWFzYW1pLmhpcmFtYXRz
dS5wdEBoaXRhY2hpLmNvbQ0K
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1275103

FromIngo Molnar <mingo@kernel.org>
Date2015-11-23 09:20 +0100
Message-ID<qxUvV-7DO-11@gated-at.bofh.it>
In reply to#1273315
* Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> Hi Ingo,
> 
> 	Please consider pulling, this was based on tip/perf/urgent and I did a
> test merge of tip/perf/core with tip/perf/urgent and then with this branch,
> haven't noticed problems,
> 
> Best regards,
> 
> - Arnaldo
> 
> The following changes since commit e15bf88a44d1fcb685754b2868b1cd28927af3aa:
> 
>   Merge tag 'perf-urgent-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/urgent (2015-11-18 06:56:48 +0100)
> 
> are available in the git repository at:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-core-for-mingo
> 
> for you to fetch changes up to 2c6caff2b26fde8f3f87183f8c97f2cebfdbcb98:
> 
>   perf ui/gtk: Support folded callchains (2015-11-19 13:19:26 -0300)
> 
> ----------------------------------------------------------------
> perf/core improvements and fixes:
> 
> User visible:
> 
> - Allows BPF scriptlets specify arguments to be fetched using
>   DWARF info, using a prologue generated at compile/build time (He Kuang, Wang Nan)
> 
> - Allow attaching BPF scriptlets to module symbols (Wang Nan)
> 
> - Allow attaching BPF scriptlets to userspace code using uprobe (Wang Nan)
> 
> - BPF programs now can specify 'perf probe' tunables via its section name,
>   separating key=val values using semicolons (Wang Nan)
> 
> Testing some of these new BPF features:
> 
> Use case: get callchains when receiving SSL packets, filter then in the
>           kernel, at arbitrary place.
> 
>   # cat ssl.bpf.c
>   #define SEC(NAME) __attribute__((section(NAME), used))
> 
>   struct pt_regs;
> 
>   SEC("func=__inet_lookup_established hnum")
>   int func(struct pt_regs *ctx, int err, unsigned short port)
>   {
>           return err == 0 && port == 443;
>   }
> 
>   char _license[] SEC("license") = "GPL";
>   int  _version   SEC("version") = LINUX_VERSION_CODE;
>   #
>   # perf record -a -g -e ssl.bpf.c
>   ^C[ perf record: Woken up 1 times to write data ]
>   [ perf record: Captured and wrote 0.787 MB perf.data (3 samples) ]
>   # perf script | head -30
>   swapper     0 [000] 58783.268118: perf_bpf_probe:func: (ffffffff816a0f60) hnum=0x1bb
> 	 8a0f61 __inet_lookup_established (/lib/modules/4.3.0+/build/vmlinux)
> 	 896def ip_rcv_finish (/lib/modules/4.3.0+/build/vmlinux)
> 	 8976c2 ip_rcv (/lib/modules/4.3.0+/build/vmlinux)
> 	 855eba __netif_receive_skb_core (/lib/modules/4.3.0+/build/vmlinux)
> 	 8565d8 __netif_receive_skb (/lib/modules/4.3.0+/build/vmlinux)
> 	 8572a8 process_backlog (/lib/modules/4.3.0+/build/vmlinux)
> 	 856b11 net_rx_action (/lib/modules/4.3.0+/build/vmlinux)
> 	 2a284b __do_softirq (/lib/modules/4.3.0+/build/vmlinux)
> 	 2a2ba3 irq_exit (/lib/modules/4.3.0+/build/vmlinux)
> 	 96b7a4 do_IRQ (/lib/modules/4.3.0+/build/vmlinux)
> 	 969807 ret_from_intr (/lib/modules/4.3.0+/build/vmlinux)
> 	 2dede5 cpu_startup_entry (/lib/modules/4.3.0+/build/vmlinux)
> 	 95d5bc rest_init (/lib/modules/4.3.0+/build/vmlinux)
> 	1163ffa start_kernel ([kernel.vmlinux].init.text)
> 	11634d7 x86_64_start_reservations ([kernel.vmlinux].init.text)
> 	1163623 x86_64_start_kernel ([kernel.vmlinux].init.text)
> 
>   qemu-system-x86  9178 [003] 58785.792417: perf_bpf_probe:func: (ffffffff816a0f60) hnum=0x1bb
> 	 8a0f61 __inet_lookup_established (/lib/modules/4.3.0+/build/vmlinux)
> 	 896def ip_rcv_finish (/lib/modules/4.3.0+/build/vmlinux)
> 	 8976c2 ip_rcv (/lib/modules/4.3.0+/build/vmlinux)
> 	 855eba __netif_receive_skb_core (/lib/modules/4.3.0+/build/vmlinux)
> 	 8565d8 __netif_receive_skb (/lib/modules/4.3.0+/build/vmlinux)
> 	 856660 netif_receive_skb_internal (/lib/modules/4.3.0+/build/vmlinux)
> 	 8566ec netif_receive_skb_sk (/lib/modules/4.3.0+/build/vmlinux)
> 	   430a br_handle_frame_finish ([bridge])
> 	   48bc br_handle_frame ([bridge])
> 	 855f44 __netif_receive_skb_core (/lib/modules/4.3.0+/build/vmlinux)
> 	 8565d8 __netif_receive_skb (/lib/modules/4.3.0+/build/vmlinux)
>   #
> 
>   Use 'perf probe' various options to list functions, see what variables can
>   be collected at any given point, experiment first collecting without a filter,
>   then filter, use it together with 'perf trace', 'perf top', with or without
>   callchains, if it explodes, please tell us!
> 
> - Introduce a new callchain mode: "folded", that will list per line
>   representations of all callchains for a give histogram entry, facilitating
>   'perf report' output processing by other tools, such as Brendan Gregg's
>   flamegraph tools (Namhyung Kim)
> 
>   E.g:
> 
>  # perf report | grep -v ^# | head
>     18.37%     0.00%  swapper  [kernel.kallsyms]   [k] cpu_startup_entry
>                     |
>                     ---cpu_startup_entry
>                        |
>                        |--12.07%--start_secondary
>                        |
>                         --6.30%--rest_init
>                                   start_kernel
>                                   x86_64_start_reservations
>                                   x86_64_start_kernel
>   #
> 
>  Becomes, in "folded" mode:
> 
>  # perf report -g folded | grep -v ^# | head -5
>      18.37%     0.00%  swapper [kernel.kallsyms]   [k] cpu_startup_entry
>    12.07% cpu_startup_entry;start_secondary
>     6.30% cpu_startup_entry;rest_init;start_kernel;x86_64_start_reservations;x86_64_start_kernel
>      16.90%     0.00%  swapper [kernel.kallsyms]   [k] call_cpuidle
>    11.23% call_cpuidle;cpu_startup_entry;start_secondary
>     5.67% call_cpuidle;cpu_startup_entry;rest_init;start_kernel;x86_64_start_reservations;x86_64_start_kernel
>      16.90%     0.00%  swapper [kernel.kallsyms]   [k] cpuidle_enter
>    11.23% cpuidle_enter;call_cpuidle;cpu_startup_entry;start_secondary
>     5.67% cpuidle_enter;call_cpuidle;cpu_startup_entry;rest_init;start_kernel;x86_64_start_reservations;x86_64_start_kernel
>      15.12%     0.00%  swapper [kernel.kallsyms]   [k] cpuidle_enter_state
>   #
> 
>    The user can also select one of "count", "period" or "percent" as the first column.
> 
> Infrastructure:
> 
> - Fix multiple leaks found with valgrind and a refcount
>   debugger (Masami Hiramatsu)
> 
> - Add further 'perf test' entries for BPF and LLVM (Wang Nan)
> 
> - Improve 'perf test' to suport subtests, so that the series of tests
>   performed in the LLVM and BPF main tests appear in the default 'perf test'
>   output (Wang Nan)
> 
> - Move memdup() from tools/perf to tools/lib/string.c (Arnaldo Carvalho de Melo)
> 
> - Adopt strtobool() from the kernel into tools/lib/ (Wang Nan)
> 
> - Fix selftests_install tools/ Makefile rule (Kevin Hilman)
> 
> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> 
> ----------------------------------------------------------------
> Arnaldo Carvalho de Melo (3):
>       perf test: Fix build of BPF and LLVM on older glibc libraries
>       tools: Adopt memdup() from tools/perf, moving it to tools/lib/string.c
>       perf tests: Pass the subtest index to each test routine
> 
> He Kuang (1):
>       perf bpf: Add prologue for BPF programs for fetching arguments
> 
> Kevin Hilman (1):
>       tools: Fix selftests_install Makefile rule
> 
> Masami Hiramatsu (9):
>       perf probe: Fix to free temporal Dwarf_Frame
>       perf machine: Fix machine__findnew_module_map to put registered map
>       perf machine: Fix machine__destroy_kernel_maps to drop vmlinux_maps references
>       perf machine: Fix to destroy kernel maps when machine exits
>       perf tools: Make perf_exec_path() always return malloc'd string
>       perf tools: Fix to put new map after inserting to map_groups in dso__load_sym
>       perf tools: Fix __dsos__addnew to put dso after adding it to the list
>       perf tools: Fix machine__create_kernel_maps to put kernel dso refcount
>       perf machine: Fix machine__findnew_module_map to put dso
> 
> Namhyung Kim (9):
>       perf report: Support folded callchain mode on --stdio
>       perf callchain: Abstract callchain print function
>       perf callchain: Add count fields to struct callchain_node
>       perf report: Add callchain value option
>       perf hists browser: Factor out hist_browser__show_callchain_list()
>       perf hists browser: Support flat callchains
>       perf hists browser: Support folded callchains
>       perf ui/gtk: Support flat callchains
>       perf ui/gtk: Support folded callchains
> 
> Wang Nan (14):
>       tools: Clone the kernel's strtobool function
>       bpf tools: Load a program with different instances using preprocessor
>       perf bpf: Add BPF_PROLOGUE config options for further patches
>       perf bpf: Compile dwarf-regs.c if CONFIG_BPF_PROLOGUE is on
>       perf bpf: Allow BPF program attach to uprobe events
>       perf bpf: Allow attaching BPF programs to modules symbols
>       perf bpf: Allow BPF program config probing options
>       perf bpf: Generate prologue for BPF programs
>       perf test: Test the BPF prologue adding infrastructure
>       perf test: Fix 'perf test BPF' when it fails to find a suitable vmlinux
>       perf bpf: Use same BPF program if arguments are identical
>       perf test: Print result for each LLVM subtest
>       perf test: Print result for each BPF subtest
>       perf test: Mute test cases error messages if verbose == 0
> 
>  tools/Makefile                               |   2 +-
>  tools/include/linux/string.h                 |  11 +
>  tools/lib/bpf/libbpf.c                       | 146 ++++++++-
>  tools/lib/bpf/libbpf.h                       |  64 ++++
>  tools/lib/string.c                           |  62 ++++
>  tools/perf/Documentation/perf-report.txt     |  14 +-
>  tools/perf/MANIFEST                          |   2 +
>  tools/perf/arch/x86/include/arch-tests.h     |   8 +-
>  tools/perf/arch/x86/tests/insn-x86.c         |   2 +-
>  tools/perf/arch/x86/tests/intel-cqm.c        |   2 +-
>  tools/perf/arch/x86/tests/perf-time-to-tsc.c |   2 +-
>  tools/perf/arch/x86/tests/rdpmc.c            |   2 +-
>  tools/perf/arch/x86/util/Build               |   1 +
>  tools/perf/builtin-report.c                  |   4 +-
>  tools/perf/config/Makefile                   |  12 +
>  tools/perf/tests/.gitignore                  |   1 +
>  tools/perf/tests/Build                       |   9 +-
>  tools/perf/tests/attr.c                      |   2 +-
>  tools/perf/tests/bp_signal.c                 |   2 +-
>  tools/perf/tests/bp_signal_overflow.c        |   2 +-
>  tools/perf/tests/bpf-script-test-prologue.c  |  35 +++
>  tools/perf/tests/bpf.c                       |  93 ++++--
>  tools/perf/tests/builtin-test.c              | 112 ++++++-
>  tools/perf/tests/code-reading.c              |   2 +-
>  tools/perf/tests/dso-data.c                  |   6 +-
>  tools/perf/tests/dwarf-unwind.c              |   2 +-
>  tools/perf/tests/evsel-roundtrip-name.c      |   2 +-
>  tools/perf/tests/evsel-tp-sched.c            |   2 +-
>  tools/perf/tests/fdarray.c                   |   4 +-
>  tools/perf/tests/hists_cumulate.c            |   2 +-
>  tools/perf/tests/hists_filter.c              |   2 +-
>  tools/perf/tests/hists_link.c                |   2 +-
>  tools/perf/tests/hists_output.c              |   2 +-
>  tools/perf/tests/keep-tracking.c             |   2 +-
>  tools/perf/tests/kmod-path.c                 |   2 +-
>  tools/perf/tests/llvm.c                      |  75 +++--
>  tools/perf/tests/llvm.h                      |   2 +
>  tools/perf/tests/mmap-basic.c                |   2 +-
>  tools/perf/tests/mmap-thread-lookup.c        |   2 +-
>  tools/perf/tests/openat-syscall-all-cpus.c   |   2 +-
>  tools/perf/tests/openat-syscall-tp-fields.c  |   2 +-
>  tools/perf/tests/openat-syscall.c            |   2 +-
>  tools/perf/tests/parse-events.c              |   2 +-
>  tools/perf/tests/parse-no-sample-id-all.c    |   2 +-
>  tools/perf/tests/perf-record.c               |   2 +-
>  tools/perf/tests/pmu.c                       |   2 +-
>  tools/perf/tests/python-use.c                |   3 +-
>  tools/perf/tests/sample-parsing.c            |   2 +-
>  tools/perf/tests/sw-clock.c                  |   2 +-
>  tools/perf/tests/switch-tracking.c           |   2 +-
>  tools/perf/tests/task-exit.c                 |   2 +-
>  tools/perf/tests/tests.h                     |  89 +++---
>  tools/perf/tests/thread-map.c                |   2 +-
>  tools/perf/tests/thread-mg-share.c           |   2 +-
>  tools/perf/tests/topology.c                  |   2 +-
>  tools/perf/tests/vmlinux-kallsyms.c          |   2 +-
>  tools/perf/ui/browsers/hists.c               | 315 +++++++++++++++++--
>  tools/perf/ui/gtk/hists.c                    | 148 ++++++++-
>  tools/perf/ui/stdio/hist.c                   |  94 +++++-
>  tools/perf/util/Build                        |   7 +
>  tools/perf/util/bpf-loader.c                 | 434 ++++++++++++++++++++++++-
>  tools/perf/util/bpf-loader.h                 |   4 +
>  tools/perf/util/bpf-prologue.c               | 455 +++++++++++++++++++++++++++
>  tools/perf/util/bpf-prologue.h               |  34 ++
>  tools/perf/util/callchain.c                  | 135 +++++++-
>  tools/perf/util/callchain.h                  |  28 +-
>  tools/perf/util/dso.c                        |   2 +
>  tools/perf/util/exec_cmd.c                   |  21 +-
>  tools/perf/util/exec_cmd.h                   |   5 +-
>  tools/perf/util/help.c                       |   6 +-
>  tools/perf/util/include/linux/string.h       |   3 -
>  tools/perf/util/machine.c                    |  17 +-
>  tools/perf/util/probe-event.c                |   7 +-
>  tools/perf/util/probe-finder.c               |   9 +-
>  tools/perf/util/string.c                     |  16 -
>  tools/perf/util/symbol-elf.c                 |   2 +
>  tools/perf/util/util.c                       |   3 +-
>  77 files changed, 2286 insertions(+), 282 deletions(-)
>  create mode 100644 tools/include/linux/string.h
>  create mode 100644 tools/lib/string.c
>  create mode 100644 tools/perf/tests/bpf-script-test-prologue.c
>  create mode 100644 tools/perf/util/bpf-prologue.c
>  create mode 100644 tools/perf/util/bpf-prologue.h
>  delete mode 100644 tools/perf/util/include/linux/string.h

Pulled into tip:perf/core, thanks a lot Arnaldo!

	Ingo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Page 3 of 3 — ← Prev page 1 2 [3]

Back to top | Article view | linux.kernel


csiph-web