LKML Archive on lore.kernel.org
 help / Atom feed
* [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4)
@ 2017-06-08  7:31 Namhyung Kim
  2017-06-08  7:31 ` [PATCH v4 1/9] perf annotate: Fix symbolic link of build-id cache Namhyung Kim
                   ` (9 more replies)
  0 siblings, 10 replies; 21+ messages in thread
From: Namhyung Kim @ 2017-06-08  7:31 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Jiri Olsa, LKML, kernel-team,
	David Ahern, Adrian Hunter, Wang Nan

Hello,

This is v4 of my compressed kernel module work.  Please take a look.

 * changes in v4)
  - fix build-id cache symbolic link handling in annotate
  - separate fix for a memory leak  (Arnaldo)
  - consolidate error path in __open_dso  (Arnaldo)
  - remove decompressed file after use

The code is avaiable at 'perf/kmod-decomp-v4' branch in my tree:

  git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git

Thanks,
Namhyung


Namhyung Kim (9):
  perf annotate: Fix symbolic link of build-id cache
  perf tools: Fix a memory leak in __open_dso()
  perf tools: Introduce dso__decompress_kmodule_{fd,path}
  perf annotate: Use dso__decompress_kmodule_path()
  perf tools: Decompress kernel module when reading DSO data
  perf tools: Consolidate error path in __open_dso()
  perf test: Decompress kernel module before objdump
  perf symbols: Keep DSO->symtab_type after decompress
  perf symbols: Kill dso__build_id_is_kmod()

 tools/perf/tests/code-reading.c | 20 +++++++++-
 tools/perf/util/annotate.c      | 37 ++++++------------
 tools/perf/util/build-id.c      | 45 ----------------------
 tools/perf/util/build-id.h      |  1 -
 tools/perf/util/dso.c           | 85 ++++++++++++++++++++++++++++++++++++++---
 tools/perf/util/dso.h           |  6 +++
 tools/perf/util/symbol-elf.c    | 38 ++----------------
 tools/perf/util/symbol.c        |  4 --
 8 files changed, 119 insertions(+), 117 deletions(-)

-- 
2.13.1

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH v4 1/9] perf annotate: Fix symbolic link of build-id cache
  2017-06-08  7:31 [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4) Namhyung Kim
@ 2017-06-08  7:31 ` Namhyung Kim
  2017-06-08 22:49   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
  2017-06-08  7:31 ` [PATCH v4 2/9] perf tools: Fix a memory leak in __open_dso() Namhyung Kim
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 21+ messages in thread
From: Namhyung Kim @ 2017-06-08  7:31 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Jiri Olsa, LKML, kernel-team,
	David Ahern, Adrian Hunter, Wang Nan, Taeung Song

The commit 6ebd2547dd24 ("perf annotate: Fix a bug following symbolic
link of a build-id file") changed to use dirname to follow the symlink.
But it only considers new-style build-id cache names so old names fail
on readlink() and force to use system path which might not available.

Cc: Taeung Song <treeze.taeung@gmail.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/util/annotate.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 1367d7e35242..df4486c3a2fa 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -1321,6 +1321,7 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
 	char linkname[PATH_MAX];
 	char *build_id_filename;
 	char *build_id_path = NULL;
+	char *pos;
 
 	if (dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS &&
 	    !dso__is_kcore(dso))
@@ -1340,7 +1341,14 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
 	if (!build_id_path)
 		return -1;
 
-	dirname(build_id_path);
+	/*
+	 * old style build-id cache has name of XX/XXXXXXX.. while
+	 * new style has XX/XXXXXXX../{elf,kallsyms,vdso}.
+	 * extract the build-id part of dirname in the new style only.
+	 */
+	pos = strrchr(build_id_path, '/');
+	if (pos && strlen(pos) < SBUILD_ID_SIZE - 2)
+		dirname(build_id_path);
 
 	if (dso__is_kcore(dso) ||
 	    readlink(build_id_path, linkname, sizeof(linkname)) < 0 ||
-- 
2.13.1

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH v4 2/9] perf tools: Fix a memory leak in __open_dso()
  2017-06-08  7:31 [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4) Namhyung Kim
  2017-06-08  7:31 ` [PATCH v4 1/9] perf annotate: Fix symbolic link of build-id cache Namhyung Kim
@ 2017-06-08  7:31 ` Namhyung Kim
  2017-06-08 22:50   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
  2017-06-08  7:31 ` [PATCH v4 3/9] perf tools: Introduce dso__decompress_kmodule_{fd,path} Namhyung Kim
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 21+ messages in thread
From: Namhyung Kim @ 2017-06-08  7:31 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Jiri Olsa, LKML, kernel-team,
	David Ahern, Adrian Hunter, Wang Nan

The name should be freed on error path.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/util/dso.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
index b27d127cdf68..1f29e4fe7af0 100644
--- a/tools/perf/util/dso.c
+++ b/tools/perf/util/dso.c
@@ -412,8 +412,10 @@ static int __open_dso(struct dso *dso, struct machine *machine)
 		return -EINVAL;
 	}
 
-	if (!is_regular_file(name))
+	if (!is_regular_file(name)) {
+		free(name);
 		return -EINVAL;
+	}
 
 	fd = do_open(name);
 	free(name);
-- 
2.13.1

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH v4 3/9] perf tools: Introduce dso__decompress_kmodule_{fd,path}
  2017-06-08  7:31 [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4) Namhyung Kim
  2017-06-08  7:31 ` [PATCH v4 1/9] perf annotate: Fix symbolic link of build-id cache Namhyung Kim
  2017-06-08  7:31 ` [PATCH v4 2/9] perf tools: Fix a memory leak in __open_dso() Namhyung Kim
@ 2017-06-08  7:31 ` Namhyung Kim
  2017-06-08 22:50   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
  2017-06-08  7:31 ` [PATCH v4 4/9] perf annotate: Use dso__decompress_kmodule_path() Namhyung Kim
                   ` (6 subsequent siblings)
  9 siblings, 1 reply; 21+ messages in thread
From: Namhyung Kim @ 2017-06-08  7:31 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Jiri Olsa, LKML, kernel-team,
	David Ahern, Adrian Hunter, Wang Nan

Move decompress_kmodule() to util/dso.c and split it to two functions
returning fd and (decompressed) file path.  Existing user only wants the
fd version but the path version will be used soon.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/util/dso.c        | 58 ++++++++++++++++++++++++++++++++++++++++++++
 tools/perf/util/dso.h        |  6 +++++
 tools/perf/util/symbol-elf.c | 36 +--------------------------
 3 files changed, 65 insertions(+), 35 deletions(-)

diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
index 1f29e4fe7af0..b346b8eba65c 100644
--- a/tools/perf/util/dso.c
+++ b/tools/perf/util/dso.c
@@ -248,6 +248,64 @@ bool dso__needs_decompress(struct dso *dso)
 		dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP;
 }
 
