Commit fbdd17ec authored by Ingo Molnar's avatar Ingo Molnar

Merge branch 'perf-core-for-mingo' into perf/urgent

Conflicts:
	tools/perf/bench/numa.c

Pull perf fixes from Jiri Olsa.
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents 740c699a 90f6bb6c
...@@ -6782,7 +6782,7 @@ PERFORMANCE EVENTS SUBSYSTEM ...@@ -6782,7 +6782,7 @@ PERFORMANCE EVENTS SUBSYSTEM
M: Peter Zijlstra <a.p.zijlstra@chello.nl> M: Peter Zijlstra <a.p.zijlstra@chello.nl>
M: Paul Mackerras <paulus@samba.org> M: Paul Mackerras <paulus@samba.org>
M: Ingo Molnar <mingo@redhat.com> M: Ingo Molnar <mingo@redhat.com>
M: Arnaldo Carvalho de Melo <acme@ghostprotocols.net> M: Arnaldo Carvalho de Melo <acme@kernel.org>
L: linux-kernel@vger.kernel.org L: linux-kernel@vger.kernel.org
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
S: Supported S: Supported
......
This diff is collapsed.
...@@ -48,6 +48,12 @@ SUBSYSTEM ...@@ -48,6 +48,12 @@ SUBSYSTEM
'mem':: 'mem'::
Memory access performance. Memory access performance.
'numa'::
NUMA scheduling and MM benchmarks.
'futex'::
Futex stressing benchmarks.
'all':: 'all'::
All benchmark subsystems. All benchmark subsystems.
...@@ -187,6 +193,22 @@ Show only the result with page faults before memset. ...@@ -187,6 +193,22 @@ Show only the result with page faults before memset.
--no-prefault:: --no-prefault::
Show only the result without page faults before memset. Show only the result without page faults before memset.
SUITES FOR 'numa'
~~~~~~~~~~~~~~~~~
*mem*::
Suite for evaluating NUMA workloads.
SUITES FOR 'futex'
~~~~~~~~~~~~~~~~~~
*hash*::
Suite for evaluating hash tables.
*wake*::
Suite for evaluating wake calls.
*requeue*::
Suite for evaluating requeue calls.
SEE ALSO SEE ALSO
-------- --------
linkperf:perf[1] linkperf:perf[1]
...@@ -87,7 +87,6 @@ Default is to monitor all CPUS. ...@@ -87,7 +87,6 @@ Default is to monitor all CPUS.
--realtime=<priority>:: --realtime=<priority>::
Collect data with this RT SCHED_FIFO priority. Collect data with this RT SCHED_FIFO priority.
-s <symbol>::
--sym-annotate=<symbol>:: --sym-annotate=<symbol>::
Annotate this symbol. Annotate this symbol.
......
...@@ -1593,6 +1593,10 @@ static void init_params(struct params *p, const char *name, int argc, const char ...@@ -1593,6 +1593,10 @@ static void init_params(struct params *p, const char *name, int argc, const char
p->data_rand_walk = true; p->data_rand_walk = true;
p->nr_loops = -1; p->nr_loops = -1;
p->init_random = true; p->init_random = true;
p->mb_global_str = "1";
p->nr_proc = 1;
p->nr_threads = 1;
p->nr_secs = 5;
p->run_all = argc == 1; p->run_all = argc == 1;
} }
......
...@@ -174,13 +174,20 @@ static inline int perf_evsel__nr_cpus(struct perf_evsel *evsel) ...@@ -174,13 +174,20 @@ static inline int perf_evsel__nr_cpus(struct perf_evsel *evsel)
static void perf_evsel__reset_stat_priv(struct perf_evsel *evsel) static void perf_evsel__reset_stat_priv(struct perf_evsel *evsel)
{ {
memset(evsel->priv, 0, sizeof(struct perf_stat)); int i;
struct perf_stat *ps = evsel->priv;
for (i = 0; i < 3; i++)
init_stats(&ps->res_stats[i]);
} }
static int perf_evsel__alloc_stat_priv(struct perf_evsel *evsel) static int perf_evsel__alloc_stat_priv(struct perf_evsel *evsel)
{ {
evsel->priv = zalloc(sizeof(struct perf_stat)); evsel->priv = zalloc(sizeof(struct perf_stat));
return evsel->priv == NULL ? -ENOMEM : 0; if (evsel == NULL)
return -ENOMEM;
perf_evsel__reset_stat_priv(evsel);
return 0;
} }
static void perf_evsel__free_stat_priv(struct perf_evsel *evsel) static void perf_evsel__free_stat_priv(struct perf_evsel *evsel)
......
...@@ -65,10 +65,9 @@ ifndef NO_LIBELF ...@@ -65,10 +65,9 @@ ifndef NO_LIBELF
ifdef LIBDW_DIR ifdef LIBDW_DIR
LIBDW_CFLAGS := -I$(LIBDW_DIR)/include LIBDW_CFLAGS := -I$(LIBDW_DIR)/include
LIBDW_LDFLAGS := -L$(LIBDW_DIR)/lib LIBDW_LDFLAGS := -L$(LIBDW_DIR)/lib
FEATURE_CHECK_CFLAGS-libdw-dwarf-unwind := $(LIBDW_CFLAGS)
FEATURE_CHECK_LDFLAGS-libdw-dwarf-unwind := $(LIBDW_LDFLAGS) -ldw
endif endif
FEATURE_CHECK_CFLAGS-libdw-dwarf-unwind := $(LIBDW_CFLAGS)
FEATURE_CHECK_LDFLAGS-libdw-dwarf-unwind := $(LIBDW_LDFLAGS) -ldw
endif endif
# include ARCH specific config # include ARCH specific config
...@@ -278,6 +277,8 @@ else ...@@ -278,6 +277,8 @@ else
NO_LIBELF := 1 NO_LIBELF := 1
NO_DWARF := 1 NO_DWARF := 1
NO_DEMANGLE := 1 NO_DEMANGLE := 1
NO_LIBUNWIND := 1
NO_LIBDW_DWARF_UNWIND := 1
else else
msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static); msg := $(error No gnu/libc-version.h found, please install glibc-dev[el]/glibc-static);
endif endif
......
...@@ -985,7 +985,7 @@ static int debuginfo__find_probes(struct debuginfo *dbg, ...@@ -985,7 +985,7 @@ static int debuginfo__find_probes(struct debuginfo *dbg,
#if _ELFUTILS_PREREQ(0, 142) #if _ELFUTILS_PREREQ(0, 142)
/* Get the call frame information from this dwarf */ /* Get the call frame information from this dwarf */
pf->cfi = dwarf_getcfi(dbg->dbg); pf->cfi = dwarf_getcfi_elf(dwarf_getelf(dbg->dbg));
#endif #endif
off = 0; off = 0;
...@@ -1441,13 +1441,15 @@ static int line_range_walk_cb(const char *fname, int lineno, ...@@ -1441,13 +1441,15 @@ static int line_range_walk_cb(const char *fname, int lineno,
void *data) void *data)
{ {
struct line_finder *lf = data; struct line_finder *lf = data;
int err;
if ((strtailcmp(fname, lf->fname) != 0) || if ((strtailcmp(fname, lf->fname) != 0) ||
(lf->lno_s > lineno || lf->lno_e < lineno)) (lf->lno_s > lineno || lf->lno_e < lineno))
return 0; return 0;
if (line_range_add_line(fname, lineno, lf->lr) < 0) err = line_range_add_line(fname, lineno, lf->lr);
return -EINVAL; if (err < 0 && err != -EEXIST)
return err;
return 0; return 0;
} }
...@@ -1473,14 +1475,15 @@ static int find_line_range_by_line(Dwarf_Die *sp_die, struct line_finder *lf) ...@@ -1473,14 +1475,15 @@ static int find_line_range_by_line(Dwarf_Die *sp_die, struct line_finder *lf)
static int line_range_inline_cb(Dwarf_Die *in_die, void *data) static int line_range_inline_cb(Dwarf_Die *in_die, void *data)
{ {
find_line_range_by_line(in_die, data); int ret = find_line_range_by_line(in_die, data);
/* /*
* We have to check all instances of inlined function, because * We have to check all instances of inlined function, because
* some execution paths can be optimized out depends on the * some execution paths can be optimized out depends on the
* function argument of instances * function argument of instances. However, if an error occurs,
* it should be handled by the caller.
*/ */
return 0; return ret < 0 ? ret : 0;
} }
/* Search function definition from function name */ /* Search function definition from function name */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment