perf/core improvements and fixes
Arnaldo Carvalho de Melo
maintainerHi Ingo,
Please consider pulling, test built on:
[root@jouet ~]# dm
alldeps-debian: Ok
alldeps-mageia: Ok
alldeps-rhel7: Ok
alldeps-centos: Ok
alldeps-opensuse: Ok
alldeps-ubuntu: Ok
[root@jouet ~]#
All the latest distro releases, updated (dnf/yum/apt-get/urpmi/zypper/etc
upgraded as of a few days ago) as available on docker.io/vendors.
- Arnaldo
The following changes since commit ced30bc9129777d715057d06fc8dbdfd3b81e94d:
Merge tag 'perf-core-for-mingo-20160310' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core (2016-03-11 09:40:25 +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-20160323
for you to fetch changes up to 76267147f233f347dbd8f4f8c05492e5ea0a7dce:
perf llvm: Use strerror_r instead of the thread unsafe strerror one (2016-03-23 17:42:21 -0300)
----------------------------------------------------------------
perf/core improvements and fixes:
User visible:
- Fix documentation of :ppp modifier in 'perf list' (Andi Kleen)
- Fix silly nodes bitfield bits/bytes length assertion in 'perf bench numa' (Jakub Jelen)
- Remove redundant CPU output in libtraceevent (Steven Rostedt)
- Remove 'core_id' check in topology 'perf test' (Sukadev Bhattiprolu)
Infrastructure:
- Record text offset in dso to calculate objdump address, to use with modules in addition to vDSO symbol address calculations (Wang Nan)
- Move utilities.mak from perf to tools/scripts/ (Arnaldo Carvalho de Melo)
- Add cpumode to the perf_sample struct, this way we don't need to pass the union event to the machine and thread resolving routines, shortening function signatures and allowing the future introduction of a way to use tracepoint events instead of the unavailable HW cycles counter on powerpc guests in perf kvm by just hooking on perf_evsel__parse_sample, at the end (Arnaldo Carvalho de Melo)
- Remove/unexport die() related infrastructure, that at some point will finally be removed (Arnaldo Carvalho de Melo)
- Adopt linux/stringify.h from the kernel sources, not to touch this kernel header from tools/ (Arnaldo Carvalho de Melo)
- Stop using strbuf for things we can instead trivially use libc's asprintf() (Arnaldo Carvalho de Melo)
- Ditch tools/lib/util/abspath.c, its only exported function was used at just one place and can be replaced by libc's realpath() (Arnaldo Carvalho de Melo)
- Use strerror_r() in the llvm infrastructure, tread safe, its what is used elsewhere in tools/perf/ (Arnaldo Carvalho de Melo)
Cleanups:
- Removed misplaced or needless __maybe_unused/export (Arnaldo Carvalho de Melo)
----------------------------------------------------------------
Andi Kleen (1):
perf list: Fix documentation of :ppp
Arnaldo Carvalho de Melo (18):
tools: Move utilities.mak from perf to tools/scripts/
perf tools: Remove misplaced __maybe_unused
perf tests: Forward the perf_sample in the dwarf unwind test perf tools: Add cpumode to struct perf_sample
perf machine: Rename perf_event__preprocess_sample to machine__resolve perf thread: Rename perf_event__preprocess_sample_addr to thread__resolve perf script: Remove lots of unused arguments
perf tools: Remove unused DIE_IF macro
perf tools: Simplify die() mechanism
perf tools: Remove needless 'extern' from function prototypes tools include: Copy linux/stringify.h from the kernel
perf tools: Do not include stringify.h from the kernel sources perf tools: Remove unused perf_pathdup, xstrdup functions perf help: Use asprintf instead of adhoc equivalents
perf probe: No need to use formatting strbuf method
perf tools: Unexport some methods unused outside strbuf.c perf llvm: Use realpath to canonicalize paths
perf llvm: Use strerror_r instead of the thread unsafe strerror one
Jakub Jelen (1):
perf bench numa: Fix assertion for nodes bitfield
Steven Rostedt (1):
tools lib traceevent: Remove redundant CPU output
Sukadev Bhattiprolu (1):
perf test: Remove 'core_id' check in topo test
Wang Nan (1):
perf symbols: Record text offset in dso to calculate objdump address
tools/include/linux/stringify.h | 12 +++++
tools/lib/api/Makefile | 2 +-
tools/lib/subcmd/Makefile | 2 +-
tools/lib/traceevent/event-parse.c | 4 +-
tools/perf/Documentation/Makefile | 2 +-
tools/perf/Documentation/perf-list.txt | 6 ++-
tools/perf/Makefile.perf | 2 +-
tools/perf/arch/powerpc/util/header.c | 4 +-
tools/perf/bench/bench.h | 22 ++++-----
tools/perf/bench/mem-memcpy-arch.h | 2 +-
tools/perf/bench/mem-memset-arch.h | 2 +-
tools/perf/bench/numa.c | 2 +-
tools/perf/builtin-annotate.c | 2 +-
tools/perf/builtin-diff.c | 2 +-
tools/perf/builtin-help.c | 69 ++++++++++++--------------
tools/perf/builtin-inject.c | 8 +---
tools/perf/builtin-mem.c | 2 +-
tools/perf/builtin-report.c | 3 +-
tools/perf/builtin-script.c | 46 +++++++-----------
tools/perf/builtin-timechart.c | 2 +-
tools/perf/builtin-top.c | 8 ++--
tools/perf/builtin-trace.c | 9 ++--
tools/perf/builtin.h | 64 ++++++++++++-------------
tools/perf/config/Makefile | 2 +-
tools/perf/tests/code-reading.c | 5 +-
tools/perf/tests/dwarf-unwind.c | 4 +-
tools/perf/tests/hists_common.c | 6 ++-
tools/perf/tests/hists_cumulate.c | 9 +---
tools/perf/tests/hists_filter.c | 9 +---
tools/perf/tests/hists_link.c | 20 ++------
tools/perf/tests/hists_output.c | 9 +---
tools/perf/ui/gtk/hists.c | 2 +-
tools/perf/util/Build | 1 -
tools/perf/util/abspath.c | 37 --------------
tools/perf/util/annotate.h | 2 +-
tools/perf/util/auxtrace.h | 2 +-
tools/perf/util/build-id.c | 3 +-
tools/perf/util/cache.h | 24 ++++------
tools/perf/util/callchain.h | 4 +-
tools/perf/util/cgroup.h | 4 +-
tools/perf/util/cloexec.h | 2 +-
tools/perf/util/data-convert-bt.c | 2 +-
tools/perf/util/db-export.c | 2 +-
tools/perf/util/dso.h | 3 +-
tools/perf/util/dwarf-aux.c | 10 ++--
tools/perf/util/dwarf-aux.h | 72 ++++++++++++++--------------
tools/perf/util/event.c | 23 ++++-----
tools/perf/util/event.h | 13 ++---
tools/perf/util/evsel.c | 1 +
tools/perf/util/genelf.h | 8 ++--
tools/perf/util/header.c | 5 --
tools/perf/util/header.h | 2 +-
tools/perf/util/hist.c | 2 +-
tools/perf/util/hist.h | 3 +-
tools/perf/util/intel-bts.c | 2 +-
tools/perf/util/jit.h | 12 ++---
tools/perf/util/llvm-utils.c | 24 ++++++----
tools/perf/util/llvm-utils.h | 7 ++-
tools/perf/util/machine.c | 14 +++---
tools/perf/util/machine.h | 2 +-
tools/perf/util/parse-events.h | 21 ++++----
tools/perf/util/path.c | 30 ------------
tools/perf/util/probe-event.c | 2 +-
tools/perf/util/probe-event.h | 57 ++++++++++------------
tools/perf/util/probe-finder.c | 8 ++--
tools/perf/util/probe-finder.h | 24 +++++-----
tools/perf/util/quote.h | 2 +-
tools/perf/util/session.c | 5 +-
tools/perf/util/sort.c | 2 +-
tools/perf/util/stat-shadow.c | 18 ++++---
tools/perf/util/strbuf.c | 9 +++-
tools/perf/util/strbuf.h | 21 ++++----
tools/perf/util/svghelper.h | 51 ++++++++++----------
tools/perf/util/symbol-elf.c | 12 ++---
tools/perf/util/symbol.h | 4 +-
tools/perf/util/usage.c | 8 +---
tools/perf/util/util.h | 27 ++++-------
tools/perf/util/wrapper.c | 12 -----
tools/{perf/config => scripts}/utilities.mak | 0
79 files changed, 385 insertions(+), 557 deletions(-)
create mode 100644 tools/include/linux/stringify.h
delete mode 100644 tools/perf/util/abspath.c
rename tools/{perf/config => scripts}/utilities.mak (100%)Arnaldo Carvalho de Melo
maintainerPATCH 1/23 perf test: Remove 'core_id' check in topo test
From: Sukadev Bhattiprolu <[email protected]>
The topology test case of 'perf test' seems to be broken on my x86 system - due to the comparison of a "core-id" with # of CPUs online.
There are 8 online CPUs:
$ cat /sys/devices/system/cpu/online 0-7
but core-ids are not sequential and some core-ids exceed the number of online CPUs.
$ cat /sys/devices/system/cpu/cpu?/topology/core_id 0 1 9 10 0 1 9 10
Looks like we can safely remove the check. Output before:
$ perf --version perf version 4.4.rc1.g34258a
$ perf test -v topo 36: Test topology in session : --- start --- test child forked, pid 5906 templ file: /tmp/perf-test-vCwWG3 core_id number is too big.You may need to upgrade the perf tool. test child interrupted ---- end ---- Test topology in session: FAILED!
and after:
$ perf test -v topo 36: Test topology in session : --- start --- test child forked, pid 6532 templ file: /tmp/perf-test-y10wFJ CPU 0, core 0, socket 0 CPU 1, core 1, socket 0 CPU 2, core 9, socket 0 CPU 3, core 10, socket 0 CPU 4, core 0, socket 1 CPU 5, core 1, socket 1 CPU 6, core 9, socket 1 CPU 7, core 10, socket 1 test child finished with 0 ---- end ---- Test topology in session: Ok
--- tools/perf/util/header.c | 5 ----- 1 file changed, 5 deletions(-)
tools/perf/util/header.c +0 -5
@@ -1872,11 +1872,6 @@ static int process_cpu_topology(struct perf_file_section *section,if (ph->needs_swap) nr =bswap_32 (nr); -if (nr > (u32 )cpu_nr) { -pr_debug ("core_id number is too big." -"You may need to upgrade the perf tool.\n" ); - goto free_cpu; - } ph->env.cpu[i].core_id = nr; ret =readn (fd, &nr,sizeof (nr));
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 2/23 tools: Move utilities.mak from perf to tools/scripts/
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
As it is used by several other tools, better move it outside tools/perf.
--- tools/lib/api/Makefile | 2 +- tools/lib/subcmd/Makefile | 2 +- tools/perf/Documentation/Makefile | 2 +- tools/perf/Makefile.perf | 2 +- tools/perf/config/Makefile | 2 +- tools/perf/config/utilities.mak | 179 -------------------------------------- tools/scripts/utilities.mak | 179 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 184 insertions(+), 184 deletions(-) delete mode 100644 tools/perf/config/utilities.mak create mode 100644 tools/scripts/utilities.mak
tools/lib/api/Makefile +1 -1
@@ -1,5 +1,5 @@ include ../../scripts/Makefile.include -include ../../perf/config/utilities.mak # QUIET_CLEAN +include ../../scripts/utilities.mak # QUIET_CLEAN ifeq ($(srctree),) srctree := $(patsubst %/,%,$(dir $(shell pwd)))
tools/lib/subcmd/Makefile +1 -1
@@ -1,5 +1,5 @@ include ../../scripts/Makefile.include -include ../../perf/config/utilities.mak # QUIET_CLEAN +include ../../scripts/utilities.mak # QUIET_CLEAN ifeq ($(srctree),) srctree := $(patsubst %/,%,$(dir $(shell pwd)))
tools/perf/Documentation/Makefile +1 -1
@@ -1,5 +1,5 @@ include ../../scripts/Makefile.include -include ../config/utilities.mak +include ../../scripts/utilities.mak MAN1_TXT= \ $(filter-out $(addsuffix .txt, $(ARTICLES) $(SP_ARTICLES)), \
tools/perf/Makefile.perf +1 -1
@@ -3,7 +3,7 @@ include ../scripts/Makefile.include # The default target of this Makefile is... all: -include config/utilities.mak +include ../scripts/utilities.mak # Define V to have a more verbose compile. #
tools/perf/config/Makefile +1 -1
@@ -109,7 +109,7 @@ ifdef PERF_HAVE_ARCH_REGS_QUERY_REGISTER_OFFSET CFLAGS += -DHAVE_ARCH_REGS_QUERY_REGISTER_OFFSET endif -include $(src-perf)/config/utilities.mak +include $(srctree)/tools/scripts/utilities.mak ifeq ($(call get-executable,$(FLEX)),) dummy := $(error Error: $(FLEX) is missing on this system, please install it)
tools/perf/config/utilities.mak deleted +0 -179
179 lines not on this page · raw message
tools/scripts/utilities.mak new file +179 -0
179 lines not on this page · raw message
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 3/23 perf symbols: Record text offset in dso to calculate objdump address
In reply to Arnaldo Carvalho de MeloFrom: Wang Nan <[email protected]>
Store DSO's .text offset into DSO, used for VDSOs and will also be used for other needs, like handling kernel modules.
--- tools/perf/util/dso.h | 1 + tools/perf/util/symbol-elf.c | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-)
tools/perf/util/dso.h +1 -0
@@ -162,6 +162,7 @@ struct dso {u8 loaded;u8 rel;u8 build_id[BUILD_ID_SIZE ]; +u64 text_offset;const char *short_name;const char *long_name;u16 long_name_len;
tools/perf/util/symbol-elf.c +6 -6
@@ -793,6 +793,7 @@ int dso__load_sym(struct dso *dso, struct map *map,uint32_t idx;GElf_Ehdr ehdr;GElf_Shdr shdr; +GElf_Shdr tshdr;Elf_Data *syms, *opddata =NULL ;GElf_Sym sym;Elf_Scn *sec, *sec_strndx;
@@ -832,6 +833,9 @@ int dso__load_sym(struct dso *dso, struct map *map, sec = syms_ss->symtab; shdr = syms_ss->symshdr; +if (elf_section_by_name (elf, &ehdr, &tshdr,".text" ,NULL )) + dso->text_offset = tshdr.sh_addr - tshdr.sh_offset; +if (runtime_ss->opdsec) opddata =elf_rawdata (runtime_ss->opdsec,NULL );
@@ -880,12 +884,8 @@ int dso__load_sym(struct dso *dso, struct map *map,* Handle any relocation of vdso necessary because older kernels * attempted to prelink vdso to its virtual address. */ -if (dso__is_vdso (dso)) { -GElf_Shdr tshdr; - -if (elf_section_by_name (elf, &ehdr, &tshdr,".text" ,NULL )) - map->reloc = map->start - tshdr.sh_addr + tshdr.sh_offset; - } +if (dso__is_vdso (dso)) + map->reloc = map->start - dso->text_offset; dso->adjust_symbols = runtime_ss->adjust_symbols ||ref_reloc (kmap);/*
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 4/23 perf bench numa: Fix assertion for nodes bitfield
In reply to Arnaldo Carvalho de MeloFrom: Jakub Jelen <[email protected]>
Comparing bits and bytes in numa benchmark assertion
I hit the issue on two socket Power8 machine presenting its numa nodes as 0,1,16,17 (according to numactl). Therefore I got error (and hang of parent process):
perf: bench/numa.c:296: bind_to_memnode: Assertion `!(g->p.nr_nodes > (int)sizeof(nodemask))' failed.
This is obviously false positive. We can fit all the 18 nodes into bitfield of 8 bytes (long on 64b architecture).
--- tools/perf/bench/numa.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
tools/perf/bench/numa.c +1 -1
@@ -293,7 +293,7 @@ static void bind_to_memnode(int node)if (node ==-1 )return ; -BUG_ON (g->p.nr_nodes > (int )sizeof (nodemask)); +BUG_ON (g->p.nr_nodes > (int )sizeof (nodemask)*8 ); nodemask =1L << node; ret =set_mempolicy (MPOL_BIND , &nodemask,sizeof (nodemask)*8 );
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 5/23 perf list: Fix documentation of :ppp
In reply to Arnaldo Carvalho de MeloFrom: Andi Kleen <[email protected]>
Correctly document what is implemented for :ppp on Intel CPUs in recent kernels.
--- tools/perf/Documentation/perf-list.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
tools/perf/Documentation/perf-list.txt +4 -2
@@ -40,10 +40,12 @@ address should be. The 'p' modifier can be specified multiple times: 0 - SAMPLE_IP can have arbitrary skid 1 - SAMPLE_IP must have constant skid 2 - SAMPLE_IP requested to have 0 skid - 3 - SAMPLE_IP must have 0 skid + 3 - SAMPLE_IP must have 0 skid, or uses randomization to avoid + sample shadowing effects. For Intel systems precise event sampling is implemented with PEBS -which supports up to precise-level 2. +which supports up to precise-level 2, and precise level 3 for +some special cases On AMD systems it is implemented using IBS (up to precise-level 2). The precise modifier works with event types 0x76 (cpu-cycles, CPU
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 6/23 perf tools: Remove misplaced __maybe_unused
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
All over the tree.
--- tools/perf/bench/bench.h | 2 +- tools/perf/builtin-inject.c | 3 +-- tools/perf/builtin-script.c | 2 +- tools/perf/ui/gtk/hists.c | 2 +- tools/perf/util/annotate.h | 2 +- tools/perf/util/auxtrace.h | 2 +- tools/perf/util/data-convert-bt.c | 2 +- tools/perf/util/dso.h | 2 +- tools/perf/util/header.h | 2 +- tools/perf/util/hist.c | 2 +- tools/perf/util/hist.h | 3 +-- tools/perf/util/intel-bts.c | 2 +- tools/perf/util/machine.h | 2 +- tools/perf/util/sort.c | 2 +- tools/perf/util/stat-shadow.c | 18 ++++++++---------- 15 files changed, 22 insertions(+), 26 deletions(-)
tools/perf/bench/bench.h +1 -1
@@ -29,7 +29,7 @@ extern int bench_numa(int argc, const char **argv, const char *prefix);extern int bench_sched_messaging (int argc,const char **argv,const char *prefix);extern int bench_sched_pipe (int argc,const char **argv,const char *prefix);extern int bench_mem_memcpy (int argc,const char **argv, -const char *prefix__maybe_unused ); +const char *prefix);extern int bench_mem_memset (int argc,const char **argv,const char *prefix);extern int bench_futex_hash (int argc,const char **argv,const char *prefix);extern int bench_futex_wake (int argc,const char **argv,const char *prefix);
tools/perf/builtin-inject.c +1 -2
@@ -131,8 +131,7 @@ static int copy_bytes(struct perf_inject *inject, int fd, off_t size)static s64 perf_event__repipe_auxtrace (struct perf_tool *tool,union perf_event *event, -struct perf_session *session -__maybe_unused ) +struct perf_session *session) { struct perf_inject *inject = container_of(tool, struct perf_inject, tool);
tools/perf/builtin-script.c +1 -1
@@ -498,7 +498,7 @@ static void print_sample_brstack(union perf_event *event __maybe_unused, } } -static void print_sample_brstacksym (union perf_event *event__maybe_unused , +static void print_sample_brstacksym (union perf_event *event,struct perf_sample *sample,struct thread *thread__maybe_unused ,struct perf_event_attr *attr__maybe_unused )
tools/perf/ui/gtk/hists.c +1 -1
@@ -55,7 +55,7 @@ static u64 he_get_acc_##_field(struct hist_entry *he) \return he->stat_acc->_field; \ } \ \ -static int perf_gtk__hpp_color_##_type(struct perf_hpp_fmt *fmt __maybe_unused, \ +static int perf_gtk__hpp_color_##_type(struct perf_hpp_fmt *fmt, \struct perf_hpp *hpp, \struct hist_entry *he) \ { \
tools/perf/util/annotate.h +1 -1
@@ -158,7 +158,7 @@ int symbol__annotate(struct symbol *sym, struct map *map, size_t privsize);int hist_entry__annotate (struct hist_entry *he,size_t privsize); -int symbol__annotate_init (struct map *map__maybe_unused ,struct symbol *sym); +int symbol__annotate_init (struct map *map,struct symbol *sym);int symbol__annotate_printf (struct symbol *sym,struct map *map,struct perf_evsel *evsel,bool full_paths,int min_pcnt,int max_lines,int context);
tools/perf/util/auxtrace.h +1 -1
@@ -517,7 +517,7 @@ static inline void auxtrace__free(struct perf_session *session)static inline struct auxtrace_record *auxtrace_record__init (struct perf_evlist *evlist__maybe_unused , -int *err__maybe_unused ) +int *err) { *err =0 ;return NULL ;
tools/perf/util/data-convert-bt.c +1 -1
@@ -632,7 +632,7 @@ static bool is_flush_needed(struct ctf_stream *cs) }static int process_sample_event (struct perf_tool *tool, -union perf_event *_event__maybe_unused , +union perf_event *_event,struct perf_sample *sample,struct perf_evsel *evsel,struct machine *machine__maybe_unused )
tools/perf/util/dso.h +1 -1
@@ -302,7 +302,7 @@ int __kmod_path__parse(struct kmod_path *m, const char *path,* TODO */ int dso__data_get_fd (struct dso *dso,struct machine *machine); -void dso__data_put_fd (struct dso *dso__maybe_unused ); +void dso__data_put_fd (struct dso *dso);void dso__data_close (struct dso *dso);off_t dso__data_size (struct dso *dso,struct machine *machine);
tools/perf/util/header.h +1 -1
@@ -121,7 +121,7 @@ int perf_event__synthesize_event_update_cpus(struct perf_tool *tool, perf_event__handler_t process);int perf_event__process_attr (struct perf_tool *tool,union perf_event *event,struct perf_evlist **pevlist); -int perf_event__process_event_update (struct perf_tool *tool__maybe_unused , +int perf_event__process_event_update (struct perf_tool *tool,union perf_event *event,struct perf_evlist **pevlist);size_t perf_event__fprintf_event_update (union perf_event *event,FILE *fp);
tools/perf/util/hist.c +1 -1
@@ -670,7 +670,7 @@ iter_prepare_branch_entry(struct hist_entry_iter *iter, struct addr_location *al }static int -iter_add_single_branch_entry (struct hist_entry_iter *iter__maybe_unused , +iter_add_single_branch_entry (struct hist_entry_iter *iter,struct addr_location *al__maybe_unused ) {/* to avoid calling callback function */
tools/perf/util/hist.h +1 -2
@@ -433,8 +433,7 @@ void hist__account_cycles(struct branch_stack *bs, struct addr_location *al, struct perf_sample *sample, bool nonany_branch_mode);struct option ; -int parse_filter_percentage (const struct option *opt__maybe_unused , -const char *arg,int unset__maybe_unused ); +int parse_filter_percentage (const struct option *opt,const char *arg,int unset);int perf_hist_config (const char *var,const char *value);void perf_hpp_list__init (struct perf_hpp_list *list);
tools/perf/util/intel-bts.c +1 -1
@@ -678,7 +678,7 @@ static int intel_bts_process_auxtrace_event(struct perf_session *session,return 0 ; } -static int intel_bts_flush (struct perf_session *session__maybe_unused , +static int intel_bts_flush (struct perf_session *session,struct perf_tool *tool__maybe_unused ) { struct intel_bts *bts = container_of(session->auxtrace, struct intel_bts,
tools/perf/util/machine.h +1 -1
@@ -94,7 +94,7 @@ int machine__process_aux_event(struct machine *machine, union perf_event *event);int machine__process_itrace_start_event (struct machine *machine,union perf_event *event); -int machine__process_switch_event (struct machine *machine__maybe_unused , +int machine__process_switch_event (struct machine *machine,union perf_event *event);int machine__process_mmap_event (struct machine *machine,union perf_event *event,struct perf_sample *sample);
tools/perf/util/sort.c +1 -1
@@ -2225,7 +2225,7 @@ int hpp_dimension__add_output(unsigned col) }static int sort_dimension__add (struct perf_hpp_list *list,const char *tok, -struct perf_evlist *evlist__maybe_unused , +struct perf_evlist *evlist,int level) {unsigned int i;
tools/perf/util/stat-shadow.c +8 -10
@@ -152,8 +152,7 @@ static const char *get_ratio_color(enum grc_type type, double ratio) }static void print_stalled_cycles_frontend (int cpu, -struct perf_evsel *evsel -__maybe_unused ,double avg, +struct perf_evsel *evsel,double avg,struct perf_stat_output_ctx *out) {double total, ratio =0.0 ;
@@ -175,8 +174,7 @@ static void print_stalled_cycles_frontend(int cpu, }static void print_stalled_cycles_backend (int cpu, -struct perf_evsel *evsel -__maybe_unused ,double avg, +struct perf_evsel *evsel,double avg,struct perf_stat_output_ctx *out) {double total, ratio =0.0 ;
@@ -194,7 +192,7 @@ static void print_stalled_cycles_backend(int cpu, }static void print_branch_misses (int cpu, -struct perf_evsel *evsel__maybe_unused , +struct perf_evsel *evsel,double avg,struct perf_stat_output_ctx *out) {
@@ -213,7 +211,7 @@ static void print_branch_misses(int cpu, }static void print_l1_dcache_misses (int cpu, -struct perf_evsel *evsel__maybe_unused , +struct perf_evsel *evsel,double avg,struct perf_stat_output_ctx *out) {
@@ -232,7 +230,7 @@ static void print_l1_dcache_misses(int cpu, }static void print_l1_icache_misses (int cpu, -struct perf_evsel *evsel__maybe_unused , +struct perf_evsel *evsel,double avg,struct perf_stat_output_ctx *out) {
@@ -250,7 +248,7 @@ static void print_l1_icache_misses(int cpu, }static void print_dtlb_cache_misses (int cpu, -struct perf_evsel *evsel__maybe_unused , +struct perf_evsel *evsel,double avg,struct perf_stat_output_ctx *out) {
@@ -268,7 +266,7 @@ static void print_dtlb_cache_misses(int cpu, }static void print_itlb_cache_misses (int cpu, -struct perf_evsel *evsel__maybe_unused , +struct perf_evsel *evsel,double avg,struct perf_stat_output_ctx *out) {
@@ -286,7 +284,7 @@ static void print_itlb_cache_misses(int cpu, }static void print_ll_cache_misses (int cpu, -struct perf_evsel *evsel__maybe_unused , +struct perf_evsel *evsel,double avg,struct perf_stat_output_ctx *out) {
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 7/23 perf tests: Forward the perf_sample in the dwarf unwind test
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
It _will_ be used, no sense in receiving it and nor fowarding it along.
--- tools/perf/tests/dwarf-unwind.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
tools/perf/tests/dwarf-unwind.c +2 -2
@@ -20,10 +20,10 @@static int mmap_handler (struct perf_tool *tool__maybe_unused ,union perf_event *event, -struct perf_sample *sample__maybe_unused , +struct perf_sample *sample,struct machine *machine) { -return machine__process_mmap2_event (machine, event,NULL ); +return machine__process_mmap2_event (machine, event, sample); }static int init_live_machine (struct machine *machine)
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 8/23 perf tools: Add cpumode to struct perf_sample
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To avoid parsing event->header.misc in many locations.
This will also allow setting perf.sample.{ip,cpumode} in a single place, from tracepoint fields, as needed by 'perf kvm' with PPC guests, where the guest hardware counters is not available at the host.
--- tools/perf/builtin-inject.c | 5 +---- tools/perf/builtin-script.c | 7 +++---- tools/perf/builtin-top.c | 5 +---- tools/perf/builtin-trace.c | 9 ++++----- tools/perf/tests/code-reading.c | 5 +---- tools/perf/tests/hists_common.c | 6 ++++-- tools/perf/tests/hists_cumulate.c | 1 + tools/perf/tests/hists_filter.c | 1 + tools/perf/tests/hists_link.c | 1 + tools/perf/tests/hists_output.c | 1 + tools/perf/util/build-id.c | 3 +-- tools/perf/util/event.c | 15 ++++++--------- tools/perf/util/event.h | 1 + tools/perf/util/evsel.c | 1 + tools/perf/util/machine.c | 14 ++++++-------- tools/perf/util/session.c | 5 ++--- 16 files changed, 35 insertions(+), 45 deletions(-)
tools/perf/builtin-inject.c +1 -4
@@ -416,9 +416,6 @@ static int perf_event__inject_buildid(struct perf_tool *tool, {struct addr_location al;struct thread *thread; -u8 cpumode; - - cpumode = event->header.misc &PERF_RECORD_MISC_CPUMODE_MASK ; thread =machine__findnew_thread (machine, sample->pid, sample->tid);if (thread ==NULL ) {
@@ -427,7 +424,7 @@ static int perf_event__inject_buildid(struct perf_tool *tool, goto repipe; } -thread__find_addr_map (thread, cpumode,MAP__FUNCTION , sample->ip, &al); +thread__find_addr_map (thread, sample->cpumode,MAP__FUNCTION , sample->ip, &al);if (al.map !=NULL ) {if (!al.map->dso->hit) {
tools/perf/builtin-script.c +3 -4
@@ -498,14 +498,13 @@ static void print_sample_brstack(union perf_event *event __maybe_unused, } } -static void print_sample_brstacksym (union perf_event *event, +static void print_sample_brstacksym (union perf_event *event__maybe_unused ,struct perf_sample *sample,struct thread *thread__maybe_unused ,struct perf_event_attr *attr__maybe_unused ) {struct branch_stack *br = sample->branch_stack;struct addr_location alf, alt; -u8 cpumode = event->header.misc &PERF_RECORD_MISC_CPUMODE_MASK ;u64 i, from, to;if (!(br && br->nr))
@@ -518,11 +517,11 @@ static void print_sample_brstacksym(union perf_event *event, from = br->entries[i].from; to = br->entries[i].to; -thread__find_addr_map (thread, cpumode,MAP__FUNCTION , from, &alf); +thread__find_addr_map (thread, sample->cpumode,MAP__FUNCTION , from, &alf);if (alf.map) alf.sym =map__find_symbol (alf.map, alf.addr,NULL ); -thread__find_addr_map (thread, cpumode,MAP__FUNCTION , to, &alt); +thread__find_addr_map (thread, sample->cpumode,MAP__FUNCTION , to, &alt);if (alt.map) alt.sym =map__find_symbol (alt.map, alt.addr,NULL );
tools/perf/builtin-top.c +1 -4
@@ -809,7 +809,6 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx)struct perf_session *session = top->session;union perf_event *event;struct machine *machine; -u8 origin;int ret;while ((event =perf_evlist__mmap_read (top->evlist, idx)) !=NULL ) {
@@ -822,12 +821,10 @@ static void perf_top__mmap_read_idx(struct perf_top *top, int idx) evsel =perf_evlist__id2evsel (session->evlist, sample.id);assert (evsel !=NULL ); - origin = event->header.misc &PERF_RECORD_MISC_CPUMODE_MASK ; -if (event->header.type ==PERF_RECORD_SAMPLE ) ++top->samples; -switch (origin) { +switch (sample.cpumode) {case PERF_RECORD_MISC_USER : ++top->us_samples;if (top->hide_user_symbols)
tools/perf/builtin-trace.c +4 -5
@@ -2256,11 +2256,10 @@ static void print_location(FILE *f, struct perf_sample *sample,static int trace__pgfault (struct trace *trace,struct perf_evsel *evsel, -union perf_event *event, +union perf_event *event__maybe_unused ,struct perf_sample *sample) {struct thread *thread; -u8 cpumode = event->header.misc &PERF_RECORD_MISC_CPUMODE_MASK ;struct addr_location al;char map_type ='d' ;struct thread_trace *ttrace;
@@ -2279,7 +2278,7 @@ static int trace__pgfault(struct trace *trace,if (trace->summary_only) goto out; -thread__find_addr_location (thread, cpumode,MAP__FUNCTION , +thread__find_addr_location (thread, sample->cpumode,MAP__FUNCTION , sample->ip, &al);trace__fprintf_entry_head (trace, thread,0 , sample->time, trace->output);
@@ -2292,11 +2291,11 @@ static int trace__pgfault(struct trace *trace,fprintf (trace->output,"] => " ); -thread__find_addr_location (thread, cpumode,MAP__VARIABLE , +thread__find_addr_location (thread, sample->cpumode,MAP__VARIABLE , sample->addr, &al);if (!al.map) { -thread__find_addr_location (thread, cpumode, +thread__find_addr_location (thread, sample->cpumode,MAP__FUNCTION , sample->addr, &al);if (al.map)
tools/perf/tests/code-reading.c +1 -4
@@ -293,7 +293,6 @@ static int process_sample_event(struct machine *machine, {struct perf_sample sample;struct thread *thread; -u8 cpumode;int ret;if (perf_evlist__parse_sample (evlist, event, &sample)) {
@@ -307,9 +306,7 @@ static int process_sample_event(struct machine *machine,return -1 ; } - cpumode = event->header.misc &PERF_RECORD_MISC_CPUMODE_MASK ; - - ret =read_object_code (sample.ip,READLEN , cpumode, thread, state); + ret =read_object_code (sample.ip,READLEN , sample.cpumode, thread, state);thread__put (thread);return ret; }
tools/perf/tests/hists_common.c +4 -2
@@ -100,9 +100,11 @@ struct machine *setup_fake_machine(struct machines *machines) }for (i =0 ; i <ARRAY_SIZE (fake_mmap_info); i++) { +struct perf_sample sample = { + .cpumode =PERF_RECORD_MISC_USER , + };union perf_event fake_mmap_event = { .mmap = { - .header = { .misc =PERF_RECORD_MISC_USER , }, .pid = fake_mmap_info[i].pid, .tid = fake_mmap_info[i].pid, .start = fake_mmap_info[i].start,
@@ -114,7 +116,7 @@ struct machine *setup_fake_machine(struct machines *machines)strcpy (fake_mmap_event.mmap.filename, fake_mmap_info[i].filename); -machine__process_mmap_event (machine, &fake_mmap_event,NULL ); +machine__process_mmap_event (machine, &fake_mmap_event, &sample); }for (i =0 ; i <ARRAY_SIZE (fake_symbols); i++) {
tools/perf/tests/hists_cumulate.c +1 -0
@@ -97,6 +97,7 @@ static int add_hist_entries(struct hists *hists, struct machine *machine)else iter.ops = &hist_iter_normal; + sample.cpumode =PERF_RECORD_MISC_USER ; sample.pid = fake_samples[i].pid; sample.tid = fake_samples[i].pid; sample.ip = fake_samples[i].ip;
tools/perf/tests/hists_filter.c +1 -0
@@ -76,6 +76,7 @@ static int add_hist_entries(struct perf_evlist *evlist, hists->dso_filter =NULL ; hists->symbol_filter_str =NULL ; + sample.cpumode =PERF_RECORD_MISC_USER ; sample.pid = fake_samples[i].pid; sample.tid = fake_samples[i].pid; sample.ip = fake_samples[i].ip;
tools/perf/tests/hists_link.c +1 -0
@@ -82,6 +82,7 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine) }, }; + sample.cpumode =PERF_RECORD_MISC_USER ; sample.pid = fake_common_samples[k].pid; sample.tid = fake_common_samples[k].pid; sample.ip = fake_common_samples[k].ip;
tools/perf/tests/hists_output.c +1 -0
@@ -63,6 +63,7 @@ static int add_hist_entries(struct hists *hists, struct machine *machine) .hide_unresolved = false, }; + sample.cpumode =PERF_RECORD_MISC_USER ; sample.cpu = fake_samples[i].cpu; sample.pid = fake_samples[i].pid; sample.tid = fake_samples[i].pid;
tools/perf/util/build-id.c +1 -2
@@ -28,7 +28,6 @@ int build_id__mark_dso_hit(struct perf_tool *tool __maybe_unused, struct machine *machine) {struct addr_location al; -u8 cpumode = event->header.misc &PERF_RECORD_MISC_CPUMODE_MASK ;struct thread *thread =machine__findnew_thread (machine, sample->pid, sample->tid);
@@ -38,7 +37,7 @@ int build_id__mark_dso_hit(struct perf_tool *tool __maybe_unused,return -1 ; } -thread__find_addr_map (thread, cpumode,MAP__FUNCTION , sample->ip, &al); +thread__find_addr_map (thread, sample->cpumode,MAP__FUNCTION , sample->ip, &al);if (al.map !=NULL ) al.map->dso->hit =1 ;
tools/perf/util/event.c +6 -9
@@ -1295,12 +1295,11 @@ void thread__find_addr_location(struct thread *thread,* Callers need to drop the reference to al->thread, obtained in * machine__findnew_thread() */ -int perf_event__preprocess_sample (const union perf_event *event, +int perf_event__preprocess_sample (const union perf_event *event__maybe_unused ,struct machine *machine,struct addr_location *al,struct perf_sample *sample) { -u8 cpumode = event->header.misc &PERF_RECORD_MISC_CPUMODE_MASK ;struct thread *thread =machine__findnew_thread (machine, sample->pid, sample->tid);
@@ -1315,11 +1314,11 @@ int perf_event__preprocess_sample(const union perf_event *event,* events, but for older perf.data files there was no such thing, so do * it now. */ -if (cpumode ==PERF_RECORD_MISC_KERNEL && +if (sample->cpumode ==PERF_RECORD_MISC_KERNEL &&machine__kernel_map (machine) ==NULL )machine__create_kernel_maps (machine); -thread__find_addr_map (thread, cpumode,MAP__FUNCTION , sample->ip, al); +thread__find_addr_map (thread, sample->cpumode,MAP__FUNCTION , sample->ip, al);dump_printf (" ...... dso: %s\n" , al->map ? al->map->dso->long_name : al->level =='H' ?"[hypervisor]" :"<not found>" );
@@ -1395,16 +1394,14 @@ bool sample_addr_correlates_sym(struct perf_event_attr *attr)return false; } -void perf_event__preprocess_sample_addr (union perf_event *event, +void perf_event__preprocess_sample_addr (union perf_event *event__maybe_unused ,struct perf_sample *sample,struct thread *thread,struct addr_location *al) { -u8 cpumode = event->header.misc &PERF_RECORD_MISC_CPUMODE_MASK ; - -thread__find_addr_map (thread, cpumode,MAP__FUNCTION , sample->addr, al); +thread__find_addr_map (thread, sample->cpumode,MAP__FUNCTION , sample->addr, al);if (!al->map) -thread__find_addr_map (thread, cpumode,MAP__VARIABLE , +thread__find_addr_map (thread, sample->cpumode,MAP__VARIABLE , sample->addr, al); al->cpu = sample->cpu;
tools/perf/util/event.h +1 -0
@@ -192,6 +192,7 @@ struct perf_sample {u64 data_src;u32 flags;u16 insn_len; +u8 cpumode;void *raw_data;struct ip_callchain *callchain;struct branch_stack *branch_stack;
tools/perf/util/evsel.c +1 -0
@@ -1643,6 +1643,7 @@ int perf_evsel__parse_sample(struct perf_evsel *evsel, union perf_event *event, data->stream_id = data->id = data->time =-1ULL ; data->period = evsel->attr.sample_period; data->weight =0 ; + data->cpumode = event->header.misc &PERF_RECORD_MISC_CPUMODE_MASK ;if (event->header.type !=PERF_RECORD_SAMPLE ) {if (!evsel->attr.sample_id_all)
tools/perf/util/machine.c +6 -8
@@ -1301,9 +1301,8 @@ out_problem:int machine__process_mmap2_event (struct machine *machine,union perf_event *event, -struct perf_sample *sample__maybe_unused ) +struct perf_sample *sample) { -u8 cpumode = event->header.misc &PERF_RECORD_MISC_CPUMODE_MASK ;struct thread *thread;struct map *map;enum map_type type;
@@ -1312,8 +1311,8 @@ int machine__process_mmap2_event(struct machine *machine,if (dump_trace)perf_event__fprintf_mmap2 (event, stdout); -if (cpumode ==PERF_RECORD_MISC_GUEST_KERNEL || - cpumode ==PERF_RECORD_MISC_KERNEL ) { +if (sample->cpumode ==PERF_RECORD_MISC_GUEST_KERNEL || + sample->cpumode ==PERF_RECORD_MISC_KERNEL ) { ret =machine__process_kernel_mmap_event (machine, event);if (ret <0 ) goto out_problem;
@@ -1355,9 +1354,8 @@ out_problem: }int machine__process_mmap_event (struct machine *machine,union perf_event *event, -struct perf_sample *sample__maybe_unused ) +struct perf_sample *sample) { -u8 cpumode = event->header.misc &PERF_RECORD_MISC_CPUMODE_MASK ;struct thread *thread;struct map *map;enum map_type type;
@@ -1366,8 +1364,8 @@ int machine__process_mmap_event(struct machine *machine, union perf_event *eventif (dump_trace)perf_event__fprintf_mmap (event, stdout); -if (cpumode ==PERF_RECORD_MISC_GUEST_KERNEL || - cpumode ==PERF_RECORD_MISC_KERNEL ) { +if (sample->cpumode ==PERF_RECORD_MISC_GUEST_KERNEL || + sample->cpumode ==PERF_RECORD_MISC_KERNEL ) { ret =machine__process_kernel_mmap_event (machine, event);if (ret <0 ) goto out_problem;
tools/perf/util/session.c +2 -3
@@ -1107,12 +1107,11 @@ static struct machine *machines__find_for_cpumode(struct machines *machines,union perf_event *event, struct perf_sample *sample) { - const u8 cpumode = event->header.misc & PERF_RECORD_MISC_CPUMODE_MASK; struct machine *machine;if (perf_guest && - ((cpumode ==PERF_RECORD_MISC_GUEST_KERNEL ) || - (cpumode ==PERF_RECORD_MISC_GUEST_USER ))) { + ((sample->cpumode ==PERF_RECORD_MISC_GUEST_KERNEL ) || + (sample->cpumode ==PERF_RECORD_MISC_GUEST_USER ))) {u32 pid; if (event->header.type == PERF_RECORD_MMAP
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 9/23 perf machine: Rename perf_event__preprocess_sample to machine__resolve
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Since we only deal with fields in the passed struct perf_sample move this method to struct machine, that is where the perf_sample fields will be resolved to a struct addr_location, i.e. thread, map, symbol, etc.
--- tools/perf/builtin-annotate.c | 2 +- tools/perf/builtin-diff.c | 2 +- tools/perf/builtin-mem.c | 2 +- tools/perf/builtin-report.c | 2 +- tools/perf/builtin-script.c | 2 +- tools/perf/builtin-timechart.c | 2 +- tools/perf/builtin-top.c | 2 +- tools/perf/tests/hists_cumulate.c | 8 +------- tools/perf/tests/hists_filter.c | 8 +------- tools/perf/tests/hists_link.c | 19 +++---------------- tools/perf/tests/hists_output.c | 8 +------- tools/perf/util/event.c | 6 ++---- tools/perf/util/event.h | 6 ++---- 13 files changed, 17 insertions(+), 52 deletions(-)
tools/perf/builtin-annotate.c +1 -1
@@ -94,7 +94,7 @@ static int process_sample_event(struct perf_tool *tool,struct addr_location al;int ret =0 ; -if (perf_event__preprocess_sample (event, machine, &al, sample) <0 ) { +if (machine__resolve (machine, &al, sample) <0 ) {pr_warning ("problem processing %d event, skipping it.\n" , event->header.type);return -1 ;
tools/perf/builtin-diff.c +1 -1
@@ -330,7 +330,7 @@ static int diff__process_sample_event(struct perf_tool *tool __maybe_unused,struct hists *hists =evsel__hists (evsel);int ret =-1 ; -if (perf_event__preprocess_sample (event, machine, &al, sample) <0 ) { +if (machine__resolve (machine, &al, sample) <0 ) {pr_warning ("problem processing %d event, skipping it.\n" , event->header.type);return -1 ;
tools/perf/builtin-mem.c +1 -1
@@ -131,7 +131,7 @@ dump_raw_samples(struct perf_tool *tool,struct addr_location al;const char *fmt; -if (perf_event__preprocess_sample (event, machine, &al, sample) <0 ) { +if (machine__resolve (machine, &al, sample) <0 ) {fprintf (stderr,"problem processing %d event, skipping it.\n" , event->header.type);return -1 ;
tools/perf/builtin-report.c +1 -1
@@ -154,7 +154,7 @@ static int process_sample_event(struct perf_tool *tool, };int ret =0 ; -if (perf_event__preprocess_sample (event, machine, &al, sample) <0 ) { +if (machine__resolve (machine, &al, sample) <0 ) {pr_debug ("problem processing %d event, skipping it.\n" , event->header.type);return -1 ;
tools/perf/builtin-script.c +1 -1
@@ -904,7 +904,7 @@ static int process_sample_event(struct perf_tool *tool,return 0 ; } -if (perf_event__preprocess_sample (event, machine, &al, sample) <0 ) { +if (machine__resolve (machine, &al, sample) <0 ) {pr_err ("problem processing %d event, skipping it.\n" , event->header.type);return -1 ;
tools/perf/builtin-timechart.c +1 -1
@@ -489,7 +489,7 @@ static const char *cat_backtrace(union perf_event *event,if (!chain) goto exit; -if (perf_event__preprocess_sample (event, machine, &al, sample) <0 ) { +if (machine__resolve (machine, &al, sample) <0 ) {fprintf (stderr,"problem processing %d event, skipping it.\n" , event->header.type); goto exit;
tools/perf/builtin-top.c +1 -1
@@ -728,7 +728,7 @@ static void perf_event__process_sample(struct perf_tool *tool,if (event->header.misc &PERF_RECORD_MISC_EXACT_IP ) top->exact_samples++; -if (perf_event__preprocess_sample (event, machine, &al, sample) <0 ) +if (machine__resolve (machine, &al, sample) <0 )return ; if (!top->kptr_restrict_warned &&
tools/perf/tests/hists_cumulate.c +1 -7
@@ -81,11 +81,6 @@ static int add_hist_entries(struct hists *hists, struct machine *machine)size_t i;for (i =0 ; i <ARRAY_SIZE (fake_samples); i++) { -const union perf_event event = { - .header = { - .misc =PERF_RECORD_MISC_USER , - }, - };struct hist_entry_iter iter = { .evsel = evsel, .sample = &sample,
@@ -103,8 +98,7 @@ static int add_hist_entries(struct hists *hists, struct machine *machine) sample.ip = fake_samples[i].ip; sample.callchain = (struct ip_callchain *)fake_callchains[i]; -if (perf_event__preprocess_sample (&event, machine, &al, - &sample) <0 ) +if (machine__resolve (machine, &al, &sample) <0 ) goto out; if (hist_entry_iter__add(&iter, &al, PERF_MAX_STACK_DEPTH,
tools/perf/tests/hists_filter.c +1 -7
@@ -58,11 +58,6 @@ static int add_hist_entries(struct perf_evlist *evlist,*/ evlist__for_each (evlist, evsel) {for (i =0 ; i <ARRAY_SIZE (fake_samples); i++) { -const union perf_event event = { - .header = { - .misc =PERF_RECORD_MISC_USER , - }, - };struct hist_entry_iter iter = { .evsel = evsel, .sample = &sample,
@@ -81,8 +76,7 @@ static int add_hist_entries(struct perf_evlist *evlist, sample.tid = fake_samples[i].pid; sample.ip = fake_samples[i].ip; -if (perf_event__preprocess_sample (&event, machine, &al, - &sample) <0 ) +if (machine__resolve (machine, &al, &sample) <0 ) goto out; al.socket = fake_samples[i].socket;
tools/perf/tests/hists_link.c +3 -16
@@ -76,18 +76,12 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine)struct hists *hists =evsel__hists (evsel);for (k =0 ; k <ARRAY_SIZE (fake_common_samples); k++) { -const union perf_event event = { - .header = { - .misc =PERF_RECORD_MISC_USER , - }, - }; - sample.cpumode =PERF_RECORD_MISC_USER ; sample.pid = fake_common_samples[k].pid; sample.tid = fake_common_samples[k].pid; sample.ip = fake_common_samples[k].ip; -if (perf_event__preprocess_sample (&event, machine, &al, - &sample) <0 ) + +if (machine__resolve (machine, &al, &sample) <0 ) goto out; he = __hists__add_entry(hists, &al, NULL,
@@ -103,17 +97,10 @@ static int add_hist_entries(struct perf_evlist *evlist, struct machine *machine) }for (k =0 ; k <ARRAY_SIZE (fake_samples[i]); k++) { -const union perf_event event = { - .header = { - .misc =PERF_RECORD_MISC_USER , - }, - }; - sample.pid = fake_samples[i][k].pid; sample.tid = fake_samples[i][k].pid; sample.ip = fake_samples[i][k].ip; -if (perf_event__preprocess_sample (&event, machine, &al, - &sample) <0 ) +if (machine__resolve (machine, &al, &sample) <0 ) goto out; he = __hists__add_entry(hists, &al, NULL,
tools/perf/tests/hists_output.c +1 -7
@@ -51,11 +51,6 @@ static int add_hist_entries(struct hists *hists, struct machine *machine)size_t i;for (i =0 ; i <ARRAY_SIZE (fake_samples); i++) { -const union perf_event event = { - .header = { - .misc =PERF_RECORD_MISC_USER , - }, - };struct hist_entry_iter iter = { .evsel = evsel, .sample = &sample,
@@ -69,8 +64,7 @@ static int add_hist_entries(struct hists *hists, struct machine *machine) sample.tid = fake_samples[i].pid; sample.ip = fake_samples[i].ip; -if (perf_event__preprocess_sample (&event, machine, &al, - &sample) <0 ) +if (machine__resolve (machine, &al, &sample) <0 ) goto out; if (hist_entry_iter__add(&iter, &al, PERF_MAX_STACK_DEPTH,
tools/perf/util/event.c +2 -4
@@ -1295,10 +1295,8 @@ void thread__find_addr_location(struct thread *thread,* Callers need to drop the reference to al->thread, obtained in * machine__findnew_thread() */ -int perf_event__preprocess_sample (const union perf_event *event__maybe_unused , -struct machine *machine, -struct addr_location *al, -struct perf_sample *sample) +int machine__resolve (struct machine *machine,struct addr_location *al, +struct perf_sample *sample) {struct thread *thread =machine__findnew_thread (machine, sample->pid, sample->tid);
tools/perf/util/event.h +2 -4
@@ -598,10 +598,8 @@ int perf_event__process(struct perf_tool *tool,struct addr_location ; -int perf_event__preprocess_sample (const union perf_event *event, -struct machine *machine, -struct addr_location *al, -struct perf_sample *sample); +int machine__resolve (struct machine *machine,struct addr_location *al, +struct perf_sample *sample);void addr_location__put (struct addr_location *al);
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 10/23 perf thread: Rename perf_event__preprocess_sample_addr to thread__resolve
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Since none of the perf_event fields are used anymore, just the perf_sample ones, and since this resolves to (map, symbol) from data structures within struct thread, rename it to thread__resolve and make the argument ordering similar to the one in machine__resolve().
--- tools/perf/builtin-script.c | 4 ++-- tools/perf/util/db-export.c | 2 +- tools/perf/util/event.c | 6 ++---- tools/perf/util/event.h | 6 ++---- 4 files changed, 7 insertions(+), 11 deletions(-)
tools/perf/builtin-script.c +2 -2
@@ -537,7 +537,7 @@ static void print_sample_brstacksym(union perf_event *event __maybe_unused, } -static void print_sample_addr (union perf_event *event, +static void print_sample_addr (union perf_event *event__maybe_unused ,struct perf_sample *sample,struct thread *thread,struct perf_event_attr *attr)
@@ -549,7 +549,7 @@ static void print_sample_addr(union perf_event *event,if (!sample_addr_correlates_sym (attr))return ; -perf_event__preprocess_sample_addr (event, sample, thread, &al); +thread__resolve (thread, &al, sample);if (PRINT_FIELD (SYM )) {printf (" " );
tools/perf/util/db-export.c +1 -1
@@ -333,7 +333,7 @@ int db_export__sample(struct db_export *dbe, union perf_event *event, sample_addr_correlates_sym(&evsel->attr)) {struct addr_location addr_al; -perf_event__preprocess_sample_addr (event, sample, thread, &addr_al); +thread__resolve (thread, &addr_al, sample); err =db_ids_from_al (dbe, &addr_al, &es.addr_dso_db_id, &es.addr_sym_db_id, &es.addr_offset);if (err)
tools/perf/util/event.c +2 -4
@@ -1392,10 +1392,8 @@ bool sample_addr_correlates_sym(struct perf_event_attr *attr)return false; } -void perf_event__preprocess_sample_addr (union perf_event *event__maybe_unused , -struct perf_sample *sample, -struct thread *thread, -struct addr_location *al) +void thread__resolve (struct thread *thread,struct addr_location *al, +struct perf_sample *sample) {thread__find_addr_map (thread, sample->cpumode,MAP__FUNCTION , sample->addr, al);if (!al->map)
tools/perf/util/event.h +2 -4
@@ -607,10 +607,8 @@ struct thread;bool is_bts_event (struct perf_event_attr *attr);bool sample_addr_correlates_sym (struct perf_event_attr *attr); -void perf_event__preprocess_sample_addr (union perf_event *event, -struct perf_sample *sample, -struct thread *thread, -struct addr_location *al); +void thread__resolve (struct thread *thread,struct addr_location *al, +struct perf_sample *sample);const char *perf_event__name (unsigned int id);
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 11/23 perf script: Remove lots of unused arguments
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/builtin-script.c | 37 ++++++++++++++----------------------- 1 file changed, 14 insertions(+), 23 deletions(-)
tools/perf/builtin-script.c +14 -23
@@ -405,9 +405,7 @@ out:return 0 ; } -static void print_sample_iregs (union perf_event *event__maybe_unused , -struct perf_sample *sample, -struct thread *thread__maybe_unused , +static void print_sample_iregs (struct perf_sample *sample,struct perf_event_attr *attr) {struct regs_dump *regs = &sample->intr_regs;
@@ -476,10 +474,7 @@ mispred_str(struct branch_entry *br)return br->flags.predicted ?'P' :'M' ; } -static void print_sample_brstack (union perf_event *event__maybe_unused , -struct perf_sample *sample, -struct thread *thread__maybe_unused , -struct perf_event_attr *attr__maybe_unused ) +static void print_sample_brstack (struct perf_sample *sample) {struct branch_stack *br = sample->branch_stack;u64 i;
@@ -498,10 +493,8 @@ static void print_sample_brstack(union perf_event *event __maybe_unused, } } -static void print_sample_brstacksym (union perf_event *event__maybe_unused , -struct perf_sample *sample, -struct thread *thread__maybe_unused , -struct perf_event_attr *attr__maybe_unused ) +static void print_sample_brstacksym (struct perf_sample *sample, +struct thread *thread) {struct branch_stack *br = sample->branch_stack;struct addr_location alf, alt;
@@ -537,8 +530,7 @@ static void print_sample_brstacksym(union perf_event *event __maybe_unused, } -static void print_sample_addr (union perf_event *event__maybe_unused , -struct perf_sample *sample, +static void print_sample_addr (struct perf_sample *sample,struct thread *thread,struct perf_event_attr *attr) {
@@ -566,8 +558,7 @@ static void print_sample_addr(union perf_event *event __maybe_unused, } } -static void print_sample_bts (union perf_event *event, -struct perf_sample *sample, +static void print_sample_bts (struct perf_sample *sample,struct perf_evsel *evsel,struct thread *thread,struct addr_location *al)
@@ -597,7 +588,7 @@ static void print_sample_bts(union perf_event *event, ((evsel->attr.sample_type & PERF_SAMPLE_ADDR) && !output[attr->type].user_set)) {printf (" => " ); -print_sample_addr (event, sample, thread, attr); +print_sample_addr (sample, thread, attr); }if (print_srcline_last)
@@ -746,7 +737,7 @@ static size_t data_src__printf(u64 data_src)return printf ("%-*s" , maxlen, out); } -static void process_event (struct perf_script *script,union perf_event *event, +static void process_event (struct perf_script *script,struct perf_sample *sample,struct perf_evsel *evsel,struct addr_location *al) {
@@ -775,7 +766,7 @@ static void process_event(struct perf_script *script, union perf_event *event,print_sample_flags (sample->flags);if (is_bts_event (attr)) { -print_sample_bts (event, sample, evsel, thread, al); +print_sample_bts (sample, evsel, thread, al);return ; }
@@ -783,7 +774,7 @@ static void process_event(struct perf_script *script, union perf_event *event,event_format__print (evsel->tp_format, sample->cpu, sample->raw_data, sample->raw_size);if (PRINT_FIELD (ADDR )) -print_sample_addr (event, sample, thread, attr); +print_sample_addr (sample, thread, attr);if (PRINT_FIELD (DATA_SRC ))data_src__printf (sample->data_src);
@@ -803,12 +794,12 @@ static void process_event(struct perf_script *script, union perf_event *event, }if (PRINT_FIELD (IREGS )) -print_sample_iregs (event, sample, thread, attr); +print_sample_iregs (sample, attr);if (PRINT_FIELD (BRSTACK )) -print_sample_brstack (event, sample, thread, attr); +print_sample_brstack (sample);else if (PRINT_FIELD (BRSTACKSYM )) -print_sample_brstacksym (event, sample, thread, attr); +print_sample_brstacksym (sample, thread);if (perf_evsel__is_bpf_output (evsel) &&PRINT_FIELD (BPF_OUTPUT ))print_sample_bpf_output (sample);
@@ -919,7 +910,7 @@ static int process_sample_event(struct perf_tool *tool,if (scripting_ops) scripting_ops->process_event (event, sample, evsel, &al);else -process_event (scr, event, sample, evsel, &al); +process_event (scr, sample, evsel, &al); out_put:addr_location__put (&al);
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 12/23 perf tools: Remove unused DIE_IF macro
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/util.h | 7 ------- 1 file changed, 7 deletions(-)
tools/perf/util/util.h +0 -7
@@ -140,13 +140,6 @@ extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2)))#include "../../../include/linux/stringify.h" -#define DIE_IF (cnd) \ - do { if (cnd) \ - die(" at (" __FILE__ ":" __stringify(__LINE__) "): " \ - __stringify(cnd) "\n"); \ - } while (0) - -extern void set_die_routine (void (*routine)(const char *err,va_list params)NORETURN );extern void set_warning_routine (void (*routine)(const char *err,va_list params));
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 13/23 perf tools: Simplify die() mechanism
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
This should die altogether, but for now lets remove a bit of this stuff, as it is not used at all.
--- tools/perf/util/usage.c | 8 +------- tools/perf/util/util.h | 1 - 2 files changed, 1 insertion(+), 8 deletions(-)
tools/perf/util/usage.c +1 -7
@@ -41,15 +41,9 @@ static void warn_builtin(const char *warn, va_list params)/* If we are in a dlopen()ed .so write to a global variable would segfault * (ugh), so keep things static. */ static void (*usage_routine)(const char *err)NORETURN = usage_builtin; -static void (*die_routine)(const char *err,va_list params)NORETURN = die_builtin;static void (*error_routine)(const char *err,va_list params) = error_builtin;static void (*warn_routine)(const char *err,va_list params) = warn_builtin; -void set_die_routine (void (*routine)(const char *err,va_list params)NORETURN ) -{ - die_routine = routine; -} -void set_warning_routine (void (*routine)(const char *err,va_list params)) { warn_routine = routine;
@@ -65,7 +59,7 @@ void die(const char *err, ...)va_list params;va_start (params, err); -die_routine (err, params); +die_builtin (err, params);va_end (params); }
tools/perf/util/util.h +0 -1
@@ -140,7 +140,6 @@ extern void warning(const char *err, ...) __attribute__((format (printf, 1, 2)))#include "../../../include/linux/stringify.h" -extern void set_die_routine (void (*routine)(const char *err,va_list params)NORETURN );extern void set_warning_routine (void (*routine)(const char *err,va_list params));extern int prefixcmp (const char *str,const char *prefix);
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 14/23 perf tools: Remove needless 'extern' from function prototypes
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/bench/bench.h | 22 ++++++------ tools/perf/bench/mem-memcpy-arch.h | 2 +- tools/perf/bench/mem-memset-arch.h | 2 +- tools/perf/builtin.h | 64 ++++++++++++++++----------------- tools/perf/util/cache.h | 22 ++++++------ tools/perf/util/callchain.h | 4 +-- tools/perf/util/cgroup.h | 4 +-- tools/perf/util/cloexec.h | 2 +- tools/perf/util/dwarf-aux.h | 72 ++++++++++++++++++-------------------- tools/perf/util/genelf.h | 8 ++--- tools/perf/util/jit.h | 12 +++---- tools/perf/util/llvm-utils.h | 7 ++-- tools/perf/util/parse-events.h | 21 ++++++----- tools/perf/util/probe-event.h | 57 ++++++++++++++---------------- tools/perf/util/probe-finder.h | 24 ++++++------- tools/perf/util/quote.h | 2 +- tools/perf/util/strbuf.h | 16 ++++----- tools/perf/util/svghelper.h | 51 +++++++++++++-------------- tools/perf/util/symbol.h | 4 +-- tools/perf/util/util.h | 18 +++++----- 20 files changed, 197 insertions(+), 217 deletions(-)
tools/perf/bench/bench.h +10 -12
@@ -25,19 +25,17 @@# endif #endif -extern int bench_numa (int argc,const char **argv,const char *prefix); -extern int bench_sched_messaging (int argc,const char **argv,const char *prefix); -extern int bench_sched_pipe (int argc,const char **argv,const char *prefix); -extern int bench_mem_memcpy (int argc,const char **argv, -const char *prefix); -extern int bench_mem_memset (int argc,const char **argv,const char *prefix); -extern int bench_futex_hash (int argc,const char **argv,const char *prefix); -extern int bench_futex_wake (int argc,const char **argv,const char *prefix); -extern int bench_futex_wake_parallel (int argc,const char **argv, -const char *prefix); -extern int bench_futex_requeue (int argc,const char **argv,const char *prefix); +int bench_numa (int argc,const char **argv,const char *prefix); +int bench_sched_messaging (int argc,const char **argv,const char *prefix); +int bench_sched_pipe (int argc,const char **argv,const char *prefix); +int bench_mem_memcpy (int argc,const char **argv,const char *prefix); +int bench_mem_memset (int argc,const char **argv,const char *prefix); +int bench_futex_hash (int argc,const char **argv,const char *prefix); +int bench_futex_wake (int argc,const char **argv,const char *prefix); +int bench_futex_wake_parallel (int argc,const char **argv,const char *prefix); +int bench_futex_requeue (int argc,const char **argv,const char *prefix);/* pi futexes */ -extern int bench_futex_lock_pi (int argc,const char **argv,const char *prefix); +int bench_futex_lock_pi (int argc,const char **argv,const char *prefix);#define BENCH_FORMAT_DEFAULT_STR "default"#define BENCH_FORMAT_DEFAULT 0
tools/perf/bench/mem-memcpy-arch.h +1 -1
@@ -2,7 +2,7 @@#ifdef HAVE_ARCH_X86_64_SUPPORT #define MEMCPY_FN (fn, name, desc) \ - extern void *fn(void *, const void *, size_t); + void *fn(void *, const void *, size_t);#include "mem-memcpy-x86-64-asm-def.h"
tools/perf/bench/mem-memset-arch.h +1 -1
@@ -2,7 +2,7 @@#ifdef HAVE_ARCH_X86_64_SUPPORT #define MEMSET_FN (fn, name, desc) \ - extern void *fn(void *, int, size_t); + void *fn(void *, int, size_t);#include "mem-memset-x86-64-asm-def.h"
tools/perf/builtin.h +32 -32
70 lines not on this page · raw message
tools/perf/util/cache.h +11 -11
@@ -26,14 +26,14 @@extern const char *config_exclusive_filename;typedef int (*config_fn_t )(const char *,const char *,void *); -extern int perf_default_config (const char *,const char *,void *); -extern int perf_config (config_fn_t fn,void *); -extern int perf_config_int (const char *,const char *); -extern u64 perf_config_u64 (const char *,const char *); -extern int perf_config_bool (const char *,const char *); -extern int config_error_nonbool (const char *); -extern const char *perf_config_dirname (const char *,const char *); -extern const char *perf_etc_perfconfig (void ); +int perf_default_config (const char *,const char *,void *); +int perf_config (config_fn_t fn,void *); +int perf_config_int (const char *,const char *); +u64 perf_config_u64 (const char *,const char *); +int perf_config_bool (const char *,const char *); +int config_error_nonbool (const char *); +const char *perf_config_dirname (const char *,const char *); +const char *perf_etc_perfconfig (void );char *alias_lookup (const char *alias);int split_cmdline (char *cmdline,const char ***argv);
@@ -67,10 +67,10 @@ static inline int is_absolute_path(const char *path)const char *make_nonrelative_path (const char *path);char *strip_path_suffix (const char *path,const char *suffix); -extern char *mkpath (const char *fmt, ...) __attribute__((format (printf,1 ,2 ))); -extern char *perf_path (const char *fmt, ...) __attribute__((format (printf,1 ,2 ))); +char *mkpath (const char *fmt, ...) __attribute__((format (printf,1 ,2 ))); +char *perf_path (const char *fmt, ...) __attribute__((format (printf,1 ,2 ))); -extern char *perf_pathdup (const char *fmt, ...) +char *perf_pathdup (const char *fmt, ...) __attribute__((format (printf,1 ,2 )));#endif /* __PERF_CACHE_H */
tools/perf/util/callchain.h +2 -2
@@ -220,7 +220,7 @@ int fill_callchain_info(struct addr_location *al, struct callchain_cursor_node * bool hide_unresolved);extern const char record_callchain_help[]; -extern int parse_callchain_record (const char *arg,struct callchain_param *param); +int parse_callchain_record (const char *arg,struct callchain_param *param);int parse_callchain_record_opt (const char *arg,struct callchain_param *param);int parse_callchain_report_opt (const char *arg);int parse_callchain_top_opt (const char *arg);
@@ -236,7 +236,7 @@ static inline void callchain_cursor_snapshot(struct callchain_cursor *dest, }#ifdef HAVE_SKIP_CALLCHAIN_IDX -extern int arch_skip_callchain_idx (struct thread *thread,struct ip_callchain *chain); +int arch_skip_callchain_idx (struct thread *thread,struct ip_callchain *chain);#else static inline int arch_skip_callchain_idx (struct thread *thread__maybe_unused ,struct ip_callchain *chain__maybe_unused )
tools/perf/util/cgroup.h +2 -2
@@ -13,7 +13,7 @@ struct cgroup_sel {extern int nr_cgroups;/* number of explicit cgroups defined */ -extern void close_cgroup (struct cgroup_sel *cgrp); -extern int parse_cgroups (const struct option *opt,const char *str,int unset); +void close_cgroup (struct cgroup_sel *cgrp); +int parse_cgroups (const struct option *opt,const char *str,int unset);#endif /* __CGROUP_H__ */
tools/perf/util/cloexec.h +1 -1
@@ -5,7 +5,7 @@ unsigned long perf_event_open_cloexec_flag(void);#ifdef __GLIBC_PREREQ#if !__GLIBC_PREREQ (2 ,6 ) && !defined(__UCLIBC__) -extern int sched_getcpu(void) __THROW; +int sched_getcpu(void) __THROW;#endif #endif
tools/perf/util/dwarf-aux.h +35 -37
134 lines not on this page · raw message
tools/perf/util/genelf.h +3 -5
@@ -2,12 +2,10 @@#define __GENELF_H__/* genelf.c */ -extern int jit_write_elf (int fd,uint64_t code_addr,const char *sym, -const void *code,int csize, -void *debug,int nr_debug_entries); +int jit_write_elf (int fd,uint64_t code_addr,const char *sym, +const void *code,int csize,void *debug,int nr_debug_entries);/* genelf_debug.c */ -extern int jit_add_debug_info (Elf *e,uint64_t code_addr, -void *debug,int nr_debug_entries); +int jit_add_debug_info (Elf *e,uint64_t code_addr,void *debug,int nr_debug_entries);#if defined(__arm__)#define GEN_ELF_ARCH EM_ARM
tools/perf/util/jit.h +4 -8
@@ -3,13 +3,9 @@#include <data.h> -extern int jit_process (struct perf_session *session, -struct perf_data_file *output, -struct machine *machine, -char *filename, -pid_t pid, -u64 *nbytes); - -extern int jit_inject_record (const char *filename); +int jit_process (struct perf_session *session,struct perf_data_file *output, +struct machine *machine,char *filename,pid_t pid,u64 *nbytes); + +int jit_inject_record (const char *filename);#endif /* __JIT_H__ */
tools/perf/util/llvm-utils.h +3 -4
@@ -39,11 +39,10 @@ struct llvm_param { };extern struct llvm_param llvm_param; -extern int perf_llvm_config (const char *var,const char *value); +int perf_llvm_config (const char *var,const char *value); -extern int llvm__compile_bpf (const char *path,void **p_obj_buf, -size_t *p_obj_buf_sz); +int llvm__compile_bpf (const char *path,void **p_obj_buf,size_t *p_obj_buf_sz);/* This function is for test__llvm() use only */ -extern int llvm__search_clang (void ); +int llvm__search_clang (void );#endif
tools/perf/util/parse-events.h +10 -11
@@ -22,19 +22,18 @@ struct tracepoint_path {struct tracepoint_path *next; }; -extern struct tracepoint_path *tracepoint_id_to_path (u64 config); -extern struct tracepoint_path *tracepoint_name_to_path (const char *name); -extern bool have_tracepoints (struct list_head *evlist); +struct tracepoint_path *tracepoint_id_to_path (u64 config); +struct tracepoint_path *tracepoint_name_to_path (const char *name); +bool have_tracepoints (struct list_head *evlist);const char *event_type (int type); -extern int parse_events_option (const struct option *opt,const char *str, -int unset); -extern int parse_events (struct perf_evlist *evlist,const char *str, -struct parse_events_error *error); -extern int parse_events_terms (struct list_head *terms,const char *str); -extern int parse_filter (const struct option *opt,const char *str,int unset); -extern int exclude_perf (const struct option *opt,const char *arg,int unset); +int parse_events_option (const struct option *opt,const char *str,int unset); +int parse_events (struct perf_evlist *evlist,const char *str, +struct parse_events_error *error); +int parse_events_terms (struct list_head *terms,const char *str); +int parse_filter (const struct option *opt,const char *str,int unset); +int exclude_perf (const struct option *opt,const char *arg,int unset);#define EVENTS_HELP_MAX (128*1024)
@@ -183,7 +182,7 @@ void print_symbol_events(const char *event_glob, unsigned type,void print_tracepoint_events (const char *subsys_glob,const char *event_glob,bool name_only);int print_hwcache_events (const char *event_glob,bool name_only); -extern int is_valid_tracepoint (const char *event_string); +int is_valid_tracepoint (const char *event_string);int valid_event_mount (const char *eventfs);char *parse_events_formats_error_string (char *additional_terms);
tools/perf/util/probe-event.h +26 -31
75 lines not on this page · raw message
tools/perf/util/probe-finder.h +11 -13
@@ -34,27 +34,25 @@ struct debuginfo { };/* This also tries to open distro debuginfo */ -extern struct debuginfo *debuginfo__new (const char *path); -extern void debuginfo__delete (struct debuginfo *dbg); +struct debuginfo *debuginfo__new (const char *path); +void debuginfo__delete (struct debuginfo *dbg);/* Find probe_trace_events specified by perf_probe_event from debuginfo */ -extern int debuginfo__find_trace_events (struct debuginfo *dbg, -struct perf_probe_event *pev, -struct probe_trace_event **tevs); +int debuginfo__find_trace_events (struct debuginfo *dbg, +struct perf_probe_event *pev, +struct probe_trace_event **tevs);/* Find a perf_probe_point from debuginfo */ -extern int debuginfo__find_probe_point (struct debuginfo *dbg, -unsigned long addr, -struct perf_probe_point *ppt); +int debuginfo__find_probe_point (struct debuginfo *dbg,unsigned long addr, +struct perf_probe_point *ppt);/* Find a line range */ -extern int debuginfo__find_line_range (struct debuginfo *dbg, -struct line_range *lr); +int debuginfo__find_line_range (struct debuginfo *dbg,struct line_range *lr);/* Find available variables */ -extern int debuginfo__find_available_vars_at (struct debuginfo *dbg, -struct perf_probe_event *pev, -struct variable_list **vls); +int debuginfo__find_available_vars_at (struct debuginfo *dbg, +struct perf_probe_event *pev, +struct variable_list **vls);/* Find a src file from a DWARF tag path */ int get_real_path(const char *raw_path, const char *comp_dir,
tools/perf/util/quote.h +1 -1
@@ -24,6 +24,6 @@* sq_quote() in a real application. */ -extern void sq_quote_argv (struct strbuf *,const char **argv,size_t maxlen); +void sq_quote_argv (struct strbuf *,const char **argv,size_t maxlen);#endif /* __PERF_QUOTE_H */
tools/perf/util/strbuf.h +8 -8
@@ -51,16 +51,16 @@ struct strbuf {#define STRBUF_INIT { 0, 0, strbuf_slopbuf }/*----- strbuf life cycle -----*/ -extern void strbuf_init (struct strbuf *buf,ssize_t hint); -extern void strbuf_release (struct strbuf *); -extern char *strbuf_detach (struct strbuf *,size_t *); +void strbuf_init (struct strbuf *buf,ssize_t hint); +void strbuf_release (struct strbuf *buf); +char *strbuf_detach (struct strbuf *buf,size_t *);/*----- strbuf size related -----*/ static inline ssize_t strbuf_avail (const struct strbuf *sb) {return sb->alloc ? sb->alloc - sb->len -1 :0 ; } -extern void strbuf_grow (struct strbuf *,size_t ); +void strbuf_grow (struct strbuf *buf,size_t );static inline void strbuf_setlen (struct strbuf *sb,size_t len) {if (!sb->alloc)
@@ -77,16 +77,16 @@ static inline void strbuf_addch(struct strbuf *sb, int c) { sb->buf[sb->len] = '\0'; } -extern void strbuf_add (struct strbuf *,const void *,size_t ); +void strbuf_add (struct strbuf *buf,const void *,size_t );static inline void strbuf_addstr (struct strbuf *sb,const char *s) {strbuf_add (sb, s,strlen (s)); } __attribute__((format (printf,2 ,3 ))) -extern void strbuf_addf (struct strbuf *sb,const char *fmt, ...); -extern void strbuf_addv (struct strbuf *sb,const char *fmt,va_list ap); +void strbuf_addf (struct strbuf *sb,const char *fmt, ...); +void strbuf_addv (struct strbuf *sb,const char *fmt,va_list ap);/* XXX: if read fails, any partial read is undone */ -extern ssize_t strbuf_read (struct strbuf *,int fd,ssize_t hint); +ssize_t strbuf_read (struct strbuf *,int fd,ssize_t hint);#endif /* __PERF_STRBUF_H */
tools/perf/util/svghelper.h +25 -26
57 lines not on this page · raw message
tools/perf/util/symbol.h +2 -2
@@ -34,8 +34,8 @@#endif #ifdef HAVE_LIBELF_SUPPORT -extern Elf_Scn *elf_section_by_name (Elf *elf,GElf_Ehdr *ep, -GElf_Shdr *shp,const char *name,size_t *idx); +Elf_Scn *elf_section_by_name (Elf *elf,GElf_Ehdr *ep, +GElf_Shdr *shp,const char *name,size_t *idx);#endif #ifndef DMGL_PARAMS
tools/perf/util/util.h +9 -9
@@ -133,17 +133,17 @@ extern char buildid_dir[];#define PERF_GTK_DSO "libperf-gtk.so"/* General helper functions */ -extern void usage(const char *err) NORETURN; -extern void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2))); -extern int error (const char *err, ...) __attribute__((format (printf,1 ,2 ))); -extern void warning (const char *err, ...) __attribute__((format (printf,1 ,2 ))); +void usage(const char *err) NORETURN; +void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2))); +int error (const char *err, ...) __attribute__((format (printf,1 ,2 ))); +void warning (const char *err, ...) __attribute__((format (printf,1 ,2 )));#include "../../../include/linux/stringify.h" -extern void set_warning_routine (void (*routine)(const char *err,va_list params)); +void set_warning_routine (void (*routine)(const char *err,va_list params)); -extern int prefixcmp (const char *str,const char *prefix); -extern void set_buildid_dir (const char *dir); +int prefixcmp (const char *str,const char *prefix); +void set_buildid_dir (const char *dir);#ifdef __GLIBC_PREREQ#if __GLIBC_PREREQ (2 ,1 )
@@ -164,8 +164,8 @@ static inline char *gitstrchrnul(const char *s, int c)/* * Wrappers: */ -extern char *xstrdup (const char *str); -extern void *xrealloc (void *ptr,size_t size) __attribute__((weak)); +char *xstrdup (const char *str); +void *xrealloc (void *ptr,size_t size) __attribute__((weak));static inline void *zalloc (size_t size)
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 15/23 tools lib traceevent: Remove redundant CPU output
In reply to Arnaldo Carvalho de MeloFrom: Steven Rostedt <[email protected]>
Commit a6745330789f ("tools lib traceevent: Split pevent_print_event() into specific functionality functions") broke apart the function pevent_print_event() into three functions.
The first function prints the comm, pid and CPU, the second prints the timestamp.
But that commit added the printing of the CPU in the timestamp function, which now causes pevent_print_event() to duplicate the CPU output.
Remove the redundant printing of the record's CPU from the timestamp function.
--- tools/lib/traceevent/event-parse.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)
tools/lib/traceevent/event-parse.c +1 -3
@@ -5427,10 +5427,8 @@ void pevent_print_event_time(struct pevent *pevent, struct trace_seq *s, }if (pevent->latency_format) { -trace_seq_printf (s," %3d" , record->cpu);pevent_data_lat_fmt (pevent, s, record); - }else -trace_seq_printf (s," [%03d]" , record->cpu); + }if (use_usec_format) {if (pevent->flags &PEVENT_NSEC_OUTPUT ) {
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 16/23 tools include: Copy linux/stringify.h from the kernel
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
There is code in tools/ that is directly including this file from the kernel, and this is verboten for a while, copy it so that the next csets can fix this situation.
--- tools/include/linux/stringify.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 tools/include/linux/stringify.h
tools/include/linux/stringify.h new file +12 -0
@@ -0,0 +1,12 @@ +#ifndef __LINUX_STRINGIFY_H +#define __LINUX_STRINGIFY_H + +/* Indirect stringification. Doing two levels allows the parameter to be a +* macro itself. For example, compile with -DFOO=bar, __stringify(FOO) +* converts to "bar". +*/ + +#define __stringify_1(x...) #x +#define __stringify(x...) __stringify_1(x) + +#endif /* !__LINUX_STRINGIFY_H */
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 17/23 perf tools: Do not include stringify.h from the kernel sources
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
Use instead the copy just made to tools/include/linux/.
--- tools/perf/arch/powerpc/util/header.c | 4 +--- tools/perf/builtin-report.c | 1 + tools/perf/builtin-top.c | 1 + tools/perf/util/util.h | 2 -- 4 files changed, 3 insertions(+), 5 deletions(-)
tools/perf/arch/powerpc/util/header.c +1 -3
@@ -3,9 +3,7 @@#include <stdio.h> #include <stdlib.h> #include <string.h> - -#include "../../util/header.h" -#include "../../util/util.h" +#include <linux/stringify.h> #define mfspr (rn) ({unsigned long rval; \ asm volatile("mfspr %0," __stringify(rn) \
tools/perf/builtin-report.c +1 -0
@@ -41,6 +41,7 @@#include <dlfcn.h> #include <linux/bitmap.h> +#include <linux/stringify.h> struct report {struct perf_tool tool;
tools/perf/builtin-top.c +1 -0
@@ -67,6 +67,7 @@#include <sys/utsname.h> #include <sys/mman.h> +#include <linux/stringify.h> #include <linux/types.h> static volatile int done;
tools/perf/util/util.h +0 -2
@@ -138,8 +138,6 @@ void die(const char *err, ...) NORETURN __attribute__((format (printf, 1, 2)));int error (const char *err, ...) __attribute__((format (printf,1 ,2 )));void warning (const char *err, ...) __attribute__((format (printf,1 ,2 ))); -#include "../../../include/linux/stringify.h" -void set_warning_routine (void (*routine)(const char *err,va_list params));int prefixcmp (const char *str,const char *prefix);
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 18/23 perf tools: Remove unused perf_pathdup, xstrdup functions
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/cache.h | 3 --- tools/perf/util/path.c | 30 ------------------------------ tools/perf/util/util.h | 1 - tools/perf/util/wrapper.c | 12 ------------ 4 files changed, 46 deletions(-)
tools/perf/util/cache.h +0 -3
@@ -70,7 +70,4 @@ char *strip_path_suffix(const char *path, const char *suffix);char *mkpath (const char *fmt, ...) __attribute__((format (printf,1 ,2 )));char *perf_path (const char *fmt, ...) __attribute__((format (printf,1 ,2 ))); -char *perf_pathdup (const char *fmt, ...) - __attribute__((format (printf,1 ,2 ))); -#endif /* __PERF_CACHE_H */
tools/perf/util/path.c +0 -30
@@ -41,36 +41,6 @@ static char *cleanup_path(char *path)return path; } -static char *perf_vsnpath (char *buf,size_t n,const char *fmt,va_list args) -{ -const char *perf_dir =get_perf_dir (); -size_t len; - - len =strlen (perf_dir); -if (n < len +1 ) - goto bad; -memcpy (buf, perf_dir, len); -if (len && !is_dir_sep (perf_dir[len-1 ])) - buf[len++] ='/' ; - len +=vsnprintf (buf + len, n - len, fmt, args); -if (len >= n) - goto bad; -return cleanup_path (buf); -bad: -strlcpy (buf, bad_path, n); -return buf; -} - -char *perf_pathdup (const char *fmt, ...) -{ -char path[PATH_MAX ]; -va_list args; -va_start (args, fmt); - (void )perf_vsnpath (path,sizeof (path), fmt, args); -va_end (args); -return xstrdup (path); -} -char *mkpath (const char *fmt, ...) {va_list args;
tools/perf/util/util.h +0 -1
@@ -162,7 +162,6 @@ static inline char *gitstrchrnul(const char *s, int c)/* * Wrappers: */ -char *xstrdup (const char *str);void *xrealloc (void *ptr,size_t size) __attribute__((weak));
tools/perf/util/wrapper.c +0 -12
@@ -12,18 +12,6 @@ static inline void release_pack_memory(size_t size __maybe_unused, { } -char *xstrdup (const char *str) -{ -char *ret =strdup (str); -if (!ret) { -release_pack_memory (strlen (str) +1 ,-1 ); - ret =strdup (str); -if (!ret) -die ("Out of memory, strdup failed" ); - } -return ret; -} -void *xrealloc (void *ptr,size_t size) {void *ret =realloc (ptr, size);
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 19/23 perf help: Use asprintf instead of adhoc equivalents
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
That doesn't chekcs malloc return and that, when using strbuf, if it can't grow, just explodes away via die().
--- tools/perf/builtin-help.c | 69 +++++++++++++++++++++-------------------------- 1 file changed, 31 insertions(+), 38 deletions(-)
tools/perf/builtin-help.c +31 -38
@@ -106,12 +106,14 @@ static void exec_woman_emacs(const char *path, const char *page)if (!check_emacsclient_version ()) {/* This works only with emacsclient version >= 22. */ -struct strbuf man_page =STRBUF_INIT ; +char *man_page;if (!path) path ="emacsclient" ; -strbuf_addf (&man_page,"(woman \"%s\")" , page); -execlp (path,"emacsclient" ,"-e" , man_page.buf,NULL ); +if (asprintf (&man_page,"(woman \"%s\")" , page) >0 ) { +execlp (path,"emacsclient" ,"-e" , man_page,NULL ); +free (man_page); + }warning ("failed to exec '%s': %s" , path,strerror_r (errno, sbuf,sizeof (sbuf))); }
@@ -122,7 +124,7 @@ static void exec_man_konqueror(const char *path, const char *page)const char *display =getenv ("DISPLAY" );if (display && *display) { -struct strbuf man_page =STRBUF_INIT ; +char *man_page;const char *filename ="kfmclient" ;char sbuf[STRERR_BUFSIZE ];
@@ -141,8 +143,10 @@ static void exec_man_konqueror(const char *path, const char *page) filename = file; }else path ="kfmclient" ; -strbuf_addf (&man_page,"man:%s(1)" , page); -execlp (path, filename,"newTab" , man_page.buf,NULL ); +if (asprintf (&man_page,"man:%s(1)" , page) >0 ) { +execlp (path, filename,"newTab" , man_page,NULL ); +free (man_page); + }warning ("failed to exec '%s': %s" , path,strerror_r (errno, sbuf,sizeof (sbuf))); }
@@ -161,11 +165,13 @@ static void exec_man_man(const char *path, const char *page)static void exec_man_cmd (const char *cmd,const char *page) { -struct strbuf shell_cmd =STRBUF_INIT ;char sbuf[STRERR_BUFSIZE ]; +char *shell_cmd; -strbuf_addf (&shell_cmd,"%s %s" , cmd, page); -execl ("/bin/sh" ,"sh" ,"-c" , shell_cmd.buf,NULL ); +if (asprintf (&shell_cmd,"%s %s" , cmd, page) >0 ) { +execl ("/bin/sh" ,"sh" ,"-c" , shell_cmd,NULL ); +free (shell_cmd); + }warning ("failed to exec '%s': %s" , cmd,strerror_r (errno, sbuf,sizeof (sbuf))); }
@@ -299,43 +305,33 @@ static int is_perf_command(const char *s)is_in_cmdlist (&other_cmds, s); } -static const char *prepend (const char *prefix,const char *cmd) -{ -size_t pre_len =strlen (prefix); -size_t cmd_len =strlen (cmd); -char *p =malloc (pre_len + cmd_len +1 ); -memcpy (p, prefix, pre_len); -strcpy (p + pre_len, cmd); -return p; -} -static const char *cmd_to_page (const char *perf_cmd) { +char *s; +if (!perf_cmd)return "perf" ;else if (!prefixcmp (perf_cmd,"perf" ))return perf_cmd; -else -return prepend ("perf-" , perf_cmd); + +return asprintf (&s,"perf-%s" , perf_cmd) <0 ?NULL : s; }static void setup_man_path (void ) { -struct strbuf new_path =STRBUF_INIT ; +char *new_path;const char *old_path =getenv ("MANPATH" );/* We should always put ':' after our path. If there is no * old_path, the ':' at the end will let 'man' to try * system-wide paths after ours to find the manual page. If * there is old_path, we need ':' as delimiter. */ -strbuf_addstr (&new_path,system_path (PERF_MAN_PATH )); -strbuf_addch (&new_path,':' ); -if (old_path) -strbuf_addstr (&new_path, old_path); - -setenv ("MANPATH" , new_path.buf,1 ); - -strbuf_release (&new_path); +if (asprintf (&new_path,"%s:%s" ,system_path (PERF_MAN_PATH ), old_path ?:"" ) >0 ) { +setenv ("MANPATH" , new_path,1 ); +free (new_path); + }else { +error ("Unable to setup man path" ); + } }static void exec_viewer (const char *name,const char *page)
@@ -380,7 +376,7 @@ static int show_info_page(const char *perf_cmd)return -1 ; } -static int get_html_page_path (struct strbuf *page_path,const char *page) +static int get_html_page_path (char **page_path,const char *page) {struct stat st;const char *html_path =system_path (PERF_HTML_PATH );
@@ -392,10 +388,7 @@ static int get_html_page_path(struct strbuf *page_path, const char *page)return -1 ; } -strbuf_init (page_path,0 ); -strbuf_addf (page_path,"%s/%s.html" , html_path, page); - -return 0 ; +return asprintf (page_path,"%s/%s.html" , html_path, page); }/*
@@ -413,12 +406,12 @@ static void open_html(const char *path)static int show_html_page (const char *perf_cmd) {const char *page =cmd_to_page (perf_cmd); -struct strbuf page_path;/* it leaks but we exec bellow */ +char *page_path;/* it leaks but we exec bellow */ -if (get_html_page_path (&page_path, page) !=0 ) +if (get_html_page_path (&page_path, page) <0 )return -1 ; -open_html (page_path.buf); +open_html (page_path);return 0 ; }
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 20/23 perf probe: No need to use formatting strbuf method
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
We have addch() for chars, add() for fixed size data, and addstr() for variable length strings, use them.
--- tools/perf/util/dwarf-aux.c | 10 +++++----- tools/perf/util/probe-event.c | 2 +- tools/perf/util/probe-finder.c | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-)
tools/perf/util/dwarf-aux.c +5 -5
@@ -915,7 +915,7 @@ int die_get_typename(Dwarf_Die *vr_die, struct strbuf *buf) tmp ="*" ; else if (tag == DW_TAG_subroutine_type) {/* Function pointer */ -strbuf_addf (buf,"(function_type)" ); +strbuf_add (buf,"(function_type)" ,15 );return 0 ; } else {if (!dwarf_diename (&type))
@@ -932,7 +932,7 @@ int die_get_typename(Dwarf_Die *vr_die, struct strbuf *buf) } ret =die_get_typename (&type, buf);if (ret ==0 ) -strbuf_addf (buf,"%s" , tmp); +strbuf_addstr (buf, tmp);return ret; }
@@ -951,7 +951,7 @@ int die_get_varname(Dwarf_Die *vr_die, struct strbuf *buf) ret =die_get_typename (vr_die, buf);if (ret <0 ) {pr_debug ("Failed to get type, make it unknown.\n" ); -strbuf_addf (buf,"(unknown_type)" ); +strbuf_add (buf," (unknown_type)" ,14 ); }strbuf_addf (buf,"\t%s" ,dwarf_diename (vr_die));
@@ -1013,7 +1013,7 @@ static int die_get_var_innermost_scope(Dwarf_Die *sp_die, Dwarf_Die *vr_die, }if (!first) -strbuf_addf (buf,"]>" ); +strbuf_add (buf,"]>" ,2 ); out:free (scopes);
@@ -1076,7 +1076,7 @@ int die_get_var_range(Dwarf_Die *sp_die, Dwarf_Die *vr_die, struct strbuf *buf) }if (!first) -strbuf_addf (buf,"]>" ); +strbuf_add (buf,"]>" ,2 );return ret; }
tools/perf/util/probe-event.c +1 -1
@@ -2179,7 +2179,7 @@ static int perf_probe_event__sprintf(const char *group, const char *event,strbuf_addf (result," in %s" , module);if (pev->nargs >0 ) { -strbuf_addstr (result," with" ); +strbuf_add (result," with" ,5 );for (i =0 ; i < pev->nargs; i++) { ret =synthesize_perf_probe_arg (&pev->args[i], buf,128 );
tools/perf/util/probe-finder.c +4 -4
@@ -1314,18 +1314,18 @@ static int collect_variables_cb(Dwarf_Die *die_mem, void *data)if (probe_conf.show_location_range) {if (!externs) {if (ret) -strbuf_addf (&buf,"[INV]\t" ); +strbuf_add (&buf,"[INV]\t" ,6 );else -strbuf_addf (&buf,"[VAL]\t" ); +strbuf_add (&buf,"[VAL]\t" ,6 ); }else -strbuf_addf (&buf,"[EXT]\t" ); +strbuf_add (&buf,"[EXT]\t" ,6 ); } ret2 =die_get_varname (die_mem, &buf);if (!ret2 && probe_conf.show_location_range && !externs) { -strbuf_addf (&buf,"\t" ); +strbuf_addch (&buf,'\t' ); ret2 =die_get_var_range (&af->pf.sp_die, die_mem, &buf); }
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 21/23 perf tools: Unexport some methods unused outside strbuf.c
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/strbuf.c | 9 ++++++++- tools/perf/util/strbuf.h | 7 +------ 2 files changed, 9 insertions(+), 7 deletions(-)
tools/perf/util/strbuf.c +8 -1
@@ -51,6 +51,13 @@ void strbuf_grow(struct strbuf *sb, size_t extra)ALLOC_GROW (sb->buf, sb->len + extra +1 , sb->alloc); } +void strbuf_addch (struct strbuf *sb,int c) +{ +strbuf_grow (sb,1 ); + sb->buf[sb->len++] = c; + sb->buf[sb->len] ='\0' ; +} +void strbuf_add (struct strbuf *sb,const void *data,size_t len) {strbuf_grow (sb, len);
@@ -58,7 +65,7 @@ void strbuf_add(struct strbuf *sb, const void *data, size_t len)strbuf_setlen (sb, sb->len + len); } -void strbuf_addv (struct strbuf *sb,const char *fmt,va_list ap) +static void strbuf_addv (struct strbuf *sb,const char *fmt,va_list ap) {int len;va_list ap_saved;
tools/perf/util/strbuf.h +1 -6
@@ -71,11 +71,7 @@ static inline void strbuf_setlen(struct strbuf *sb, size_t len) { }/*----- add data in your buffer -----*/ -static inline void strbuf_addch (struct strbuf *sb,int c) { -strbuf_grow (sb,1 ); - sb->buf[sb->len++] = c; - sb->buf[sb->len] ='\0' ; -} +void strbuf_addch (struct strbuf *sb,int c);void strbuf_add (struct strbuf *buf,const void *,size_t );static inline void strbuf_addstr (struct strbuf *sb,const char *s) {
@@ -84,7 +80,6 @@ static inline void strbuf_addstr(struct strbuf *sb, const char *s) { __attribute__((format (printf,2 ,3 )))void strbuf_addf (struct strbuf *sb,const char *fmt, ...); -void strbuf_addv (struct strbuf *sb,const char *fmt,va_list ap);/* XXX: if read fails, any partial read is undone */ ssize_t strbuf_read (struct strbuf *,int fd,ssize_t hint);
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 22/23 perf llvm: Use realpath to canonicalize paths
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
To kill the last user of make_nonrelative_path(), that gets ditched, one more panicking function killed.
--- tools/perf/util/Build | 1 - tools/perf/util/abspath.c | 37 ------------------------------------- tools/perf/util/cache.h | 1 - tools/perf/util/llvm-utils.c | 17 ++++++++++++----- 4 files changed, 12 insertions(+), 44 deletions(-) delete mode 100644 tools/perf/util/abspath.c
tools/perf/util/Build +0 -1
@@ -1,4 +1,3 @@ -libperf-y += abspath.o libperf-y += alias.o libperf-y += annotate.o libperf-y += build-id.o
tools/perf/util/abspath.c deleted +0 -37
@@ -1,37 +0,0 @@ -#include "cache.h" - -static const char *get_pwd_cwd (void ) -{ -static char cwd[PATH_MAX +1 ]; -char *pwd; -struct stat cwd_stat, pwd_stat; -if (getcwd (cwd,PATH_MAX ) ==NULL ) -return NULL ; - pwd =getenv ("PWD" ); -if (pwd &&strcmp (pwd, cwd)) { -stat (cwd, &cwd_stat); -if (!stat (pwd, &pwd_stat) && - pwd_stat.st_dev == cwd_stat.st_dev && - pwd_stat.st_ino == cwd_stat.st_ino) { -strlcpy (cwd, pwd,PATH_MAX ); - } - } -return cwd; -} - -const char *make_nonrelative_path (const char *path) -{ -static char buf[PATH_MAX +1 ]; - -if (is_absolute_path (path)) { -if (strlcpy (buf, path,PATH_MAX ) >=PATH_MAX ) -die ("Too long path: %.*s" ,60 , path); - }else { -const char *cwd =get_pwd_cwd (); -if (!cwd) -die ("Cannot determine the current working directory" ); -if (snprintf (buf,PATH_MAX ,"%s/%s" , cwd, path) >=PATH_MAX ) -die ("Too long path: %.*s" ,60 , path); - } -return buf; -}
tools/perf/util/cache.h +0 -1
@@ -64,7 +64,6 @@ static inline int is_absolute_path(const char *path)return path[0 ] =='/' ; } -const char *make_nonrelative_path (const char *path);char *strip_path_suffix (const char *path,const char *suffix);char *mkpath (const char *fmt, ...) __attribute__((format (printf,1 ,2 )));
tools/perf/util/llvm-utils.c +12 -5
@@ -3,11 +3,11 @@* Copyright (C) 2015, Huawei Inc. */ +#include <limits.h> #include <stdio.h> -#include "util.h" +#include <stdlib.h> #include "debug.h" #include "llvm-utils.h" -#include "cache.h" #define CLANG_BPF_CMD_DEFAULT_TEMPLATE \ "$CLANG_EXEC -D__KERNEL__ -D__NR_CPUS__=$NR_CPUS "\
@@ -334,10 +334,18 @@ int llvm__compile_bpf(const char *path, void **p_obj_buf,unsigned int kernel_version;char linux_version_code_str[64 ];const char *clang_opt = llvm_param.clang_opt; -char clang_path[PATH_MAX ], nr_cpus_avail_str[64 ]; +char clang_path[PATH_MAX ], abspath[PATH_MAX ], nr_cpus_avail_str[64 ]; +char serr[STRERR_BUFSIZE ];char *kbuild_dir =NULL , *kbuild_include_opts =NULL ;const char *template = llvm_param.clang_bpf_cmd_template; +if (path[0 ] !='-' &&realpath (path, abspath) ==NULL ) { + err = errno; +pr_err ("ERROR: problems with path %s: %s\n" , + path,strerror_r (err, serr,sizeof (serr))); +return -err; + } +if (!template) template =CLANG_BPF_CMD_DEFAULT_TEMPLATE ;
@@ -387,8 +395,7 @@ int llvm__compile_bpf(const char *path, void **p_obj_buf,* stdin to be source file (testing). */ force_set_env ("CLANG_SOURCE" , - (path[0 ] =='-' ) ? path : -make_nonrelative_path (path)); + (path[0 ] =='-' ) ? path : abspath);pr_debug ("llvm compiling command template: %s\n" , template); err =read_from_pipe (template, &obj_buf, &obj_buf_sz);
Signature · 1 line
2.5.5
Arnaldo Carvalho de Melo
maintainerPATCH 23/23 perf llvm: Use strerror_r instead of the thread unsafe strerror one
In reply to Arnaldo Carvalho de MeloFrom: Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/util/llvm-utils.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
tools/perf/util/llvm-utils.c +4 -3
@@ -98,11 +98,12 @@ read_from_pipe(const char *cmd, void **p_buf, size_t *p_read_sz)void *buf =NULL ;FILE *file =NULL ;size_t read_sz =0 , buf_sz =0 ; +char serr[STRERR_BUFSIZE ]; file =popen (cmd,"r" );if (!file) {pr_err ("ERROR: unable to popen cmd: %s\n" , -strerror (errno)); +strerror_r (errno, serr,sizeof (serr)));return -EINVAL ; }
@@ -136,7 +137,7 @@ read_from_pipe(const char *cmd, void **p_buf, size_t *p_read_sz)if (ferror (file)) {pr_err ("ERROR: error occurred when reading from pipe: %s\n" , -strerror (errno)); +strerror_r (errno, serr,sizeof (serr))); err = -EIO ; goto errout; }
@@ -370,7 +371,7 @@ int llvm__compile_bpf(const char *path, void **p_obj_buf,if (nr_cpus_avail <=0 ) {pr_err ("WARNING:\tunable to get available CPUs in this system: %s\n" -" \tUse 128 instead.\n" ,strerror (errno)); +" \tUse 128 instead.\n" ,strerror_r (errno, serr,sizeof (serr))); nr_cpus_avail =128 ; } snprintf(nr_cpus_avail_str, sizeof(nr_cpus_avail_str), "%d",
Signature · 1 line
2.5.5
Quoted 189 lines · Arnaldo Carvalho de Melo
Hi Ingo,
Please consider pulling, test built on:
[root@jouet ~]# dm
alldeps-debian: Ok
alldeps-mageia: Ok
alldeps-rhel7: Ok
alldeps-centos: Ok
alldeps-opensuse: Ok
alldeps-ubuntu: Ok
[root@jouet ~]#All the latest distro releases, updated (dnf/yum/apt-get/urpmi/zypper/etc
upgraded as of a few days ago) as available on docker.io/vendors.- Arnaldo
The following changes since commit
ced30bc9129777d715057d06fc8dbdfd3b81e94d:Merge tag 'perf-core-for-mingo-20160310' of
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linuxinto perf/core (2016-03-11 09:40:25 +0100)are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.gittags/perf-core-for-mingo-20160323for you to fetch changes up to
76267147f233f347dbd8f4f8c05492e5ea0a7dce:perf llvm: Use
strerror_rinstead of the thread unsafe strerror one (2016-03-23 17:42:21 -0300)----------------------------------------------------------------
perf/core improvements and fixes:User visible:
- Fix documentation of :ppp modifier in 'perf list' (Andi Kleen)
- Fix silly nodes bitfield bits/bytes length assertion in 'perf bench numa' (Jakub Jelen)
- Remove redundant CPU output in libtraceevent (Steven Rostedt)
- Remove '
core_id' check in topology 'perf test' (Sukadev Bhattiprolu)Infrastructure:
- Record text offset in dso to calculate objdump address, to use with modules in addition to vDSO symbol address calculations (Wang Nan)
- Move utilities.mak from perf to
tools/scripts/(Arnaldo Carvalho de Melo)- Add cpumode to the
perf_samplestruct, this way we don't need to pass the union event to the machine and thread resolving routines, shortening function signatures and allowing the future introduction of a way to use tracepoint events instead of the unavailable HW cycles counter on powerpc guests in perf kvm by just hooking onperf_evsel__parse_sample, at the end (Arnaldo Carvalho de Melo)- Remove/unexport
die()related infrastructure, that at some point will finally be removed (Arnaldo Carvalho de Melo)- Adopt
linux/stringify.hfrom the kernel sources, not to touch this kernel header fromtools/(Arnaldo Carvalho de Melo)- Stop using strbuf for things we can instead trivially use libc's
asprintf()(Arnaldo Carvalho de Melo)- Ditch
tools/lib/util/abspath.c, its only exported function was used at just one place and can be replaced by libc'srealpath()(Arnaldo Carvalho de Melo)- Use
strerror_r()in the llvm infrastructure, tread safe, its what is used elsewhere intools/perf/(Arnaldo Carvalho de Melo)Cleanups:
- Removed misplaced or needless __maybe_unused/export (Arnaldo Carvalho de Melo)
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>----------------------------------------------------------------
Andi Kleen (1):
perf list: Fix documentation of :pppArnaldo Carvalho de Melo (18):
tools: Move utilities.mak from perf totools/scripts/
perf tools: Remove misplaced__maybe_unused
perf tests: Forward theperf_samplein the dwarf unwind test perf tools: Add cpumode to structperf_sample
perf machine: Renameperf_event__preprocess_sampletomachine__resolveperf thread: Renameperf_event__preprocess_sample_addrtothread__resolveperf script: Remove lots of unused arguments
perf tools: Remove unusedDIE_IFmacro
perf tools: Simplifydie()mechanism
perf tools: Remove needless 'extern' from function prototypes tools include: Copylinux/stringify.hfrom the kernel
perf tools: Do not includestringify.hfrom the kernel sources perf tools: Remove unusedperf_pathdup, xstrdup functions perf help: Use asprintf instead of adhoc equivalents
perf probe: No need to use formatting strbuf method
perf tools: Unexport some methods unused outsidestrbuf.cperf llvm: Use realpath to canonicalize paths
perf llvm: Usestrerror_rinstead of the thread unsafe strerror oneJakub Jelen (1):
perf bench numa: Fix assertion for nodes bitfieldSteven Rostedt (1):
tools lib traceevent: Remove redundant CPU outputSukadev Bhattiprolu (1):
perf test: Remove 'core_id' check in topo testWang Nan (1):
perf symbols: Record text offset in dso to calculate objdump addresstools/include/linux/stringify.h | 12 +++++ tools/lib/api/Makefile | 2 +- tools/lib/subcmd/Makefile | 2 +- tools/lib/traceevent/event-parse.c | 4 +- tools/perf/Documentation/Makefile | 2 +- tools/perf/Documentation/perf-list.txt | 6 ++- tools/perf/Makefile.perf | 2 +- tools/perf/arch/powerpc/util/header.c | 4 +- tools/perf/bench/bench.h | 22 ++++----- tools/perf/bench/mem-memcpy-arch.h | 2 +- tools/perf/bench/mem-memset-arch.h | 2 +- tools/perf/bench/numa.c | 2 +- tools/perf/builtin-annotate.c | 2 +- tools/perf/builtin-diff.c | 2 +- tools/perf/builtin-help.c | 69 ++++++++++++-------------- tools/perf/builtin-inject.c | 8 +--- tools/perf/builtin-mem.c | 2 +- tools/perf/builtin-report.c | 3 +- tools/perf/builtin-script.c | 46 +++++++----------- tools/perf/builtin-timechart.c | 2 +- tools/perf/builtin-top.c | 8 ++-- tools/perf/builtin-trace.c | 9 ++-- tools/perf/builtin.h | 64 ++++++++++++------------- tools/perf/config/Makefile | 2 +- tools/perf/tests/code-reading.c | 5 +- tools/perf/tests/dwarf-unwind.c | 4 +- tools/perf/tests/hists_common.c | 6 ++- tools/perf/tests/hists_cumulate.c | 9 +--- tools/perf/tests/hists_filter.c | 9 +--- tools/perf/tests/hists_link.c | 20 ++------ tools/perf/tests/hists_output.c | 9 +--- tools/perf/ui/gtk/hists.c | 2 +- tools/perf/util/Build | 1 - tools/perf/util/abspath.c | 37 -------------- tools/perf/util/annotate.h | 2 +- tools/perf/util/auxtrace.h | 2 +- tools/perf/util/build-id.c | 3 +- tools/perf/util/cache.h | 24 ++++------ tools/perf/util/callchain.h | 4 +- tools/perf/util/cgroup.h | 4 +- tools/perf/util/cloexec.h | 2 +- tools/perf/util/data-convert-bt.c | 2 +- tools/perf/util/db-export.c | 2 +- tools/perf/util/dso.h | 3 +- tools/perf/util/dwarf-aux.c | 10 ++-- tools/perf/util/dwarf-aux.h | 72 ++++++++++++++-------------- tools/perf/util/event.c | 23 ++++----- tools/perf/util/event.h | 13 ++--- tools/perf/util/evsel.c | 1 + tools/perf/util/genelf.h | 8 ++-- tools/perf/util/header.c | 5 -- tools/perf/util/header.h | 2 +- tools/perf/util/hist.c | 2 +- tools/perf/util/hist.h | 3 +- tools/perf/util/intel-bts.c | 2 +- tools/perf/util/jit.h | 12 ++--- tools/perf/util/llvm-utils.c | 24 ++++++---- tools/perf/util/llvm-utils.h | 7 ++- tools/perf/util/machine.c | 14 +++--- tools/perf/util/machine.h | 2 +- tools/perf/util/parse-events.h | 21 ++++---- tools/perf/util/path.c | 30 ------------ tools/perf/util/probe-event.c | 2 +- tools/perf/util/probe-event.h | 57 ++++++++++------------ tools/perf/util/probe-finder.c | 8 ++-- tools/perf/util/probe-finder.h | 24 +++++----- tools/perf/util/quote.h | 2 +- tools/perf/util/session.c | 5 +- tools/perf/util/sort.c | 2 +- tools/perf/util/stat-shadow.c | 18 ++++--- tools/perf/util/strbuf.c | 9 +++- tools/perf/util/strbuf.h | 21 ++++---- tools/perf/util/svghelper.h | 51 ++++++++++---------- tools/perf/util/symbol-elf.c | 12 ++--- tools/perf/util/symbol.h | 4 +-
Quoted 8 lines
tools/perf/util/usage.c | 8 +---
tools/perf/util/util.h | 27 ++++-------
tools/perf/util/wrapper.c | 12 -----
tools/{perf/config => scripts}/utilities.mak | 0
79 files changed, 385 insertions(+), 557 deletions(-)
create mode 100644 tools/include/linux/stringify.h
delete mode 100644 tools/perf/util/abspath.c
rename tools/{perf/config => scripts}/utilities.mak (100%)Pulled, thanks a lot Arnaldo!
Ingo