+static int decompress_kmodule(struct dso *dso, const char *name, char *tmpbuf)
+{
+	int fd = -1;
+	struct kmod_path m;
+
+	if (!dso__needs_decompress(dso))
+		return -1;
+
+	if (kmod_path__parse_ext(&m, dso->long_name))
+		return -1;
+
+	if (!m.comp)
+		goto out;
+
+	fd = mkstemp(tmpbuf);
+	if (fd < 0) {
+		dso->load_errno = errno;
+		goto out;
+	}
+
+	if (!decompress_to_file(m.ext, name, fd)) {
+		dso->load_errno = DSO_LOAD_ERRNO__DECOMPRESSION_FAILURE;
+		close(fd);
+		fd = -1;
+	}
+
+out:
+	free(m.ext);
+	return fd;
+}
+
+int dso__decompress_kmodule_fd(struct dso *dso, const char *name)
+{
+	char tmpbuf[] = KMOD_DECOMP_NAME;
+	int fd;
+
+	fd = decompress_kmodule(dso, name, tmpbuf);
+	unlink(tmpbuf);
+	return fd;
+}
+
+int dso__decompress_kmodule_path(struct dso *dso, const char *name,
+				 char *pathname, size_t len)
+{
+	char tmpbuf[] = KMOD_DECOMP_NAME;
+	int fd;
+
+	fd = decompress_kmodule(dso, name, tmpbuf);
+	if (fd < 0) {
+		unlink(tmpbuf);
+		return -1;
+	}
+
+	strncpy(pathname, tmpbuf, len);
+	close(fd);
+	return 0;
+}
+
 /*
  * Parses kernel module specified in @path and updates
  * @m argument like:
diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h
index 5fe2ab5877bd..bd061ba7b47c 100644
--- a/tools/perf/util/dso.h
+++ b/tools/perf/util/dso.h
@@ -244,6 +244,12 @@ bool is_supported_compression(const char *ext);
 bool is_kernel_module(const char *pathname, int cpumode);
 bool decompress_to_file(const char *ext, const char *filename, int output_fd);
 bool dso__needs_decompress(struct dso *dso);
+int dso__decompress_kmodule_fd(struct dso *dso, const char *name);
+int dso__decompress_kmodule_path(struct dso *dso, const char *name,
+				 char *pathname, size_t len);
+
+#define KMOD_DECOMP_NAME  "/tmp/perf-kmod-XXXXXX"
+#define KMOD_DECOMP_LEN   sizeof(KMOD_DECOMP_NAME)
 
 struct kmod_path {
 	char *name;
diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c
index 1fb2efae4f02..d342e771dbad 100644
--- a/tools/perf/util/symbol-elf.c
+++ b/tools/perf/util/symbol-elf.c
@@ -637,40 +637,6 @@ static int dso__swap_init(struct dso *dso, unsigned char eidata)
 	return 0;
 }
 
-static int decompress_kmodule(struct dso *dso, const char *name,
-			      enum dso_binary_type type)
-{
-	int fd = -1;
-	char tmpbuf[] = "/tmp/perf-kmod-XXXXXX";
-	struct kmod_path m;
-
-	if (type != DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP &&
-	    type != DSO_BINARY_TYPE__GUEST_KMODULE_COMP &&
-	    type != DSO_BINARY_TYPE__BUILD_ID_CACHE)
-		return -1;
-
-	if (kmod_path__parse_ext(&m, dso->long_name) || !m.comp)
-		return -1;
-
-	fd = mkstemp(tmpbuf);
-	if (fd < 0) {
-		dso->load_errno = errno;
-		goto out;
-	}
-
-	if (!decompress_to_file(m.ext, name, fd)) {
-		dso->load_errno = DSO_LOAD_ERRNO__DECOMPRESSION_FAILURE;
-		close(fd);
-		fd = -1;
-	}
-
-	unlink(tmpbuf);
-
-out:
-	free(m.ext);
-	return fd;
-}
-
 bool symsrc__possibly_runtime(struct symsrc *ss)
 {
 	return ss->dynsym || ss->opdsec;
@@ -702,7 +668,7 @@ int symsrc__init(struct symsrc *ss, struct dso *dso, const char *name,
 	int fd;
 
 	if (dso__needs_decompress(dso)) {
-		fd = decompress_kmodule(dso, name, type);
+		fd = dso__decompress_kmodule_fd(dso, name);
 		if (fd < 0)
 			return -1;
 	} else {
-- 
2.13.1

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH v4 4/9] perf annotate: Use dso__decompress_kmodule_path()
  2017-06-08  7:31 [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4) Namhyung Kim
                   ` (2 preceding siblings ...)
  2017-06-08  7:31 ` [PATCH v4 3/9] perf tools: Introduce dso__decompress_kmodule_{fd,path} Namhyung Kim
@ 2017-06-08  7:31 ` Namhyung Kim
  2017-06-08 22:51   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
  2017-06-08  7:31 ` [PATCH v4 5/9] perf tools: Decompress kernel module when reading DSO data Namhyung Kim
                   ` (5 subsequent siblings)
  9 siblings, 1 reply; 21+ messages in thread
From: Namhyung Kim @ 2017-06-08  7:31 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Jiri Olsa, LKML, kernel-team,
	David Ahern, Adrian Hunter, Wang Nan

Convert open-coded decompress routine to use the function.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/util/annotate.c | 27 +++------------------------
 1 file changed, 3 insertions(+), 24 deletions(-)

diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index df4486c3a2fa..ddbd56df9187 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -1431,31 +1431,10 @@ int symbol__disassemble(struct symbol *sym, struct map *map, const char *arch_na
 				sizeof(symfs_filename));
 		}
 	} else if (dso__needs_decompress(dso)) {
-		char tmp[PATH_MAX];
-		struct kmod_path m;
-		int fd;
-		bool ret;
+		char tmp[KMOD_DECOMP_LEN];
 
-		if (kmod_path__parse_ext(&m, symfs_filename))
-			goto out;
-
-		snprintf(tmp, PATH_MAX, "/tmp/perf-kmod-XXXXXX");
-
-		fd = mkstemp(tmp);
-		if (fd < 0) {
-			free(m.ext);
-			goto out;
-		}
-
-		ret = decompress_to_file(m.ext, symfs_filename, fd);
-
-		if (ret)
-			pr_err("Cannot decompress %s %s\n", m.ext, symfs_filename);
-
-		free(m.ext);
-		close(fd);
-
-		if (!ret)
+		if (dso__decompress_kmodule_path(dso, symfs_filename,
+						 tmp, sizeof(tmp)) < 0)
 			goto out;
 
 		strcpy(symfs_filename, tmp);
-- 
2.13.1

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH v4 5/9] perf tools: Decompress kernel module when reading DSO data
  2017-06-08  7:31 [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4) Namhyung Kim
                   ` (3 preceding siblings ...)
  2017-06-08  7:31 ` [PATCH v4 4/9] perf annotate: Use dso__decompress_kmodule_path() Namhyung Kim
@ 2017-06-08  7:31 ` Namhyung Kim
  2017-06-08 22:51   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
  2017-06-08  7:31 ` [PATCH v4 6/9] perf tools: Consolidate error path in __open_dso() Namhyung Kim
                   ` (4 subsequent siblings)
  9 siblings, 1 reply; 21+ messages in thread
From: Namhyung Kim @ 2017-06-08  7:31 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Jiri Olsa, LKML, kernel-team,
	David Ahern, Adrian Hunter, Wang Nan

Currently perf decompresses kernel modules when loading symbol table but
it missed to do it when reading raw data.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/util/dso.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
index b346b8eba65c..c63525d845c5 100644
--- a/tools/perf/util/dso.c
+++ b/tools/perf/util/dso.c
@@ -475,7 +475,23 @@ static int __open_dso(struct dso *dso, struct machine *machine)
 		return -EINVAL;
 	}
 
+	if (dso__needs_decompress(dso)) {
+		char newpath[KMOD_DECOMP_LEN];
+		size_t len = sizeof(newpath);
+
+		if (dso__decompress_kmodule_path(dso, name, newpath, len) < 0) {
+			free(name);
+			return -dso->load_errno;
+		}
+
+		strcpy(name, newpath);
+	}
+
 	fd = do_open(name);
+
+	if (dso__needs_decompress(dso))
+		unlink(name);
+
 	free(name);
 	return fd;
 }
-- 
2.13.1

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH v4 6/9] perf tools: Consolidate error path in __open_dso()
  2017-06-08  7:31 [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4) Namhyung Kim
                   ` (4 preceding siblings ...)
  2017-06-08  7:31 ` [PATCH v4 5/9] perf tools: Decompress kernel module when reading DSO data Namhyung Kim
@ 2017-06-08  7:31 ` Namhyung Kim
  2017-06-08 22:52   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
  2017-06-08  7:31 ` [PATCH v4 7/9] perf test: Decompress kernel module before objdump Namhyung Kim
                   ` (3 subsequent siblings)
  9 siblings, 1 reply; 21+ messages in thread
From: Namhyung Kim @ 2017-06-08  7:31 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Jiri Olsa, LKML, kernel-team,
	David Ahern, Adrian Hunter, Wang Nan

On failure, it should free the 'name', so clean up the error path using
goto.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/util/dso.c | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
index c63525d845c5..4e7ab611377a 100644
--- a/tools/perf/util/dso.c
+++ b/tools/perf/util/dso.c
@@ -454,7 +454,7 @@ static int do_open(char *name)
 
 static int __open_dso(struct dso *dso, struct machine *machine)
 {
-	int fd;
+	int fd = -EINVAL;
 	char *root_dir = (char *)"";
 	char *name = malloc(PATH_MAX);
 
@@ -465,23 +465,19 @@ static int __open_dso(struct dso *dso, struct machine *machine)
 		root_dir = machine->root_dir;
 
 	if (dso__read_binary_type_filename(dso, dso->binary_type,
-					    root_dir, name, PATH_MAX)) {
-		free(name);
-		return -EINVAL;
-	}
+					    root_dir, name, PATH_MAX))
+		goto out;
 
-	if (!is_regular_file(name)) {
-		free(name);
-		return -EINVAL;
-	}
+	if (!is_regular_file(name))
+		goto out;
 
 	if (dso__needs_decompress(dso)) {
 		char newpath[KMOD_DECOMP_LEN];
 		size_t len = sizeof(newpath);
 
 		if (dso__decompress_kmodule_path(dso, name, newpath, len) < 0) {
-			free(name);
-			return -dso->load_errno;
+			fd = -dso->load_errno;
+			goto out;
 		}
 
 		strcpy(name, newpath);
@@ -492,6 +488,7 @@ static int __open_dso(struct dso *dso, struct machine *machine)
 	if (dso__needs_decompress(dso))
 		unlink(name);
 
+out:
 	free(name);
 	return fd;
 }
-- 
2.13.1

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH v4 7/9] perf test: Decompress kernel module before objdump
  2017-06-08  7:31 [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4) Namhyung Kim
                   ` (5 preceding siblings ...)
  2017-06-08  7:31 ` [PATCH v4 6/9] perf tools: Consolidate error path in __open_dso() Namhyung Kim
@ 2017-06-08  7:31 ` Namhyung Kim
  2017-06-08  7:34   ` Adrian Hunter
  2017-06-08 22:52   ` [tip:perf/urgent] perf tests: " tip-bot for Namhyung Kim
  2017-06-08  7:31 ` [PATCH v4 8/9] perf symbols: Keep DSO->symtab_type after decompress Namhyung Kim
                   ` (2 subsequent siblings)
  9 siblings, 2 replies; 21+ messages in thread
From: Namhyung Kim @ 2017-06-08  7:31 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Jiri Olsa, LKML, kernel-team,
	David Ahern, Adrian Hunter, Wang Nan

If a kernel modules is compressed, it should be decompressed before
running objdump to parse binary data correctly.  This fixes a failure of
object code reading test for me.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/tests/code-reading.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
index 1f14e7612cbb..94b7c7b02bde 100644
--- a/tools/perf/tests/code-reading.c
+++ b/tools/perf/tests/code-reading.c
@@ -229,6 +229,8 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,
 	unsigned char buf2[BUFSZ];
 	size_t ret_len;
 	u64 objdump_addr;
+	const char *objdump_name;
+	char decomp_name[KMOD_DECOMP_LEN];
 	int ret;
 
 	pr_debug("Reading object code for memory address: %#"PRIx64"\n", addr);
@@ -289,9 +291,25 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,
 		state->done[state->done_cnt++] = al.map->start;
 	}
 
+	objdump_name = al.map->dso->long_name;
+	if (dso__needs_decompress(al.map->dso)) {
+		if (dso__decompress_kmodule_path(al.map->dso, objdump_name,
+						 decomp_name,
+						 sizeof(decomp_name)) < 0) {
+			pr_debug("decompression failed\n");
+			return -1;
+		}
+
+		objdump_name = decomp_name;
+	}
+
 	/* Read the object code using objdump */
 	objdump_addr = map__rip_2objdump(al.map, al.addr);
-	ret = read_via_objdump(al.map->dso->long_name, objdump_addr, buf2, len);
+	ret = read_via_objdump(objdump_name, objdump_addr, buf2, len);
+
+	if (dso__needs_decompress(al.map->dso))
+		unlink(objdump_name);
+
 	if (ret > 0) {
 		/*
 		 * The kernel maps are inaccurate - assume objdump is right in
-- 
2.13.1

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH v4 8/9] perf symbols: Keep DSO->symtab_type after decompress
  2017-06-08  7:31 [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4) Namhyung Kim
                   ` (6 preceding siblings ...)
  2017-06-08  7:31 ` [PATCH v4 7/9] perf test: Decompress kernel module before objdump Namhyung Kim
@ 2017-06-08  7:31 ` Namhyung Kim
  2017-06-08 22:53   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
  2017-06-08  7:31 ` [PATCH v4 9/9] perf symbols: Kill dso__build_id_is_kmod() Namhyung Kim
  2017-06-08 12:10 ` [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4) Jiri Olsa
  9 siblings, 1 reply; 21+ messages in thread
From: Namhyung Kim @ 2017-06-08  7:31 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Jiri Olsa, LKML, kernel-team,
	David Ahern, Adrian Hunter, Wang Nan

The symsrc__init() overwrites dso->symtab_type as symsrc->type in
dso__load_sym().  But for compressed kernel modules in the build-id
cache, it should have original symtab type to be decompressed as needed.

This fixes perf annotate to show disassembly of the function properly.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/util/symbol-elf.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c
index d342e771dbad..502505cf236a 100644
--- a/tools/perf/util/symbol-elf.c
+++ b/tools/perf/util/symbol-elf.c
@@ -671,6 +671,8 @@ int symsrc__init(struct symsrc *ss, struct dso *dso, const char *name,
 		fd = dso__decompress_kmodule_fd(dso, name);
 		if (fd < 0)
 			return -1;
+
+		type = dso->symtab_type;
 	} else {
 		fd = open(name, O_RDONLY);
 		if (fd < 0) {
-- 
2.13.1

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [PATCH v4 9/9] perf symbols: Kill dso__build_id_is_kmod()
  2017-06-08  7:31 [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4) Namhyung Kim
                   ` (7 preceding siblings ...)
  2017-06-08  7:31 ` [PATCH v4 8/9] perf symbols: Keep DSO->symtab_type after decompress Namhyung Kim
@ 2017-06-08  7:31 ` Namhyung Kim
  2017-06-08 22:53   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
  2017-06-08 12:10 ` [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4) Jiri Olsa
  9 siblings, 1 reply; 21+ messages in thread
From: Namhyung Kim @ 2017-06-08  7:31 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Jiri Olsa, LKML, kernel-team,
	David Ahern, Adrian Hunter, Wang Nan

The commit e7ee40475760 ("perf symbols: Fix symbols searching for module
in buildid-cache") added the function to check kernel modules reside in
the build-id cache.  This was because there's no way to identify a DSO
which is actually a kernel module.  So it searched linkname of the file
and find ".ko" suffix.

But this does not work for compressed kernel modules and now such DSOs
have correct symtab_type now.  So no need to check it anymore.  This
patch essentially reverts the commit.

Cc: Wang Nan <wangnan0@huawei.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
 tools/perf/util/build-id.c | 45 ---------------------------------------------
 tools/perf/util/build-id.h |  1 -
 tools/perf/util/symbol.c   |  4 ----
 3 files changed, 50 deletions(-)

diff --git a/tools/perf/util/build-id.c b/tools/perf/util/build-id.c
index 168cc49654e7..e0148b081bdf 100644
--- a/tools/perf/util/build-id.c
+++ b/tools/perf/util/build-id.c
@@ -278,51 +278,6 @@ char *dso__build_id_filename(const struct dso *dso, char *bf, size_t size)
 	return bf;
 }
 
-bool dso__build_id_is_kmod(const struct dso *dso, char *bf, size_t size)
-{
-	char *id_name = NULL, *ch;
-	struct stat sb;
-	char sbuild_id[SBUILD_ID_SIZE];
-
-	if (!dso->has_build_id)
-		goto err;
-
-	build_id__sprintf(dso->build_id, sizeof(dso->build_id), sbuild_id);
-	id_name = build_id_cache__linkname(sbuild_id, NULL, 0);
-	if (!id_name)
-		goto err;
-	if (access(id_name, F_OK))
-		goto err;
-	if (lstat(id_name, &sb) == -1)
-		goto err;
-	if ((size_t)sb.st_size > size - 1)
-		goto err;
-	if (readlink(id_name, bf, size - 1) < 0)
-		goto err;
-
-	bf[sb.st_size] = '\0';
-
-	/*
-	 * link should be:
-	 * ../../lib/modules/4.4.0-rc4/kernel/net/ipv4/netfilter/nf_nat_ipv4.ko/a09fe3eb3147dafa4e3b31dbd6257e4d696bdc92
-	 */
-	ch = strrchr(bf, '/');
-	if (!ch)
-		goto err;
-	if (ch - 3 < bf)
-		goto err;
-
-	free(id_name);
-	return strncmp(".ko", ch - 3, 3) == 0;
-err:
-	pr_err("Invalid build id: %s\n", id_name ? :
-					 dso->long_name ? :
-					 dso->short_name ? :
-					 "[unknown]");
-	free(id_name);
-	return false;
-}
-
 #define dsos__for_each_with_build_id(pos, head)	\
 	list_for_each_entry(pos, head, node)	\
 		if (!pos->has_build_id)		\
