mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-17 01:34:00 +08:00
perf evsel: Introduce evsel_fprintf.h
We already had evsel_fprintf.c, add its counterpart, so that we can reduce evsel.h a bit more. We needed a new perf_event_attr_fprintf.c file so as to have a separate object to link with the python binding in tools/perf/util/python-ext-sources and not drag symbol_conf, etc into the python binding. Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Namhyung Kim <namhyung@kernel.org> Link: https://lkml.kernel.org/n/tip-06bdmt1062d9unzgqmxwlv88@git.kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
9620bc361a
commit
ca1252779f
@ -10,6 +10,7 @@
|
||||
#include "perf.h"
|
||||
#include "util/evlist.h"
|
||||
#include "util/evsel.h"
|
||||
#include "util/evsel_fprintf.h"
|
||||
#include "util/parse-events.h"
|
||||
#include <subcmd/parse-options.h>
|
||||
#include "util/session.h"
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include "util/cpumap.h"
|
||||
#include "util/evlist.h"
|
||||
#include "util/evsel.h"
|
||||
#include "util/evsel_fprintf.h"
|
||||
#include "util/symbol.h"
|
||||
#include "util/thread.h"
|
||||
#include "util/header.h"
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "util/trace-event.h"
|
||||
#include "util/evlist.h"
|
||||
#include "util/evsel.h"
|
||||
#include "util/evsel_fprintf.h"
|
||||
#include "util/evswitch.h"
|
||||
#include "util/sort.h"
|
||||
#include "util/data.h"
|
||||
|
@ -28,6 +28,8 @@
|
||||
#include "util/dso.h"
|
||||
#include "util/env.h"
|
||||
#include "util/event.h"
|
||||
#include "util/evsel.h"
|
||||
#include "util/evsel_fprintf.h"
|
||||
#include "util/synthetic-events.h"
|
||||
#include "util/evlist.h"
|
||||
#include "util/evswitch.h"
|
||||
|
@ -11,6 +11,7 @@ perf-y += event.o
|
||||
perf-y += evlist.o
|
||||
perf-y += evsel.o
|
||||
perf-y += evsel_fprintf.o
|
||||
perf-y += perf_event_attr_fprintf.o
|
||||
perf-y += evswitch.o
|
||||
perf-y += find_bit.o
|
||||
perf-y += get_current_dir_name.o
|
||||
|
@ -30,6 +30,7 @@
|
||||
#include "counts.h"
|
||||
#include "event.h"
|
||||
#include "evsel.h"
|
||||
#include "util/evsel_fprintf.h"
|
||||
#include "evlist.h"
|
||||
#include <perf/cpumap.h>
|
||||
#include "thread_map.h"
|
||||
@ -1443,152 +1444,6 @@ static int get_group_fd(struct evsel *evsel, int cpu, int thread)
|
||||
return fd;
|
||||
}
|
||||
|
||||
struct bit_names {
|
||||
int bit;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
static void __p_bits(char *buf, size_t size, u64 value, struct bit_names *bits)
|
||||
{
|
||||
bool first_bit = true;
|
||||
int i = 0;
|
||||
|
||||
do {
|
||||
if (value & bits[i].bit) {
|
||||
buf += scnprintf(buf, size, "%s%s", first_bit ? "" : "|", bits[i].name);
|
||||
first_bit = false;
|
||||
}
|
||||
} while (bits[++i].name != NULL);
|
||||
}
|
||||
|
||||
static void __p_sample_type(char *buf, size_t size, u64 value)
|
||||
{
|
||||
#define bit_name(n) { PERF_SAMPLE_##n, #n }
|
||||
struct bit_names bits[] = {
|
||||
bit_name(IP), bit_name(TID), bit_name(TIME), bit_name(ADDR),
|
||||
bit_name(READ), bit_name(CALLCHAIN), bit_name(ID), bit_name(CPU),
|
||||
bit_name(PERIOD), bit_name(STREAM_ID), bit_name(RAW),
|
||||
bit_name(BRANCH_STACK), bit_name(REGS_USER), bit_name(STACK_USER),
|
||||
bit_name(IDENTIFIER), bit_name(REGS_INTR), bit_name(DATA_SRC),
|
||||
bit_name(WEIGHT), bit_name(PHYS_ADDR),
|
||||
{ .name = NULL, }
|
||||
};
|
||||
#undef bit_name
|
||||
__p_bits(buf, size, value, bits);
|
||||
}
|
||||
|
||||
static void __p_branch_sample_type(char *buf, size_t size, u64 value)
|
||||
{
|
||||
#define bit_name(n) { PERF_SAMPLE_BRANCH_##n, #n }
|
||||
struct bit_names bits[] = {
|
||||
bit_name(USER), bit_name(KERNEL), bit_name(HV), bit_name(ANY),
|
||||
bit_name(ANY_CALL), bit_name(ANY_RETURN), bit_name(IND_CALL),
|
||||
bit_name(ABORT_TX), bit_name(IN_TX), bit_name(NO_TX),
|
||||
bit_name(COND), bit_name(CALL_STACK), bit_name(IND_JUMP),
|
||||
bit_name(CALL), bit_name(NO_FLAGS), bit_name(NO_CYCLES),
|
||||
{ .name = NULL, }
|
||||
};
|
||||
#undef bit_name
|
||||
__p_bits(buf, size, value, bits);
|
||||
}
|
||||
|
||||
static void __p_read_format(char *buf, size_t size, u64 value)
|
||||
{
|
||||
#define bit_name(n) { PERF_FORMAT_##n, #n }
|
||||
struct bit_names bits[] = {
|
||||
bit_name(TOTAL_TIME_ENABLED), bit_name(TOTAL_TIME_RUNNING),
|
||||
bit_name(ID), bit_name(GROUP),
|
||||
{ .name = NULL, }
|
||||
};
|
||||
#undef bit_name
|
||||
__p_bits(buf, size, value, bits);
|
||||
}
|
||||
|
||||
#define BUF_SIZE 1024
|
||||
|
||||
#define p_hex(val) snprintf(buf, BUF_SIZE, "%#"PRIx64, (uint64_t)(val))
|
||||
#define p_unsigned(val) snprintf(buf, BUF_SIZE, "%"PRIu64, (uint64_t)(val))
|
||||
#define p_signed(val) snprintf(buf, BUF_SIZE, "%"PRId64, (int64_t)(val))
|
||||
#define p_sample_type(val) __p_sample_type(buf, BUF_SIZE, val)
|
||||
#define p_branch_sample_type(val) __p_branch_sample_type(buf, BUF_SIZE, val)
|
||||
#define p_read_format(val) __p_read_format(buf, BUF_SIZE, val)
|
||||
|
||||
#define PRINT_ATTRn(_n, _f, _p) \
|
||||
do { \
|
||||
if (attr->_f) { \
|
||||
_p(attr->_f); \
|
||||
ret += attr__fprintf(fp, _n, buf, priv);\
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define PRINT_ATTRf(_f, _p) PRINT_ATTRn(#_f, _f, _p)
|
||||
|
||||
int perf_event_attr__fprintf(FILE *fp, struct perf_event_attr *attr,
|
||||
attr__fprintf_f attr__fprintf, void *priv)
|
||||
{
|
||||
char buf[BUF_SIZE];
|
||||
int ret = 0;
|
||||
|
||||
PRINT_ATTRf(type, p_unsigned);
|
||||
PRINT_ATTRf(size, p_unsigned);
|
||||
PRINT_ATTRf(config, p_hex);
|
||||
PRINT_ATTRn("{ sample_period, sample_freq }", sample_period, p_unsigned);
|
||||
PRINT_ATTRf(sample_type, p_sample_type);
|
||||
PRINT_ATTRf(read_format, p_read_format);
|
||||
|
||||
PRINT_ATTRf(disabled, p_unsigned);
|
||||
PRINT_ATTRf(inherit, p_unsigned);
|
||||
PRINT_ATTRf(pinned, p_unsigned);
|
||||
PRINT_ATTRf(exclusive, p_unsigned);
|
||||
PRINT_ATTRf(exclude_user, p_unsigned);
|
||||
PRINT_ATTRf(exclude_kernel, p_unsigned);
|
||||
PRINT_ATTRf(exclude_hv, p_unsigned);
|
||||
PRINT_ATTRf(exclude_idle, p_unsigned);
|
||||
PRINT_ATTRf(mmap, p_unsigned);
|
||||
PRINT_ATTRf(comm, p_unsigned);
|
||||
PRINT_ATTRf(freq, p_unsigned);
|
||||
PRINT_ATTRf(inherit_stat, p_unsigned);
|
||||
PRINT_ATTRf(enable_on_exec, p_unsigned);
|
||||
PRINT_ATTRf(task, p_unsigned);
|
||||
PRINT_ATTRf(watermark, p_unsigned);
|
||||
PRINT_ATTRf(precise_ip, p_unsigned);
|
||||
PRINT_ATTRf(mmap_data, p_unsigned);
|
||||
PRINT_ATTRf(sample_id_all, p_unsigned);
|
||||
PRINT_ATTRf(exclude_host, p_unsigned);
|
||||
PRINT_ATTRf(exclude_guest, p_unsigned);
|
||||
PRINT_ATTRf(exclude_callchain_kernel, p_unsigned);
|
||||
PRINT_ATTRf(exclude_callchain_user, p_unsigned);
|
||||
PRINT_ATTRf(mmap2, p_unsigned);
|
||||
PRINT_ATTRf(comm_exec, p_unsigned);
|
||||
PRINT_ATTRf(use_clockid, p_unsigned);
|
||||
PRINT_ATTRf(context_switch, p_unsigned);
|
||||
PRINT_ATTRf(write_backward, p_unsigned);
|
||||
PRINT_ATTRf(namespaces, p_unsigned);
|
||||
PRINT_ATTRf(ksymbol, p_unsigned);
|
||||
PRINT_ATTRf(bpf_event, p_unsigned);
|
||||
PRINT_ATTRf(aux_output, p_unsigned);
|
||||
|
||||
PRINT_ATTRn("{ wakeup_events, wakeup_watermark }", wakeup_events, p_unsigned);
|
||||
PRINT_ATTRf(bp_type, p_unsigned);
|
||||
PRINT_ATTRn("{ bp_addr, config1 }", bp_addr, p_hex);
|
||||
PRINT_ATTRn("{ bp_len, config2 }", bp_len, p_hex);
|
||||
PRINT_ATTRf(branch_sample_type, p_branch_sample_type);
|
||||
PRINT_ATTRf(sample_regs_user, p_hex);
|
||||
PRINT_ATTRf(sample_stack_user, p_unsigned);
|
||||
PRINT_ATTRf(clockid, p_signed);
|
||||
PRINT_ATTRf(sample_regs_intr, p_hex);
|
||||
PRINT_ATTRf(aux_watermark, p_unsigned);
|
||||
PRINT_ATTRf(sample_max_stack, p_unsigned);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __open_attr__fprintf(FILE *fp, const char *name, const char *val,
|
||||
void *priv __maybe_unused)
|
||||
{
|
||||
return fprintf(fp, " %-32s %s\n", name, val);
|
||||
}
|
||||
|
||||
static void perf_evsel__remove_fd(struct evsel *pos,
|
||||
int nr_cpus, int nr_threads,
|
||||
int thread_idx)
|
||||
@ -1659,6 +1514,12 @@ static bool ignore_missing_thread(struct evsel *evsel,
|
||||
return true;
|
||||
}
|
||||
|
||||
static int __open_attr__fprintf(FILE *fp, const char *name, const char *val,
|
||||
void *priv __maybe_unused)
|
||||
{
|
||||
return fprintf(fp, " %-32s %s\n", name, val);
|
||||
}
|
||||
|
||||
static void display_attr(struct perf_event_attr *attr)
|
||||
{
|
||||
if (verbose >= 2) {
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
#include <linux/list.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/types.h>
|
||||
#include <linux/perf_event.h>
|
||||
#include <linux/types.h>
|
||||
@ -13,12 +12,6 @@
|
||||
#include "symbol_conf.h"
|
||||
#include <internal/cpumap.h>
|
||||
|
||||
struct addr_location;
|
||||
struct evsel;
|
||||
union perf_event;
|
||||
|
||||
struct cgroup;
|
||||
|
||||
/*
|
||||
* The 'struct perf_evsel_config_term' is used to pass event
|
||||
* specific configuration data to perf_evsel__config routine.
|
||||
@ -62,7 +55,11 @@ struct perf_evsel_config_term {
|
||||
bool weak;
|
||||
};
|
||||
|
||||
struct bpf_object;
|
||||
struct cgroup;
|
||||
struct perf_counts;
|
||||
struct perf_stat_evsel;
|
||||
union perf_event;
|
||||
|
||||
typedef int (perf_evsel__sb_cb_t)(union perf_event *event, void *data);
|
||||
|
||||
@ -71,9 +68,6 @@ enum perf_tool_event {
|
||||
PERF_TOOL_DURATION_TIME = 1,
|
||||
};
|
||||
|
||||
struct bpf_object;
|
||||
struct perf_counts;
|
||||
|
||||
/** struct evsel - event selector
|
||||
*
|
||||
* @evlist - evlist this evsel is in, if it is in one.
|
||||
@ -404,38 +398,6 @@ static inline bool perf_evsel__is_clock(struct evsel *evsel)
|
||||
perf_evsel__match(evsel, SOFTWARE, SW_TASK_CLOCK);
|
||||
}
|
||||
|
||||
struct perf_attr_details {
|
||||
bool freq;
|
||||
bool verbose;
|
||||
bool event_group;
|
||||
bool force;
|
||||
bool trace_fields;
|
||||
};
|
||||
|
||||
int perf_evsel__fprintf(struct evsel *evsel,
|
||||
struct perf_attr_details *details, FILE *fp);
|
||||
|
||||
#define EVSEL__PRINT_IP (1<<0)
|
||||
#define EVSEL__PRINT_SYM (1<<1)
|
||||
#define EVSEL__PRINT_DSO (1<<2)
|
||||
#define EVSEL__PRINT_SYMOFFSET (1<<3)
|
||||
#define EVSEL__PRINT_ONELINE (1<<4)
|
||||
#define EVSEL__PRINT_SRCLINE (1<<5)
|
||||
#define EVSEL__PRINT_UNKNOWN_AS_ADDR (1<<6)
|
||||
#define EVSEL__PRINT_CALLCHAIN_ARROW (1<<7)
|
||||
#define EVSEL__PRINT_SKIP_IGNORED (1<<8)
|
||||
|
||||
struct callchain_cursor;
|
||||
|
||||
int sample__fprintf_callchain(struct perf_sample *sample, int left_alignment,
|
||||
unsigned int print_opts, struct callchain_cursor *cursor,
|
||||
struct strlist *bt_stop_list, FILE *fp);
|
||||
|
||||
int sample__fprintf_sym(struct perf_sample *sample, struct addr_location *al,
|
||||
int left_alignment, unsigned int print_opts,
|
||||
struct callchain_cursor *cursor,
|
||||
struct strlist *bt_stop_list, FILE *fp);
|
||||
|
||||
bool perf_evsel__fallback(struct evsel *evsel, int err,
|
||||
char *msg, size_t msgsize);
|
||||
int perf_evsel__open_strerror(struct evsel *evsel, struct target *target,
|
||||
@ -468,11 +430,6 @@ static inline bool evsel__has_callchain(const struct evsel *evsel)
|
||||
return (evsel->core.attr.sample_type & PERF_SAMPLE_CALLCHAIN) != 0;
|
||||
}
|
||||
|
||||
typedef int (*attr__fprintf_f)(FILE *, const char *, const char *, void *);
|
||||
|
||||
int perf_event_attr__fprintf(FILE *fp, struct perf_event_attr *attr,
|
||||
attr__fprintf_f attr__fprintf, void *priv);
|
||||
|
||||
struct perf_env *perf_evsel__env(struct evsel *evsel);
|
||||
|
||||
int perf_evsel__store_ids(struct evsel *evsel, struct evlist *evlist);
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <stdbool.h>
|
||||
#include <traceevent/event-parse.h>
|
||||
#include "evsel.h"
|
||||
#include "util/evsel_fprintf.h"
|
||||
#include "util/event.h"
|
||||
#include "callchain.h"
|
||||
#include "map.h"
|
||||
|
50
tools/perf/util/evsel_fprintf.h
Normal file
50
tools/perf/util/evsel_fprintf.h
Normal file
@ -0,0 +1,50 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#ifndef __PERF_EVSEL_FPRINTF_H
|
||||
#define __PERF_EVSEL_FPRINTF_H 1
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
struct evsel;
|
||||
|
||||
struct perf_attr_details {
|
||||
bool freq;
|
||||
bool verbose;
|
||||
bool event_group;
|
||||
bool force;
|
||||
bool trace_fields;
|
||||
};
|
||||
|
||||
int perf_evsel__fprintf(struct evsel *evsel,
|
||||
struct perf_attr_details *details, FILE *fp);
|
||||
|
||||
#define EVSEL__PRINT_IP (1<<0)
|
||||
#define EVSEL__PRINT_SYM (1<<1)
|
||||
#define EVSEL__PRINT_DSO (1<<2)
|
||||
#define EVSEL__PRINT_SYMOFFSET (1<<3)
|
||||
#define EVSEL__PRINT_ONELINE (1<<4)
|
||||
#define EVSEL__PRINT_SRCLINE (1<<5)
|
||||
#define EVSEL__PRINT_UNKNOWN_AS_ADDR (1<<6)
|
||||
#define EVSEL__PRINT_CALLCHAIN_ARROW (1<<7)
|
||||
#define EVSEL__PRINT_SKIP_IGNORED (1<<8)
|
||||
|
||||
struct addr_location;
|
||||
struct perf_event_attr;
|
||||
struct perf_sample;
|
||||
struct callchain_cursor;
|
||||
struct strlist;
|
||||
|
||||
int sample__fprintf_callchain(struct perf_sample *sample, int left_alignment,
|
||||
unsigned int print_opts, struct callchain_cursor *cursor,
|
||||
struct strlist *bt_stop_list, FILE *fp);
|
||||
|
||||
int sample__fprintf_sym(struct perf_sample *sample, struct addr_location *al,
|
||||
int left_alignment, unsigned int print_opts,
|
||||
struct callchain_cursor *cursor,
|
||||
struct strlist *bt_stop_list, FILE *fp);
|
||||
|
||||
typedef int (*attr__fprintf_f)(FILE *, const char *, const char *, void *);
|
||||
|
||||
int perf_event_attr__fprintf(FILE *fp, struct perf_event_attr *attr,
|
||||
attr__fprintf_f attr__fprintf, void *priv);
|
||||
#endif // __PERF_EVSEL_H
|
@ -25,6 +25,7 @@
|
||||
#include "dso.h"
|
||||
#include "evlist.h"
|
||||
#include "evsel.h"
|
||||
#include "util/evsel_fprintf.h"
|
||||
#include "header.h"
|
||||
#include "memswap.h"
|
||||
#include "trace-event.h"
|
||||
|
148
tools/perf/util/perf_event_attr_fprintf.c
Normal file
148
tools/perf/util/perf_event_attr_fprintf.c
Normal file
@ -0,0 +1,148 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
#include <inttypes.h>
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/perf_event.h>
|
||||
#include "util/evsel_fprintf.h"
|
||||
|
||||
struct bit_names {
|
||||
int bit;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
static void __p_bits(char *buf, size_t size, u64 value, struct bit_names *bits)
|
||||
{
|
||||
bool first_bit = true;
|
||||
int i = 0;
|
||||
|
||||
do {
|
||||
if (value & bits[i].bit) {
|
||||
buf += scnprintf(buf, size, "%s%s", first_bit ? "" : "|", bits[i].name);
|
||||
first_bit = false;
|
||||
}
|
||||
} while (bits[++i].name != NULL);
|
||||
}
|
||||
|
||||
static void __p_sample_type(char *buf, size_t size, u64 value)
|
||||
{
|
||||
#define bit_name(n) { PERF_SAMPLE_##n, #n }
|
||||
struct bit_names bits[] = {
|
||||
bit_name(IP), bit_name(TID), bit_name(TIME), bit_name(ADDR),
|
||||
bit_name(READ), bit_name(CALLCHAIN), bit_name(ID), bit_name(CPU),
|
||||
bit_name(PERIOD), bit_name(STREAM_ID), bit_name(RAW),
|
||||
bit_name(BRANCH_STACK), bit_name(REGS_USER), bit_name(STACK_USER),
|
||||
bit_name(IDENTIFIER), bit_name(REGS_INTR), bit_name(DATA_SRC),
|
||||
bit_name(WEIGHT), bit_name(PHYS_ADDR),
|
||||
{ .name = NULL, }
|
||||
};
|
||||
#undef bit_name
|
||||
__p_bits(buf, size, value, bits);
|
||||
}
|
||||
|
||||
static void __p_branch_sample_type(char *buf, size_t size, u64 value)
|
||||
{
|
||||
#define bit_name(n) { PERF_SAMPLE_BRANCH_##n, #n }
|
||||
struct bit_names bits[] = {
|
||||
bit_name(USER), bit_name(KERNEL), bit_name(HV), bit_name(ANY),
|
||||
bit_name(ANY_CALL), bit_name(ANY_RETURN), bit_name(IND_CALL),
|
||||
bit_name(ABORT_TX), bit_name(IN_TX), bit_name(NO_TX),
|
||||
bit_name(COND), bit_name(CALL_STACK), bit_name(IND_JUMP),
|
||||
bit_name(CALL), bit_name(NO_FLAGS), bit_name(NO_CYCLES),
|
||||
{ .name = NULL, }
|
||||
};
|
||||
#undef bit_name
|
||||
__p_bits(buf, size, value, bits);
|
||||
}
|
||||
|
||||
static void __p_read_format(char *buf, size_t size, u64 value)
|
||||
{
|
||||
#define bit_name(n) { PERF_FORMAT_##n, #n }
|
||||
struct bit_names bits[] = {
|
||||
bit_name(TOTAL_TIME_ENABLED), bit_name(TOTAL_TIME_RUNNING),
|
||||
bit_name(ID), bit_name(GROUP),
|
||||
{ .name = NULL, }
|
||||
};
|
||||
#undef bit_name
|
||||
__p_bits(buf, size, value, bits);
|
||||
}
|
||||
|
||||
#define BUF_SIZE 1024
|
||||
|
||||
#define p_hex(val) snprintf(buf, BUF_SIZE, "%#"PRIx64, (uint64_t)(val))
|
||||
#define p_unsigned(val) snprintf(buf, BUF_SIZE, "%"PRIu64, (uint64_t)(val))
|
||||
#define p_signed(val) snprintf(buf, BUF_SIZE, "%"PRId64, (int64_t)(val))
|
||||
#define p_sample_type(val) __p_sample_type(buf, BUF_SIZE, val)
|
||||
#define p_branch_sample_type(val) __p_branch_sample_type(buf, BUF_SIZE, val)
|
||||
#define p_read_format(val) __p_read_format(buf, BUF_SIZE, val)
|
||||
|
||||
#define PRINT_ATTRn(_n, _f, _p) \
|
||||
do { \
|
||||
if (attr->_f) { \
|
||||
_p(attr->_f); \
|
||||
ret += attr__fprintf(fp, _n, buf, priv);\
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define PRINT_ATTRf(_f, _p) PRINT_ATTRn(#_f, _f, _p)
|
||||
|
||||
int perf_event_attr__fprintf(FILE *fp, struct perf_event_attr *attr,
|
||||
attr__fprintf_f attr__fprintf, void *priv)
|
||||
{
|
||||
char buf[BUF_SIZE];
|
||||
int ret = 0;
|
||||
|
||||
PRINT_ATTRf(type, p_unsigned);
|
||||
PRINT_ATTRf(size, p_unsigned);
|
||||
PRINT_ATTRf(config, p_hex);
|
||||
PRINT_ATTRn("{ sample_period, sample_freq }", sample_period, p_unsigned);
|
||||
PRINT_ATTRf(sample_type, p_sample_type);
|
||||
PRINT_ATTRf(read_format, p_read_format);
|
||||
|
||||
PRINT_ATTRf(disabled, p_unsigned);
|
||||
PRINT_ATTRf(inherit, p_unsigned);
|
||||
PRINT_ATTRf(pinned, p_unsigned);
|
||||
PRINT_ATTRf(exclusive, p_unsigned);
|
||||
PRINT_ATTRf(exclude_user, p_unsigned);
|
||||
PRINT_ATTRf(exclude_kernel, p_unsigned);
|
||||
PRINT_ATTRf(exclude_hv, p_unsigned);
|
||||
PRINT_ATTRf(exclude_idle, p_unsigned);
|
||||
PRINT_ATTRf(mmap, p_unsigned);
|
||||
PRINT_ATTRf(comm, p_unsigned);
|
||||
PRINT_ATTRf(freq, p_unsigned);
|
||||
PRINT_ATTRf(inherit_stat, p_unsigned);
|
||||
PRINT_ATTRf(enable_on_exec, p_unsigned);
|
||||
PRINT_ATTRf(task, p_unsigned);
|
||||
PRINT_ATTRf(watermark, p_unsigned);
|
||||
PRINT_ATTRf(precise_ip, p_unsigned);
|
||||
PRINT_ATTRf(mmap_data, p_unsigned);
|
||||
PRINT_ATTRf(sample_id_all, p_unsigned);
|
||||
PRINT_ATTRf(exclude_host, p_unsigned);
|
||||
PRINT_ATTRf(exclude_guest, p_unsigned);
|
||||
PRINT_ATTRf(exclude_callchain_kernel, p_unsigned);
|
||||
PRINT_ATTRf(exclude_callchain_user, p_unsigned);
|
||||
PRINT_ATTRf(mmap2, p_unsigned);
|
||||
PRINT_ATTRf(comm_exec, p_unsigned);
|
||||
PRINT_ATTRf(use_clockid, p_unsigned);
|
||||
PRINT_ATTRf(context_switch, p_unsigned);
|
||||
PRINT_ATTRf(write_backward, p_unsigned);
|
||||
PRINT_ATTRf(namespaces, p_unsigned);
|
||||
PRINT_ATTRf(ksymbol, p_unsigned);
|
||||
PRINT_ATTRf(bpf_event, p_unsigned);
|
||||
PRINT_ATTRf(aux_output, p_unsigned);
|
||||
|
||||
PRINT_ATTRn("{ wakeup_events, wakeup_watermark }", wakeup_events, p_unsigned);
|
||||
PRINT_ATTRf(bp_type, p_unsigned);
|
||||
PRINT_ATTRn("{ bp_addr, config1 }", bp_addr, p_hex);
|
||||
PRINT_ATTRn("{ bp_len, config2 }", bp_len, p_hex);
|
||||
PRINT_ATTRf(branch_sample_type, p_branch_sample_type);
|
||||
PRINT_ATTRf(sample_regs_user, p_hex);
|
||||
PRINT_ATTRf(sample_stack_user, p_unsigned);
|
||||
PRINT_ATTRf(clockid, p_signed);
|
||||
PRINT_ATTRf(sample_regs_intr, p_hex);
|
||||
PRINT_ATTRf(aux_watermark, p_unsigned);
|
||||
PRINT_ATTRf(sample_max_stack, p_unsigned);
|
||||
|
||||
return ret;
|
||||
}
|
@ -10,6 +10,7 @@ util/python.c
|
||||
util/cap.c
|
||||
util/evlist.c
|
||||
util/evsel.c
|
||||
util/perf_event_attr_fprintf.c
|
||||
util/cpumap.c
|
||||
util/memswap.c
|
||||
util/mmap.c
|
||||
|
Loading…
Reference in New Issue
Block a user