Some dumping call backs need to be passed a FILE*. Expose debug file via an accessor API for a consistent way to do this. Catch the unlikely failure of it not being set. Switch two cases where stderr was being used instead of debug_file. Signed-off-by: Ian Rogers <irogers@google.com> Acked-by: Namhyung Kim <namhyung@kernel.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Cc: Changbin Du <changbin.du@huawei.com> Cc: Colin Ian King <colin.i.king@gmail.com> Cc: Dmitrii Dolgov <9erthalion6@gmail.com> Cc: German Gomez <german.gomez@arm.com> Cc: Guilherme Amadio <amadio@gentoo.org> Cc: Huacai Chen <chenhuacai@kernel.org> Cc: Ingo Molnar <mingo@redhat.com> Cc: James Clark <james.clark@arm.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: K Prateek Nayak <kprateek.nayak@amd.com> Cc: Kajol Jain <kjain@linux.ibm.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Li Dong <lidong@vivo.com> Cc: Liam Howlett <liam.howlett@oracle.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Miguel Ojeda <ojeda@kernel.org> Cc: Ming Wang <wangming01@loongson.cn> Cc: Nick Terrell <terrelln@fb.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Ravi Bangoria <ravi.bangoria@amd.com> Cc: Sandipan Das <sandipan.das@amd.com> Cc: Sean Christopherson <seanjc@google.com> Cc: Steinar H. Gunderson <sesse@google.com> Cc: Vincent Whitchurch <vincent.whitchurch@axis.com> Cc: Wenyu Liu <liuwenyu7@huawei.com> Cc: Yang Jihong <yangjihong1@huawei.com> Link: https://lore.kernel.org/r/20231207011722.1220634-16-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
89 lines
2.7 KiB
C
89 lines
2.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* For debugging general purposes */
|
|
#ifndef __PERF_DEBUG_H
|
|
#define __PERF_DEBUG_H
|
|
|
|
#include <stdarg.h>
|
|
#include <stdbool.h>
|
|
#include <stdio.h>
|
|
#include <linux/compiler.h>
|
|
|
|
extern int verbose;
|
|
extern int debug_peo_args;
|
|
extern bool quiet, dump_trace;
|
|
extern int debug_ordered_events;
|
|
extern int debug_data_convert;
|
|
|
|
#ifndef pr_fmt
|
|
#define pr_fmt(fmt) fmt
|
|
#endif
|
|
|
|
#define pr_err(fmt, ...) \
|
|
eprintf(0, verbose, pr_fmt(fmt), ##__VA_ARGS__)
|
|
#define pr_warning(fmt, ...) \
|
|
eprintf(0, verbose, pr_fmt(fmt), ##__VA_ARGS__)
|
|
#define pr_warning_once(fmt, ...) ({ \
|
|
static int __warned; \
|
|
if (unlikely(!__warned)) { \
|
|
pr_warning(fmt, ##__VA_ARGS__); \
|
|
__warned = 1; \
|
|
} \
|
|
})
|
|
#define pr_info(fmt, ...) \
|
|
eprintf(0, verbose, pr_fmt(fmt), ##__VA_ARGS__)
|
|
#define pr_debug(fmt, ...) \
|
|
eprintf(1, verbose, pr_fmt(fmt), ##__VA_ARGS__)
|
|
#define pr_debugN(n, fmt, ...) \
|
|
eprintf(n, verbose, pr_fmt(fmt), ##__VA_ARGS__)
|
|
#define pr_debug2(fmt, ...) pr_debugN(2, pr_fmt(fmt), ##__VA_ARGS__)
|
|
#define pr_debug3(fmt, ...) pr_debugN(3, pr_fmt(fmt), ##__VA_ARGS__)
|
|
#define pr_debug4(fmt, ...) pr_debugN(4, pr_fmt(fmt), ##__VA_ARGS__)
|
|
|
|
/* Special macro to print perf_event_open arguments/return value. */
|
|
#define pr_debug2_peo(fmt, ...) { \
|
|
if (debug_peo_args) \
|
|
pr_debugN(0, pr_fmt(fmt), ##__VA_ARGS__); \
|
|
else \
|
|
pr_debugN(2, pr_fmt(fmt), ##__VA_ARGS__); \
|
|
}
|
|
|
|
#define pr_time_N(n, var, t, fmt, ...) \
|
|
eprintf_time(n, var, t, fmt, ##__VA_ARGS__)
|
|
|
|
#define pr_oe_time(t, fmt, ...) pr_time_N(1, debug_ordered_events, t, pr_fmt(fmt), ##__VA_ARGS__)
|
|
#define pr_oe_time2(t, fmt, ...) pr_time_N(2, debug_ordered_events, t, pr_fmt(fmt), ##__VA_ARGS__)
|
|
|
|
#define STRERR_BUFSIZE 128 /* For the buffer size of str_error_r */
|
|
|
|
union perf_event;
|
|
|
|
int dump_printf(const char *fmt, ...) __printf(1, 2);
|
|
void trace_event(union perf_event *event);
|
|
|
|
int ui__error(const char *format, ...) __printf(1, 2);
|
|
int ui__warning(const char *format, ...) __printf(1, 2);
|
|
#define ui__warning_once(format, ...) ({ \
|
|
static int __warned; \
|
|
if (unlikely(!__warned)) { \
|
|
ui__warning(format, ##__VA_ARGS__); \
|
|
__warned = 1; \
|
|
} \
|
|
})
|
|
|
|
void pr_stat(const char *fmt, ...);
|
|
|
|
int eprintf(int level, int var, const char *fmt, ...) __printf(3, 4);
|
|
int eprintf_time(int level, int var, u64 t, const char *fmt, ...) __printf(4, 5);
|
|
int veprintf(int level, int var, const char *fmt, va_list args);
|
|
|
|
int perf_debug_option(const char *str);
|
|
FILE *debug_file(void);
|
|
void debug_set_file(FILE *file);
|
|
void debug_set_display_time(bool set);
|
|
void perf_debug_setup(void);
|
|
int perf_quiet_option(void);
|
|
|
|
void dump_stack(void);
|
|
void sighandler_dump_stack(int sig);
|
|
|
|
#endif /* __PERF_DEBUG_H */
|