diff --git a/tools/perf/util/build-id.h b/tools/perf/util/build-id.h
index 8a89b195c1fc..96690a55c62c 100644
--- a/tools/perf/util/build-id.h
+++ b/tools/perf/util/build-id.h
@@ -17,7 +17,6 @@ char *build_id_cache__kallsyms_path(const char *sbuild_id, char *bf,
 				    size_t size);
 
 char *dso__build_id_filename(const struct dso *dso, char *bf, size_t size);
-bool dso__build_id_is_kmod(const struct dso *dso, char *bf, size_t size);
 
 int build_id__mark_dso_hit(struct perf_tool *tool, union perf_event *event,
 			   struct perf_sample *sample, struct perf_evsel *evsel,
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 8f2b068ff756..e7a98dbd2aed 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -1562,10 +1562,6 @@ int dso__load(struct dso *dso, struct map *map)
 	if (!runtime_ss && syms_ss)
 		runtime_ss = syms_ss;
 
-	if (syms_ss && syms_ss->type == DSO_BINARY_TYPE__BUILD_ID_CACHE)
-		if (dso__build_id_is_kmod(dso, name, PATH_MAX))
-			kmod = true;
-
 	if (syms_ss)
 		ret = dso__load_sym(dso, map, syms_ss, runtime_ss, kmod);
 	else
-- 
2.13.1

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCH v4 7/9] perf test: Decompress kernel module before objdump
  2017-06-08  7:31 ` [PATCH v4 7/9] perf test: Decompress kernel module before objdump Namhyung Kim
@ 2017-06-08  7:34   ` Adrian Hunter
  2017-06-08 22:52   ` [tip:perf/urgent] perf tests: " tip-bot for Namhyung Kim
  1 sibling, 0 replies; 21+ messages in thread
From: Adrian Hunter @ 2017-06-08  7:34 UTC (permalink / raw)
  To: Namhyung Kim, Arnaldo Carvalho de Melo
  Cc: Ingo Molnar, Peter Zijlstra, Jiri Olsa, LKML, kernel-team,
	David Ahern, Wang Nan

On 08/06/17 10:31, Namhyung Kim wrote:
> If a kernel modules is compressed, it should be decompressed before
> running objdump to parse binary data correctly.  This fixes a failure of
> object code reading test for me.
> 
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>

Acked-by: Adrian Hunter <adrian.hunter@intel.com>

> ---
>  tools/perf/tests/code-reading.c | 20 +++++++++++++++++++-
>  1 file changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
> index 1f14e7612cbb..94b7c7b02bde 100644
> --- a/tools/perf/tests/code-reading.c
> +++ b/tools/perf/tests/code-reading.c
> @@ -229,6 +229,8 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,
>  	unsigned char buf2[BUFSZ];
>  	size_t ret_len;
>  	u64 objdump_addr;
> +	const char *objdump_name;
> +	char decomp_name[KMOD_DECOMP_LEN];
>  	int ret;
>  
>  	pr_debug("Reading object code for memory address: %#"PRIx64"\n", addr);
> @@ -289,9 +291,25 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,
>  		state->done[state->done_cnt++] = al.map->start;
>  	}
>  
> +	objdump_name = al.map->dso->long_name;
> +	if (dso__needs_decompress(al.map->dso)) {
> +		if (dso__decompress_kmodule_path(al.map->dso, objdump_name,
> +						 decomp_name,
> +						 sizeof(decomp_name)) < 0) {
> +			pr_debug("decompression failed\n");
> +			return -1;
> +		}
> +
> +		objdump_name = decomp_name;
> +	}
> +
>  	/* Read the object code using objdump */
>  	objdump_addr = map__rip_2objdump(al.map, al.addr);
> -	ret = read_via_objdump(al.map->dso->long_name, objdump_addr, buf2, len);
> +	ret = read_via_objdump(objdump_name, objdump_addr, buf2, len);
> +
> +	if (dso__needs_decompress(al.map->dso))
> +		unlink(objdump_name);
> +
>  	if (ret > 0) {
>  		/*
>  		 * The kernel maps are inaccurate - assume objdump is right in
> 

^ permalink raw reply	[flat|nested] 21+ messages in thread

* Re: [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4)
  2017-06-08  7:31 [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4) Namhyung Kim
                   ` (8 preceding siblings ...)
  2017-06-08  7:31 ` [PATCH v4 9/9] perf symbols: Kill dso__build_id_is_kmod() Namhyung Kim
@ 2017-06-08 12:10 ` Jiri Olsa
  9 siblings, 0 replies; 21+ messages in thread
From: Jiri Olsa @ 2017-06-08 12:10 UTC (permalink / raw)
  To: Namhyung Kim
  Cc: Arnaldo Carvalho de Melo, Ingo Molnar, Peter Zijlstra, Jiri Olsa,
	LKML, kernel-team, David Ahern, Adrian Hunter, Wang Nan

