Commit e31f0d01 authored by Adrian Hunter's avatar Adrian Hunter Committed by Arnaldo Carvalho de Melo

perf tools: Add build option NO_AUXTRACE to exclude AUX area tracing

Add build option NO_AUXTRACE to exclude compiling support for AUX area
tracing. Support for both recording and processing is excluded and by
implication any future additions such as Intel PT and Intel BTS will
also not be compiled in with this option.
Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Namhyung Kim <namhyung@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lkml.kernel.org/r/1430404667-10593-5-git-send-email-adrian.hunter@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent cd10b289
...@@ -73,6 +73,8 @@ include config/utilities.mak ...@@ -73,6 +73,8 @@ include config/utilities.mak
# for CTF data format. # for CTF data format.
# #
# Define NO_LZMA if you do not want to support compressed (xz) kernel modules # Define NO_LZMA if you do not want to support compressed (xz) kernel modules
#
# Define NO_AUXTRACE if you do not want AUX area tracing support
ifeq ($(srctree),) ifeq ($(srctree),)
srctree := $(patsubst %/,%,$(dir $(shell pwd))) srctree := $(patsubst %/,%,$(dir $(shell pwd)))
......
...@@ -53,25 +53,6 @@ static int output_bytes(struct perf_inject *inject, void *buf, size_t sz) ...@@ -53,25 +53,6 @@ static int output_bytes(struct perf_inject *inject, void *buf, size_t sz)
return 0; return 0;
} }
static int copy_bytes(struct perf_inject *inject, int fd, off_t size)
{
char buf[4096];
ssize_t ssz;
int ret;
while (size > 0) {
ssz = read(fd, buf, min(size, (off_t)sizeof(buf)));
if (ssz < 0)
return -errno;
ret = output_bytes(inject, buf, ssz);
if (ret)
return ret;
size -= ssz;
}
return 0;
}
static int perf_event__repipe_synth(struct perf_tool *tool, static int perf_event__repipe_synth(struct perf_tool *tool,
union perf_event *event) union perf_event *event)
{ {
...@@ -114,6 +95,27 @@ static int perf_event__repipe_attr(struct perf_tool *tool, ...@@ -114,6 +95,27 @@ static int perf_event__repipe_attr(struct perf_tool *tool,
return perf_event__repipe_synth(tool, event); return perf_event__repipe_synth(tool, event);
} }
#ifdef HAVE_AUXTRACE_SUPPORT
static int copy_bytes(struct perf_inject *inject, int fd, off_t size)
{
char buf[4096];
ssize_t ssz;
int ret;
while (size > 0) {
ssz = read(fd, buf, min(size, (off_t)sizeof(buf)));
if (ssz < 0)
return -errno;
ret = output_bytes(inject, buf, ssz);
if (ret)
return ret;
size -= ssz;
}
return 0;
}
static s64 perf_event__repipe_auxtrace(struct perf_tool *tool, static s64 perf_event__repipe_auxtrace(struct perf_tool *tool,
union perf_event *event, union perf_event *event,
struct perf_session *session struct perf_session *session
...@@ -153,6 +155,19 @@ static s64 perf_event__repipe_auxtrace(struct perf_tool *tool, ...@@ -153,6 +155,19 @@ static s64 perf_event__repipe_auxtrace(struct perf_tool *tool,
return event->auxtrace.size; return event->auxtrace.size;
} }
#else
static s64
perf_event__repipe_auxtrace(struct perf_tool *tool __maybe_unused,
union perf_event *event __maybe_unused,
struct perf_session *session __maybe_unused)
{
pr_err("AUX area tracing not supported\n");
return -EINVAL;
}
#endif
static int perf_event__repipe(struct perf_tool *tool, static int perf_event__repipe(struct perf_tool *tool,
union perf_event *event, union perf_event *event,
struct perf_sample *sample __maybe_unused, struct perf_sample *sample __maybe_unused,
......
...@@ -112,6 +112,8 @@ static int record__mmap_read(struct record *rec, int idx) ...@@ -112,6 +112,8 @@ static int record__mmap_read(struct record *rec, int idx)
return rc; return rc;
} }
#ifdef HAVE_AUXTRACE_SUPPORT
static int record__process_auxtrace(struct perf_tool *tool, static int record__process_auxtrace(struct perf_tool *tool,
union perf_event *event, void *data1, union perf_event *event, void *data1,
size_t len1, void *data2, size_t len2) size_t len1, void *data2, size_t len2)
...@@ -165,6 +167,17 @@ static int record__auxtrace_mmap_read(struct record *rec, ...@@ -165,6 +167,17 @@ static int record__auxtrace_mmap_read(struct record *rec,
return 0; return 0;
} }
#else
static inline
int record__auxtrace_mmap_read(struct record *rec __maybe_unused,
struct auxtrace_mmap *mm __maybe_unused)
{
return 0;
}
#endif
static volatile int done = 0; static volatile int done = 0;
static volatile int signr = -1; static volatile int signr = -1;
static volatile int child_finished = 0; static volatile int child_finished = 0;
......
...@@ -610,6 +610,11 @@ ifdef LIBBABELTRACE ...@@ -610,6 +610,11 @@ ifdef LIBBABELTRACE
endif endif
endif endif
ifndef NO_AUXTRACE
$(call detected,CONFIG_AUXTRACE)
CFLAGS += -DHAVE_AUXTRACE_SUPPORT
endif
# Among the variables below, these: # Among the variables below, these:
# perfexecdir # perfexecdir
# template_dir # template_dir
......
...@@ -32,6 +32,7 @@ make_no_backtrace := NO_BACKTRACE=1 ...@@ -32,6 +32,7 @@ make_no_backtrace := NO_BACKTRACE=1
make_no_libnuma := NO_LIBNUMA=1 make_no_libnuma := NO_LIBNUMA=1
make_no_libaudit := NO_LIBAUDIT=1 make_no_libaudit := NO_LIBAUDIT=1
make_no_libbionic := NO_LIBBIONIC=1 make_no_libbionic := NO_LIBBIONIC=1
make_no_auxtrace := NO_AUXTRACE=1
make_tags := tags make_tags := tags
make_cscope := cscope make_cscope := cscope
make_help := help make_help := help
...@@ -52,7 +53,7 @@ make_static := LDFLAGS=-static ...@@ -52,7 +53,7 @@ make_static := LDFLAGS=-static
make_minimal := NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1 make_minimal := NO_LIBPERL=1 NO_LIBPYTHON=1 NO_NEWT=1 NO_GTK2=1
make_minimal += NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1 make_minimal += NO_DEMANGLE=1 NO_LIBELF=1 NO_LIBUNWIND=1 NO_BACKTRACE=1
make_minimal += NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1 make_minimal += NO_LIBNUMA=1 NO_LIBAUDIT=1 NO_LIBBIONIC=1
make_minimal += NO_LIBDW_DWARF_UNWIND=1 make_minimal += NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1
# $(run) contains all available tests # $(run) contains all available tests
run := make_pure run := make_pure
...@@ -74,6 +75,7 @@ run += make_no_backtrace ...@@ -74,6 +75,7 @@ run += make_no_backtrace
run += make_no_libnuma run += make_no_libnuma
run += make_no_libaudit run += make_no_libaudit
run += make_no_libbionic run += make_no_libbionic
run += make_no_auxtrace
run += make_help run += make_help
run += make_doc run += make_doc
run += make_perf_o run += make_perf_o
......
...@@ -74,7 +74,7 @@ libperf-y += data.o ...@@ -74,7 +74,7 @@ libperf-y += data.o
libperf-$(CONFIG_X86) += tsc.o libperf-$(CONFIG_X86) += tsc.o
libperf-y += cloexec.o libperf-y += cloexec.o
libperf-y += thread-stack.o libperf-y += thread-stack.o
libperf-y += auxtrace.o libperf-$(CONFIG_AUXTRACE) += auxtrace.o
libperf-$(CONFIG_LIBELF) += symbol-elf.o libperf-$(CONFIG_LIBELF) += symbol-elf.o
libperf-$(CONFIG_LIBELF) += probe-event.o libperf-$(CONFIG_LIBELF) += probe-event.o
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include "../perf.h" #include "../perf.h"
#include "event.h" #include "event.h"
#include "session.h" #include "session.h"
#include "debug.h"
union perf_event; union perf_event;
struct perf_session; struct perf_session;
...@@ -290,6 +291,8 @@ struct auxtrace_record { ...@@ -290,6 +291,8 @@ struct auxtrace_record {
int (*read_finish)(struct auxtrace_record *itr, int idx); int (*read_finish)(struct auxtrace_record *itr, int idx);
}; };
#ifdef HAVE_AUXTRACE_SUPPORT
static inline u64 auxtrace_mmap__read_head(struct auxtrace_mmap *mm) static inline u64 auxtrace_mmap__read_head(struct auxtrace_mmap *mm)
{ {
struct perf_event_mmap_page *pc = mm->userpg; struct perf_event_mmap_page *pc = mm->userpg;
...@@ -458,4 +461,129 @@ static inline void auxtrace__free(struct perf_session *session) ...@@ -458,4 +461,129 @@ static inline void auxtrace__free(struct perf_session *session)
return session->auxtrace->free(session); return session->auxtrace->free(session);
} }
#else
static inline struct auxtrace_record *
auxtrace_record__init(struct perf_evlist *evlist __maybe_unused,
int *err __maybe_unused)
{
*err = 0;
return NULL;
}
static inline
void auxtrace_record__free(struct auxtrace_record *itr __maybe_unused)
{
}
static inline int
perf_event__synthesize_auxtrace_info(struct auxtrace_record *itr __maybe_unused,
struct perf_tool *tool __maybe_unused,
struct perf_session *session __maybe_unused,
perf_event__handler_t process __maybe_unused)
{
return -EINVAL;
}
static inline
int auxtrace_record__options(struct auxtrace_record *itr __maybe_unused,
struct perf_evlist *evlist __maybe_unused,
struct record_opts *opts __maybe_unused)
{
return 0;
}
#define perf_event__process_auxtrace_info 0
#define perf_event__process_auxtrace 0
#define perf_event__process_auxtrace_error 0
static inline
void perf_session__auxtrace_error_inc(struct perf_session *session
__maybe_unused,
union perf_event *event
__maybe_unused)
{
}
static inline
void events_stats__auxtrace_error_warn(const struct events_stats *stats
__maybe_unused)
{
}
static inline
int itrace_parse_synth_opts(const struct option *opt __maybe_unused,
const char *str __maybe_unused,
int unset __maybe_unused)
{
pr_err("AUX area tracing not supported\n");
return -EINVAL;
}
static inline
int auxtrace__process_event(struct perf_session *session __maybe_unused,
union perf_event *event __maybe_unused,
struct perf_sample *sample __maybe_unused,
struct perf_tool *tool __maybe_unused)
{
return 0;
}
static inline
int auxtrace__flush_events(struct perf_session *session __maybe_unused,
struct perf_tool *tool __maybe_unused)
{
return 0;
}
static inline
void auxtrace__free_events(struct perf_session *session __maybe_unused)
{
}
static inline
void auxtrace_cache__free(struct auxtrace_cache *auxtrace_cache __maybe_unused)
{
}
static inline
void auxtrace__free(struct perf_session *session __maybe_unused)
{
}
static inline
int auxtrace_index__write(int fd __maybe_unused,
struct list_head *head __maybe_unused)
{
return -EINVAL;
}
static inline
int auxtrace_index__process(int fd __maybe_unused,
u64 size __maybe_unused,
struct perf_session *session __maybe_unused,
bool needs_swap __maybe_unused)
{
return -EINVAL;
}
static inline
void auxtrace_index__free(struct list_head *head __maybe_unused)
{
}
int auxtrace_mmap__mmap(struct auxtrace_mmap *mm,
struct auxtrace_mmap_params *mp,
void *userpg, int fd);
void auxtrace_mmap__munmap(struct auxtrace_mmap *mm);
void auxtrace_mmap_params__init(struct auxtrace_mmap_params *mp,
off_t auxtrace_offset,
unsigned int auxtrace_pages,
bool auxtrace_overwrite);
void auxtrace_mmap_params__set_idx(struct auxtrace_mmap_params *mp,
struct perf_evlist *evlist, int idx,
bool per_cpu);
#endif
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment