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: Adrian Hunter <adrian.hunter@intel.com> Acked-by: Jiri 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.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
cd10b28952
commit
e31f0d017e
|
@ -73,6 +73,8 @@ include config/utilities.mak
|
|||
# for CTF data format.
|
||||
#
|
||||
# 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),)
|
||||
srctree := $(patsubst %/,%,$(dir $(shell pwd)))
|
||||
|
|
|
@ -53,25 +53,6 @@ static int output_bytes(struct perf_inject *inject, void *buf, size_t sz)
|
|||
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,
|
||||
union perf_event *event)
|
||||
{
|
||||
|
@ -114,6 +95,27 @@ static int perf_event__repipe_attr(struct perf_tool *tool,
|
|||
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,
|
||||
union perf_event *event,
|
||||
struct perf_session *session
|
||||
|
@ -153,6 +155,19 @@ static s64 perf_event__repipe_auxtrace(struct perf_tool *tool,
|
|||
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,
|
||||
union perf_event *event,
|
||||
struct perf_sample *sample __maybe_unused,
|
||||
|
|
|
@ -112,6 +112,8 @@ out:
|
|||
return rc;
|
||||
}
|
||||
|
||||
#ifdef HAVE_AUXTRACE_SUPPORT
|
||||
|
||||
static int record__process_auxtrace(struct perf_tool *tool,
|
||||
union perf_event *event, void *data1,
|
||||
size_t len1, void *data2, size_t len2)
|
||||
|
@ -165,6 +167,17 @@ static int record__auxtrace_mmap_read(struct record *rec,
|
|||
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 signr = -1;
|
||||
static volatile int child_finished = 0;
|
||||
|
|
|
@ -610,6 +610,11 @@ ifdef LIBBABELTRACE
|
|||
endif
|
||||
endif
|
||||
|
||||
ifndef NO_AUXTRACE
|
||||
$(call detected,CONFIG_AUXTRACE)
|
||||
CFLAGS += -DHAVE_AUXTRACE_SUPPORT
|
||||
endif
|
||||
|
||||
# Among the variables below, these:
|
||||
# perfexecdir
|
||||
# template_dir
|
||||
|
|
|
@ -32,6 +32,7 @@ make_no_backtrace := NO_BACKTRACE=1
|
|||
make_no_libnuma := NO_LIBNUMA=1
|
||||
make_no_libaudit := NO_LIBAUDIT=1
|
||||
make_no_libbionic := NO_LIBBIONIC=1
|
||||
make_no_auxtrace := NO_AUXTRACE=1
|
||||
make_tags := tags
|
||||
make_cscope := cscope
|
||||
make_help := help
|
||||
|
@ -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_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_LIBDW_DWARF_UNWIND=1
|
||||
make_minimal += NO_LIBDW_DWARF_UNWIND=1 NO_AUXTRACE=1
|
||||
|
||||
# $(run) contains all available tests
|
||||
run := make_pure
|
||||
|
@ -74,6 +75,7 @@ run += make_no_backtrace
|
|||
run += make_no_libnuma
|
||||
run += make_no_libaudit
|
||||
run += make_no_libbionic
|
||||
run += make_no_auxtrace
|
||||
run += make_help
|
||||
run += make_doc
|
||||
run += make_perf_o
|
||||
|
|
|
@ -74,7 +74,7 @@ libperf-y += data.o
|
|||
libperf-$(CONFIG_X86) += tsc.o
|
||||
libperf-y += cloexec.o
|
||||
libperf-y += thread-stack.o
|
||||
libperf-y += auxtrace.o
|
||||
libperf-$(CONFIG_AUXTRACE) += auxtrace.o
|
||||
|
||||
libperf-$(CONFIG_LIBELF) += symbol-elf.o
|
||||
libperf-$(CONFIG_LIBELF) += probe-event.o
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "../perf.h"
|
||||
#include "event.h"
|
||||
#include "session.h"
|
||||
#include "debug.h"
|
||||
|
||||
union perf_event;
|
||||
struct perf_session;
|
||||
|
@ -290,6 +291,8 @@ struct auxtrace_record {
|
|||
int (*read_finish)(struct auxtrace_record *itr, int idx);
|
||||
};
|
||||
|
||||
#ifdef HAVE_AUXTRACE_SUPPORT
|
||||
|
||||
static inline u64 auxtrace_mmap__read_head(struct auxtrace_mmap *mm)
|
||||
{
|
||||
struct perf_event_mmap_page *pc = mm->userpg;
|
||||
|
@ -458,4 +461,129 @@ static inline void auxtrace__free(struct perf_session *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
|
||||
|
|
Loading…
Reference in New Issue