On Thu, Jun 08, 2017 at 04:31:00PM +0900, Namhyung Kim wrote:
> Hello,
> 
> This is v4 of my compressed kernel module work.  Please take a look.
> 
>  * changes in v4)
>   - fix build-id cache symbolic link handling in annotate
>   - separate fix for a memory leak  (Arnaldo)
>   - consolidate error path in __open_dso  (Arnaldo)
>   - remove decompressed file after use
> 
> The code is avaiable at 'perf/kmod-decomp-v4' branch in my tree:
> 
>   git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git
> 
> Thanks,
> Namhyung
> 
> 
> Namhyung Kim (9):
>   perf annotate: Fix symbolic link of build-id cache
>   perf tools: Fix a memory leak in __open_dso()
>   perf tools: Introduce dso__decompress_kmodule_{fd,path}
>   perf annotate: Use dso__decompress_kmodule_path()
>   perf tools: Decompress kernel module when reading DSO data
>   perf tools: Consolidate error path in __open_dso()
>   perf test: Decompress kernel module before objdump
>   perf symbols: Keep DSO->symtab_type after decompress
>   perf symbols: Kill dso__build_id_is_kmod()

Acked-by: Jiri Olsa <jolsa@kernel.org>

thanks,
jirka

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [tip:perf/urgent] perf annotate: Fix symbolic link of build-id cache
  2017-06-08  7:31 ` [PATCH v4 1/9] perf annotate: Fix symbolic link of build-id cache Namhyung Kim
@ 2017-06-08 22:49   ` " tip-bot for Namhyung Kim
  0 siblings, 0 replies; 21+ messages in thread
From: tip-bot for Namhyung Kim @ 2017-06-08 22:49 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: namhyung, dsahern, mingo, a.p.zijlstra, adrian.hunter, wangnan0,
	hpa, jolsa, acme, tglx, linux-kernel, treeze.taeung

Commit-ID:  3619ef76b37d4803bc9daee9d03d82c8526db378
Gitweb:     http://git.kernel.org/tip/3619ef76b37d4803bc9daee9d03d82c8526db378
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Thu, 8 Jun 2017 16:31:01 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 8 Jun 2017 15:38:41 -0300

perf annotate: Fix symbolic link of build-id cache

