Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 519ce9fe authored by Ingo Molnar's avatar Ingo Molnar
Browse files

Merge tag 'perf-core-for-mingo' of...

Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux

 into perf/core

Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo:

User visible changes:

  - Fix 'perf probe' segfault when glob matching function without debuginfo (Wang Nan)

  - Remove newline char when reading event scale and unit (Madhavan Srinivasan)

  - Deal with kernel module names in '[]' correctly (Wang Nan)

Infrastructure changes:

  - Fix the search for the kernel DSO on the unified list (Arnaldo Carvalho de Melo)

  - Move tools/perf/util/include/linux/{kernel.h,list.h,poison.h} to tools/include,
    to be used in tools/lib/bpf/ (Wang Nan)

Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents 5c9b9bc6 1f121b03
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
#ifndef PERF_LINUX_KERNEL_H_
#define PERF_LINUX_KERNEL_H_
#ifndef __TOOLS_LINUX_KERNEL_H
#define __TOOLS_LINUX_KERNEL_H

#include <stdarg.h>
#include <stdio.h>
+3 −3
Original line number Diff line number Diff line
#include <linux/kernel.h>
#include <linux/types.h>

#include "../../../../include/linux/list.h"
#include "../../../include/linux/list.h"

#ifndef PERF_LIST_H
#define PERF_LIST_H
#ifndef TOOLS_LIST_H
#define TOOLS_LIST_H
/**
 * list_del_range - deletes range of entries from list.
 * @begin: first element in the range to delete from the list.
+1 −0
Original line number Diff line number Diff line
#include "../../../include/linux/poison.h"
+3 −0
Original line number Diff line number Diff line
@@ -40,7 +40,10 @@ tools/include/linux/bitops.h
tools/include/linux/compiler.h
tools/include/linux/export.h
tools/include/linux/hash.h
tools/include/linux/kernel.h
tools/include/linux/list.h
tools/include/linux/log2.h
tools/include/linux/poison.h
tools/include/linux/types.h
include/asm-generic/bitops/arch_hweight.h
include/asm-generic/bitops/const_hweight.h
+72 −0
Original line number Diff line number Diff line
@@ -34,9 +34,21 @@ static int test(const char *path, bool alloc_name, bool alloc_ext,
	return 0;
}

static int test_is_kernel_module(const char *path, int cpumode, bool expect)
{
	TEST_ASSERT_VAL("is_kernel_module",
			(!!is_kernel_module(path, cpumode)) == (!!expect));
	pr_debug("%s (cpumode: %d) - is_kernel_module: %s\n",
			path, cpumode, expect ? "true" : "false");
	return 0;
}

#define T(path, an, ae, k, c, n, e) \
	TEST_ASSERT_VAL("failed", !test(path, an, ae, k, c, n, e))

#define M(path, c, e) \
	TEST_ASSERT_VAL("failed", !test_is_kernel_module(path, c, e))

int test__kmod_path__parse(void)
{
	/* path                alloc_name  alloc_ext   kmod  comp   name     ext */
@@ -44,30 +56,90 @@ int test__kmod_path__parse(void)
	T("/xxxx/xxxx/x-x.ko", false     , true      , true, false, NULL   , NULL);
	T("/xxxx/xxxx/x-x.ko", true      , false     , true, false, "[x_x]", NULL);
	T("/xxxx/xxxx/x-x.ko", false     , false     , true, false, NULL   , NULL);
	M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
	M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_KERNEL, true);
	M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_USER, false);

	/* path                alloc_name  alloc_ext   kmod  comp  name   ext */
	T("/xxxx/xxxx/x.ko.gz", true     , true      , true, true, "[x]", "gz");
	T("/xxxx/xxxx/x.ko.gz", false    , true      , true, true, NULL , "gz");
	T("/xxxx/xxxx/x.ko.gz", true     , false     , true, true, "[x]", NULL);
	T("/xxxx/xxxx/x.ko.gz", false    , false     , true, true, NULL , NULL);
	M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
	M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_KERNEL, true);
	M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_USER, false);

	/* path              alloc_name  alloc_ext  kmod   comp  name    ext */
	T("/xxxx/xxxx/x.gz", true      , true     , false, true, "x.gz" ,"gz");
	T("/xxxx/xxxx/x.gz", false     , true     , false, true, NULL   ,"gz");
	T("/xxxx/xxxx/x.gz", true      , false    , false, true, "x.gz" , NULL);
	T("/xxxx/xxxx/x.gz", false     , false    , false, true, NULL   , NULL);
	M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
	M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_KERNEL, false);
	M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_USER, false);

	/* path   alloc_name  alloc_ext  kmod   comp  name     ext */
	T("x.gz", true      , true     , false, true, "x.gz", "gz");
	T("x.gz", false     , true     , false, true, NULL  , "gz");
	T("x.gz", true      , false    , false, true, "x.gz", NULL);
	T("x.gz", false     , false    , false, true, NULL  , NULL);
	M("x.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
	M("x.gz", PERF_RECORD_MISC_KERNEL, false);
	M("x.gz", PERF_RECORD_MISC_USER, false);

	/* path      alloc_name  alloc_ext  kmod  comp  name  ext */
	T("x.ko.gz", true      , true     , true, true, "[x]", "gz");
	T("x.ko.gz", false     , true     , true, true, NULL , "gz");
	T("x.ko.gz", true      , false    , true, true, "[x]", NULL);
	T("x.ko.gz", false     , false    , true, true, NULL , NULL);
	M("x.ko.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
	M("x.ko.gz", PERF_RECORD_MISC_KERNEL, true);
	M("x.ko.gz", PERF_RECORD_MISC_USER, false);

	/* path            alloc_name  alloc_ext  kmod  comp   name             ext */
	T("[test_module]", true      , true     , true, false, "[test_module]", NULL);
	T("[test_module]", false     , true     , true, false, NULL           , NULL);
	T("[test_module]", true      , false    , true, false, "[test_module]", NULL);
	T("[test_module]", false     , false    , true, false, NULL           , NULL);
	M("[test_module]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
	M("[test_module]", PERF_RECORD_MISC_KERNEL, true);
	M("[test_module]", PERF_RECORD_MISC_USER, false);

	/* path            alloc_name  alloc_ext  kmod  comp   name             ext */
	T("[test.module]", true      , true     , true, false, "[test.module]", NULL);
	T("[test.module]", false     , true     , true, false, NULL           , NULL);
	T("[test.module]", true      , false    , true, false, "[test.module]", NULL);
	T("[test.module]", false     , false    , true, false, NULL           , NULL);
	M("[test.module]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
	M("[test.module]", PERF_RECORD_MISC_KERNEL, true);
	M("[test.module]", PERF_RECORD_MISC_USER, false);

	/* path     alloc_name  alloc_ext  kmod   comp   name      ext */
	T("[vdso]", true      , true     , false, false, "[vdso]", NULL);
	T("[vdso]", false     , true     , false, false, NULL    , NULL);
	T("[vdso]", true      , false    , false, false, "[vdso]", NULL);
	T("[vdso]", false     , false    , false, false, NULL    , NULL);
	M("[vdso]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
	M("[vdso]", PERF_RECORD_MISC_KERNEL, false);
	M("[vdso]", PERF_RECORD_MISC_USER, false);

	/* path         alloc_name  alloc_ext  kmod   comp   name          ext */
	T("[vsyscall]", true      , true     , false, false, "[vsyscall]", NULL);
	T("[vsyscall]", false     , true     , false, false, NULL        , NULL);
	T("[vsyscall]", true      , false    , false, false, "[vsyscall]", NULL);
	T("[vsyscall]", false     , false    , false, false, NULL        , NULL);
	M("[vsyscall]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
	M("[vsyscall]", PERF_RECORD_MISC_KERNEL, false);
	M("[vsyscall]", PERF_RECORD_MISC_USER, false);

	/* path                alloc_name  alloc_ext  kmod   comp   name      ext */
	T("[kernel.kallsyms]", true      , true     , false, false, "[kernel.kallsyms]", NULL);
	T("[kernel.kallsyms]", false     , true     , false, false, NULL               , NULL);
	T("[kernel.kallsyms]", true      , false    , false, false, "[kernel.kallsyms]", NULL);
	T("[kernel.kallsyms]", false     , false    , false, false, NULL               , NULL);
	M("[kernel.kallsyms]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
	M("[kernel.kallsyms]", PERF_RECORD_MISC_KERNEL, false);
	M("[kernel.kallsyms]", PERF_RECORD_MISC_USER, false);

	return 0;
}
Loading