The commit 6ebd2547dd24 ("perf annotate: Fix a bug following symbolic
link of a build-id file") changed to use dirname to follow the symlink.
But it only considers new-style build-id cache names so old names fail
on readlink() and force to use system path which might not available.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Taeung Song <treeze.taeung@gmail.com>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: kernel-team@lge.com
Fixes: 6ebd2547dd24 ("perf annotate: Fix a bug following symbolic link of a build-id file")
Link: http://lkml.kernel.org/r/20170608073109.30699-2-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/annotate.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index 1367d7e..df4486c 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -1321,6 +1321,7 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
 	char linkname[PATH_MAX];
 	char *build_id_filename;
 	char *build_id_path = NULL;
+	char *pos;
 
 	if (dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS &&
 	    !dso__is_kcore(dso))
@@ -1340,7 +1341,14 @@ static int dso__disassemble_filename(struct dso *dso, char *filename, size_t fil
 	if (!build_id_path)
 		return -1;
 
-	dirname(build_id_path);
+	/*
+	 * old style build-id cache has name of XX/XXXXXXX.. while
+	 * new style has XX/XXXXXXX../{elf,kallsyms,vdso}.
+	 * extract the build-id part of dirname in the new style only.
+	 */
+	pos = strrchr(build_id_path, '/');
+	if (pos && strlen(pos) < SBUILD_ID_SIZE - 2)
+		dirname(build_id_path);
 
 	if (dso__is_kcore(dso) ||
 	    readlink(build_id_path, linkname, sizeof(linkname)) < 0 ||

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [tip:perf/urgent] perf tools: Fix a memory leak in __open_dso()
  2017-06-08  7:31 ` [PATCH v4 2/9] perf tools: Fix a memory leak in __open_dso() Namhyung Kim
@ 2017-06-08 22:50   ` " tip-bot for Namhyung Kim
  0 siblings, 0 replies; 21+ messages in thread
From: tip-bot for Namhyung Kim @ 2017-06-08 22:50 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: hpa, linux-kernel, adrian.hunter, namhyung, acme, mingo,
	wangnan0, tglx, a.p.zijlstra, jolsa, dsahern

Commit-ID:  44ad6b8852529eb39066edbedc027a6901da6803
Gitweb:     http://git.kernel.org/tip/44ad6b8852529eb39066edbedc027a6901da6803
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Thu, 8 Jun 2017 16:31:02 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 8 Jun 2017 15:38:47 -0300

perf tools: Fix a memory leak in __open_dso()

The 'name' variable should be freed on the error path.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: kernel-team@lge.com
Link: http://lkml.kernel.org/r/20170608073109.30699-3-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/dso.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
index b27d127..1f29e4f 100644
--- a/tools/perf/util/dso.c
+++ b/tools/perf/util/dso.c
@@ -412,8 +412,10 @@ static int __open_dso(struct dso *dso, struct machine *machine)
 		return -EINVAL;
 	}
 
-	if (!is_regular_file(name))
+	if (!is_regular_file(name)) {
+		free(name);
 		return -EINVAL;
+	}
 
 	fd = do_open(name);
 	free(name);

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [tip:perf/urgent] perf tools: Introduce dso__decompress_kmodule_{fd,path}
  2017-06-08  7:31 ` [PATCH v4 3/9] perf tools: Introduce dso__decompress_kmodule_{fd,path} Namhyung Kim
@ 2017-06-08 22:50   ` " tip-bot for Namhyung Kim
  0 siblings, 0 replies; 21+ messages in thread
From: tip-bot for Namhyung Kim @ 2017-06-08 22:50 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: jolsa, a.p.zijlstra, dsahern, mingo, adrian.hunter, wangnan0,
	hpa, acme, tglx, namhyung, linux-kernel

Commit-ID:  42b3fa670825983fc8bd0ac7b80cc84ae3abb75b
Gitweb:     http://git.kernel.org/tip/42b3fa670825983fc8bd0ac7b80cc84ae3abb75b
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Thu, 8 Jun 2017 16:31:03 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 8 Jun 2017 15:38:55 -0300

perf tools: Introduce dso__decompress_kmodule_{fd,path}

Move decompress_kmodule() to util/dso.c and split it into two functions
returning fd and (decompressed) file path.  The existing user only wants
the fd version but the path version will be used soon.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: kernel-team@lge.com
Link: http://lkml.kernel.org/r/20170608073109.30699-4-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/dso.c        | 58 ++++++++++++++++++++++++++++++++++++++++++++
 tools/perf/util/dso.h        |  6 +++++
 tools/perf/util/symbol-elf.c | 36 +--------------------------
 3 files changed, 65 insertions(+), 35 deletions(-)

diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
index 1f29e4f..b346b8e 100644
--- a/tools/perf/util/dso.c
+++ b/tools/perf/util/dso.c
@@ -248,6 +248,64 @@ bool dso__needs_decompress(struct dso *dso)
 		dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP;
 }
 
+static int decompress_kmodule(struct dso *dso, const char *name, char *tmpbuf)
+{
+	int fd = -1;
+	struct kmod_path m;
+
+	if (!dso__needs_decompress(dso))
+		return -1;
+
+	if (kmod_path__parse_ext(&m, dso->long_name))
+		return -1;
+
+	if (!m.comp)
+		goto out;
+
+	fd = mkstemp(tmpbuf);
+	if (fd < 0) {
+		dso->load_errno = errno;
+		goto out;
+	}
+
+	if (!decompress_to_file(m.ext, name, fd)) {
+		dso->load_errno = DSO_LOAD_ERRNO__DECOMPRESSION_FAILURE;
+		close(fd);
+		fd = -1;
+	}
+
+out:
+	free(m.ext);
+	return fd;
+}
+
+int dso__decompress_kmodule_fd(struct dso *dso, const char *name)
+{
+	char tmpbuf[] = KMOD_DECOMP_NAME;
+	int fd;
+
+	fd = decompress_kmodule(dso, name, tmpbuf);
+	unlink(tmpbuf);
+	return fd;
+}
+
+int dso__decompress_kmodule_path(struct dso *dso, const char *name,
+				 char *pathname, size_t len)
+{
+	char tmpbuf[] = KMOD_DECOMP_NAME;
+	int fd;
+
+	fd = decompress_kmodule(dso, name, tmpbuf);
+	if (fd < 0) {
+		unlink(tmpbuf);
+		return -1;
+	}
+
+	strncpy(pathname, tmpbuf, len);
+	close(fd);
+	return 0;
+}
+
 /*
  * Parses kernel module specified in @path and updates
  * @m argument like:
diff --git a/tools/perf/util/dso.h b/tools/perf/util/dso.h
index 5fe2ab5..bd061ba 100644
--- a/tools/perf/util/dso.h
+++ b/tools/perf/util/dso.h
@@ -244,6 +244,12 @@ bool is_supported_compression(const char *ext);
 bool is_kernel_module(const char *pathname, int cpumode);
 bool decompress_to_file(const char *ext, const char *filename, int output_fd);
 bool dso__needs_decompress(struct dso *dso);
+int dso__decompress_kmodule_fd(struct dso *dso, const char *name);
+int dso__decompress_kmodule_path(struct dso *dso, const char *name,
+				 char *pathname, size_t len);
+
+#define KMOD_DECOMP_NAME  "/tmp/perf-kmod-XXXXXX"
+#define KMOD_DECOMP_LEN   sizeof(KMOD_DECOMP_NAME)
 
 struct kmod_path {
 	char *name;
diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c
index 1fb2efa..d342e77 100644
--- a/tools/perf/util/symbol-elf.c
+++ b/tools/perf/util/symbol-elf.c
@@ -637,40 +637,6 @@ static int dso__swap_init(struct dso *dso, unsigned char eidata)
 	return 0;
 }
 
-static int decompress_kmodule(struct dso *dso, const char *name,
-			      enum dso_binary_type type)
-{
-	int fd = -1;
-	char tmpbuf[] = "/tmp/perf-kmod-XXXXXX";
-	struct kmod_path m;
-
-	if (type != DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP &&
-	    type != DSO_BINARY_TYPE__GUEST_KMODULE_COMP &&
-	    type != DSO_BINARY_TYPE__BUILD_ID_CACHE)
-		return -1;
-
-	if (kmod_path__parse_ext(&m, dso->long_name) || !m.comp)
-		return -1;
-
-	fd = mkstemp(tmpbuf);
-	if (fd < 0) {
-		dso->load_errno = errno;
-		goto out;
-	}
-
-	if (!decompress_to_file(m.ext, name, fd)) {
-		dso->load_errno = DSO_LOAD_ERRNO__DECOMPRESSION_FAILURE;
-		close(fd);
-		fd = -1;
-	}
-
-	unlink(tmpbuf);
-
-out:
-	free(m.ext);
-	return fd;
-}
-
 bool symsrc__possibly_runtime(struct symsrc *ss)
 {
 	return ss->dynsym || ss->opdsec;
@@ -702,7 +668,7 @@ int symsrc__init(struct symsrc *ss, struct dso *dso, const char *name,
 	int fd;
 
 	if (dso__needs_decompress(dso)) {
-		fd = decompress_kmodule(dso, name, type);
+		fd = dso__decompress_kmodule_fd(dso, name);
 		if (fd < 0)
 			return -1;
 	} else {

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [tip:perf/urgent] perf annotate: Use dso__decompress_kmodule_path()
  2017-06-08  7:31 ` [PATCH v4 4/9] perf annotate: Use dso__decompress_kmodule_path() Namhyung Kim
@ 2017-06-08 22:51   ` " tip-bot for Namhyung Kim
  0 siblings, 0 replies; 21+ messages in thread
From: tip-bot for Namhyung Kim @ 2017-06-08 22:51 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: tglx, wangnan0, acme, linux-kernel, a.p.zijlstra, dsahern, jolsa,
	adrian.hunter, hpa, namhyung, mingo

Commit-ID:  3c84fd53044f98017271101b59a21ddb20fb312b
Gitweb:     http://git.kernel.org/tip/3c84fd53044f98017271101b59a21ddb20fb312b
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Thu, 8 Jun 2017 16:31:04 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 8 Jun 2017 15:39:02 -0300

perf annotate: Use dso__decompress_kmodule_path()

Convert open-coded decompress routine to use the function.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: kernel-team@lge.com
Link: http://lkml.kernel.org/r/20170608073109.30699-5-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/annotate.c | 27 +++------------------------
 1 file changed, 3 insertions(+), 24 deletions(-)

diff --git a/tools/perf/util/annotate.c b/tools/perf/util/annotate.c
index df4486c..ddbd56d 100644
--- a/tools/perf/util/annotate.c
+++ b/tools/perf/util/annotate.c
@@ -1431,31 +1431,10 @@ int symbol__disassemble(struct symbol *sym, struct map *map, const char *arch_na
 				sizeof(symfs_filename));
 		}
 	} else if (dso__needs_decompress(dso)) {
-		char tmp[PATH_MAX];
-		struct kmod_path m;
-		int fd;
-		bool ret;
+		char tmp[KMOD_DECOMP_LEN];
 
-		if (kmod_path__parse_ext(&m, symfs_filename))
-			goto out;
-
-		snprintf(tmp, PATH_MAX, "/tmp/perf-kmod-XXXXXX");
-
-		fd = mkstemp(tmp);
-		if (fd < 0) {
-			free(m.ext);
-			goto out;
-		}
-
-		ret = decompress_to_file(m.ext, symfs_filename, fd);
-
-		if (ret)
-			pr_err("Cannot decompress %s %s\n", m.ext, symfs_filename);
-
-		free(m.ext);
-		close(fd);
-
-		if (!ret)
+		if (dso__decompress_kmodule_path(dso, symfs_filename,
+						 tmp, sizeof(tmp)) < 0)
 			goto out;
 
 		strcpy(symfs_filename, tmp);

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [tip:perf/urgent] perf tools: Decompress kernel module when reading DSO data
  2017-06-08  7:31 ` [PATCH v4 5/9] perf tools: Decompress kernel module when reading DSO data Namhyung Kim
@ 2017-06-08 22:51   ` " tip-bot for Namhyung Kim
  0 siblings, 0 replies; 21+ messages in thread
From: tip-bot for Namhyung Kim @ 2017-06-08 22:51 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: tglx, linux-kernel, namhyung, mingo, dsahern, jolsa,
	a.p.zijlstra, acme, adrian.hunter, hpa, wangnan0

Commit-ID:  1d6b3c9ba756a5134fd7ad1959acac776d17404b
Gitweb:     http://git.kernel.org/tip/1d6b3c9ba756a5134fd7ad1959acac776d17404b
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Thu, 8 Jun 2017 16:31:05 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 8 Jun 2017 15:39:07 -0300

perf tools: Decompress kernel module when reading DSO data

Currently perf decompresses kernel modules when loading the symbol table
but it missed to do it when reading raw data.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: kernel-team@lge.com
Link: http://lkml.kernel.org/r/20170608073109.30699-6-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/dso.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
index b346b8e..c63525d 100644
--- a/tools/perf/util/dso.c
+++ b/tools/perf/util/dso.c
@@ -475,7 +475,23 @@ static int __open_dso(struct dso *dso, struct machine *machine)
 		return -EINVAL;
 	}
 
+	if (dso__needs_decompress(dso)) {
+		char newpath[KMOD_DECOMP_LEN];
+		size_t len = sizeof(newpath);
+
+		if (dso__decompress_kmodule_path(dso, name, newpath, len) < 0) {
+			free(name);
+			return -dso->load_errno;
+		}
+
+		strcpy(name, newpath);
+	}
+
 	fd = do_open(name);
+
+	if (dso__needs_decompress(dso))
+		unlink(name);
+
 	free(name);
 	return fd;
 }

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [tip:perf/urgent] perf tools: Consolidate error path in __open_dso()
  2017-06-08  7:31 ` [PATCH v4 6/9] perf tools: Consolidate error path in __open_dso() Namhyung Kim
@ 2017-06-08 22:52   ` " tip-bot for Namhyung Kim
  0 siblings, 0 replies; 21+ messages in thread
From: tip-bot for Namhyung Kim @ 2017-06-08 22:52 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, namhyung, dsahern, mingo, tglx, adrian.hunter,
	wangnan0, jolsa, hpa, a.p.zijlstra, acme

Commit-ID:  8ba29adf9a7cdff3c7283d5fc0dcf5e777d3b40f
Gitweb:     http://git.kernel.org/tip/8ba29adf9a7cdff3c7283d5fc0dcf5e777d3b40f
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Thu, 8 Jun 2017 16:31:06 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 8 Jun 2017 15:39:13 -0300

perf tools: Consolidate error path in __open_dso()

On failure, it should free the 'name', so clean up the error path using
goto.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Suggested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: kernel-team@lge.com
Link: http://lkml.kernel.org/r/20170608073109.30699-7-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/dso.c | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/tools/perf/util/dso.c b/tools/perf/util/dso.c
index c63525d..4e7ab61 100644
--- a/tools/perf/util/dso.c
+++ b/tools/perf/util/dso.c
@@ -454,7 +454,7 @@ static int do_open(char *name)
 
 static int __open_dso(struct dso *dso, struct machine *machine)
 {
-	int fd;
+	int fd = -EINVAL;
 	char *root_dir = (char *)"";
 	char *name = malloc(PATH_MAX);
 
@@ -465,23 +465,19 @@ static int __open_dso(struct dso *dso, struct machine *machine)
 		root_dir = machine->root_dir;
 
 	if (dso__read_binary_type_filename(dso, dso->binary_type,
-					    root_dir, name, PATH_MAX)) {
-		free(name);
-		return -EINVAL;
-	}
+					    root_dir, name, PATH_MAX))
+		goto out;
 
-	if (!is_regular_file(name)) {
-		free(name);
-		return -EINVAL;
-	}
+	if (!is_regular_file(name))
+		goto out;
 
 	if (dso__needs_decompress(dso)) {
 		char newpath[KMOD_DECOMP_LEN];
 		size_t len = sizeof(newpath);
 
 		if (dso__decompress_kmodule_path(dso, name, newpath, len) < 0) {
-			free(name);
-			return -dso->load_errno;
+			fd = -dso->load_errno;
+			goto out;
 		}
 
 		strcpy(name, newpath);
@@ -492,6 +488,7 @@ static int __open_dso(struct dso *dso, struct machine *machine)
 	if (dso__needs_decompress(dso))
 		unlink(name);
 
+out:
 	free(name);
 	return fd;
 }

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [tip:perf/urgent] perf tests: Decompress kernel module before objdump
  2017-06-08  7:31 ` [PATCH v4 7/9] perf test: Decompress kernel module before objdump Namhyung Kim
  2017-06-08  7:34   ` Adrian Hunter
@ 2017-06-08 22:52   ` " tip-bot for Namhyung Kim
  1 sibling, 0 replies; 21+ messages in thread
From: tip-bot for Namhyung Kim @ 2017-06-08 22:52 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: dsahern, wangnan0, acme, linux-kernel, tglx, adrian.hunter,
	jolsa, a.p.zijlstra, mingo, namhyung, hpa

Commit-ID:  94df1040b1e6aacd8dec0ba3c61d7e77cd695f26
Gitweb:     http://git.kernel.org/tip/94df1040b1e6aacd8dec0ba3c61d7e77cd695f26
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Thu, 8 Jun 2017 16:31:07 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 8 Jun 2017 15:39:19 -0300

perf tests: Decompress kernel module before objdump

If a kernel modules is compressed, it should be decompressed before
running objdump to parse binary data correctly.  This fixes a failure of
object code reading test for me.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: kernel-team@lge.com
Link: http://lkml.kernel.org/r/20170608073109.30699-8-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/tests/code-reading.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

diff --git a/tools/perf/tests/code-reading.c b/tools/perf/tests/code-reading.c
index 1f14e76..94b7c7b 100644
--- a/tools/perf/tests/code-reading.c
+++ b/tools/perf/tests/code-reading.c
@@ -229,6 +229,8 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,
 	unsigned char buf2[BUFSZ];
 	size_t ret_len;
 	u64 objdump_addr;
+	const char *objdump_name;
+	char decomp_name[KMOD_DECOMP_LEN];
 	int ret;
 
 	pr_debug("Reading object code for memory address: %#"PRIx64"\n", addr);
@@ -289,9 +291,25 @@ static int read_object_code(u64 addr, size_t len, u8 cpumode,
 		state->done[state->done_cnt++] = al.map->start;
 	}
 
+	objdump_name = al.map->dso->long_name;
+	if (dso__needs_decompress(al.map->dso)) {
+		if (dso__decompress_kmodule_path(al.map->dso, objdump_name,
+						 decomp_name,
+						 sizeof(decomp_name)) < 0) {
+			pr_debug("decompression failed\n");
+			return -1;
+		}
+
+		objdump_name = decomp_name;
+	}
+
 	/* Read the object code using objdump */
 	objdump_addr = map__rip_2objdump(al.map, al.addr);
-	ret = read_via_objdump(al.map->dso->long_name, objdump_addr, buf2, len);
+	ret = read_via_objdump(objdump_name, objdump_addr, buf2, len);
+
+	if (dso__needs_decompress(al.map->dso))
+		unlink(objdump_name);
+
 	if (ret > 0) {
 		/*
 		 * The kernel maps are inaccurate - assume objdump is right in

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [tip:perf/urgent] perf symbols: Keep DSO->symtab_type after decompress
  2017-06-08  7:31 ` [PATCH v4 8/9] perf symbols: Keep DSO->symtab_type after decompress Namhyung Kim
@ 2017-06-08 22:53   ` " tip-bot for Namhyung Kim
  0 siblings, 0 replies; 21+ messages in thread
From: tip-bot for Namhyung Kim @ 2017-06-08 22:53 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: wangnan0, a.p.zijlstra, jolsa, mingo, linux-kernel, tglx,
	dsahern, acme, adrian.hunter, hpa, namhyung

Commit-ID:  c25ec42f846f702f8f532fbc890171e3a1f6ec85
Gitweb:     http://git.kernel.org/tip/c25ec42f846f702f8f532fbc890171e3a1f6ec85
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Thu, 8 Jun 2017 16:31:08 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 8 Jun 2017 15:39:26 -0300

perf symbols: Keep DSO->symtab_type after decompress

The symsrc__init() overwrites dso->symtab_type as symsrc->type in
dso__load_sym().  But for compressed kernel modules in the build-id
cache, it should have original symtab type to be decompressed as needed.

This fixes perf annotate to show disassembly of the function properly.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: kernel-team@lge.com
Link: http://lkml.kernel.org/r/20170608073109.30699-9-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/symbol-elf.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/perf/util/symbol-elf.c b/tools/perf/util/symbol-elf.c
index d342e77..502505c 100644
--- a/tools/perf/util/symbol-elf.c
+++ b/tools/perf/util/symbol-elf.c
@@ -671,6 +671,8 @@ int symsrc__init(struct symsrc *ss, struct dso *dso, const char *name,
 		fd = dso__decompress_kmodule_fd(dso, name);
 		if (fd < 0)
 			return -1;
+
+		type = dso->symtab_type;
 	} else {
 		fd = open(name, O_RDONLY);
 		if (fd < 0) {

^ permalink raw reply	[flat|nested] 21+ messages in thread

* [tip:perf/urgent] perf symbols: Kill dso__build_id_is_kmod()
  2017-06-08  7:31 ` [PATCH v4 9/9] perf symbols: Kill dso__build_id_is_kmod() Namhyung Kim
@ 2017-06-08 22:53   ` " tip-bot for Namhyung Kim
  0 siblings, 0 replies; 21+ messages in thread
From: tip-bot for Namhyung Kim @ 2017-06-08 22:53 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, tglx, mingo, jolsa, namhyung, adrian.hunter, hpa,
	dsahern, acme, wangnan0, a.p.zijlstra

Commit-ID:  b89fe63fbafe307fb72546f7a2320380bf41bdd4
Gitweb:     http://git.kernel.org/tip/b89fe63fbafe307fb72546f7a2320380bf41bdd4
Author:     Namhyung Kim <namhyung@kernel.org>
AuthorDate: Thu, 8 Jun 2017 16:31:09 +0900
Committer:  Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 8 Jun 2017 15:39:34 -0300

perf symbols: Kill dso__build_id_is_kmod()

The commit e7ee40475760 ("perf symbols: Fix symbols searching for module
in buildid-cache") added the function to check kernel modules reside in
the build-id cache.  This was because there's no way to identify a DSO
which is actually a kernel module.  So it searched linkname of the file
and find ".ko" suffix.

But this does not work for compressed kernel modules and now such DSOs
hCcave correct symtab_type now.  So no need to check it anymore.  This
patch essentially reverts the commit.

Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Wang Nan <wangnan0@huawei.com>
Cc: kernel-team@lge.com
Link: http://lkml.kernel.org/r/20170608073109.30699-10-namhyung@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/build-id.c | 45 ---------------------------------------------
 tools/perf/util/build-id.h |  1 -
 tools/perf/util/symbol.c   |  4 ----
 3 files changed, 50 deletions(-)

diff --git a/tools/perf/util/build-id.c b/tools/perf/util/build-id.c
index 168cc49..e0148b0 100644
--- a/tools/perf/util/build-id.c
+++ b/tools/perf/util/build-id.c
@@ -278,51 +278,6 @@ char *dso__build_id_filename(const struct dso *dso, char *bf, size_t size)
 	return bf;
 }
 
-bool dso__build_id_is_kmod(const struct dso *dso, char *bf, size_t size)
-{
-	char *id_name = NULL, *ch;
-	struct stat sb;
-	char sbuild_id[SBUILD_ID_SIZE];
-
-	if (!dso->has_build_id)
-		goto err;
-
-	build_id__sprintf(dso->build_id, sizeof(dso->build_id), sbuild_id);
-	id_name = build_id_cache__linkname(sbuild_id, NULL, 0);
-	if (!id_name)
-		goto err;
-	if (access(id_name, F_OK))
-		goto err;
-	if (lstat(id_name, &sb) == -1)
-		goto err;
-	if ((size_t)sb.st_size > size - 1)
-		goto err;
-	if (readlink(id_name, bf, size - 1) < 0)
-		goto err;
-
-	bf[sb.st_size] = '\0';
-
-	/*
-	 * link should be:
-	 * ../../lib/modules/4.4.0-rc4/kernel/net/ipv4/netfilter/nf_nat_ipv4.ko/a09fe3eb3147dafa4e3b31dbd6257e4d696bdc92
-	 */
-	ch = strrchr(bf, '/');
-	if (!ch)
-		goto err;
-	if (ch - 3 < bf)
-		goto err;
-
-	free(id_name);
-	return strncmp(".ko", ch - 3, 3) == 0;
-err:
-	pr_err("Invalid build id: %s\n", id_name ? :
-					 dso->long_name ? :
-					 dso->short_name ? :
-					 "[unknown]");
-	free(id_name);
-	return false;
-}
-
 #define dsos__for_each_with_build_id(pos, head)	\
 	list_for_each_entry(pos, head, node)	\
 		if (!pos->has_build_id)		\
diff --git a/tools/perf/util/build-id.h b/tools/perf/util/build-id.h
index 8a89b19..96690a5 100644
--- a/tools/perf/util/build-id.h
+++ b/tools/perf/util/build-id.h
@@ -17,7 +17,6 @@ char *build_id_cache__kallsyms_path(const char *sbuild_id, char *bf,
 				    size_t size);
 
 char *dso__build_id_filename(const struct dso *dso, char *bf, size_t size);
-bool dso__build_id_is_kmod(const struct dso *dso, char *bf, size_t size);
 
 int build_id__mark_dso_hit(struct perf_tool *tool, union perf_event *event,
 			   struct perf_sample *sample, struct perf_evsel *evsel,
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 8f2b068..e7a98db 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -1562,10 +1562,6 @@ int dso__load(struct dso *dso, struct map *map)
 	if (!runtime_ss && syms_ss)
 		runtime_ss = syms_ss;
 
-	if (syms_ss && syms_ss->type == DSO_BINARY_TYPE__BUILD_ID_CACHE)
-		if (dso__build_id_is_kmod(dso, name, PATH_MAX))
-			kmod = true;
-
 	if (syms_ss)
 		ret = dso__load_sym(dso, map, syms_ss, runtime_ss, kmod);
 	else

^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, back to index

Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-08  7:31 [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4) Namhyung Kim
2017-06-08  7:31 ` [PATCH v4 1/9] perf annotate: Fix symbolic link of build-id cache Namhyung Kim
2017-06-08 22:49   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
2017-06-08  7:31 ` [PATCH v4 2/9] perf tools: Fix a memory leak in __open_dso() Namhyung Kim
2017-06-08 22:50   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
2017-06-08  7:31 ` [PATCH v4 3/9] perf tools: Introduce dso__decompress_kmodule_{fd,path} Namhyung Kim
2017-06-08 22:50   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
2017-06-08  7:31 ` [PATCH v4 4/9] perf annotate: Use dso__decompress_kmodule_path() Namhyung Kim
2017-06-08 22:51   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
2017-06-08  7:31 ` [PATCH v4 5/9] perf tools: Decompress kernel module when reading DSO data Namhyung Kim
2017-06-08 22:51   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
2017-06-08  7:31 ` [PATCH v4 6/9] perf tools: Consolidate error path in __open_dso() Namhyung Kim
2017-06-08 22:52   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
2017-06-08  7:31 ` [PATCH v4 7/9] perf test: Decompress kernel module before objdump Namhyung Kim
2017-06-08  7:34   ` Adrian Hunter
2017-06-08 22:52   ` [tip:perf/urgent] perf tests: " tip-bot for Namhyung Kim
2017-06-08  7:31 ` [PATCH v4 8/9] perf symbols: Keep DSO->symtab_type after decompress Namhyung Kim
2017-06-08 22:53   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
2017-06-08  7:31 ` [PATCH v4 9/9] perf symbols: Kill dso__build_id_is_kmod() Namhyung Kim
2017-06-08 22:53   ` [tip:perf/urgent] " tip-bot for Namhyung Kim
2017-06-08 12:10 ` [PATCHSET 0/9] perf tools: Fix for compressed kernel modules (v4) Jiri Olsa

LKML Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git
	git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git
	git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git
	git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git
	git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git
	git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git
	git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git
	git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \
		linux-kernel@vger.kernel.org linux-kernel@archiver.kernel.org
	public-inbox-index lkml


Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel


AGPL code for this site: git clone https://public-inbox.org/ public-inbox