brintos

brintos / linux-shallow public Read only

0
0
Text · 2.9 KiB · 58304b9 Raw
119 lines · c
1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */2/*3* Copyright(c) 2015 - 2018 Intel Corporation.4*/5 6#if !defined(__HFI1_TRACE_EXTRA_H) || defined(TRACE_HEADER_MULTI_READ)7#define __HFI1_TRACE_EXTRA_H8 9#include <linux/tracepoint.h>10#include <linux/trace_seq.h>11 12#include "hfi.h"13 14/*15 * Note:16 * This produces a REALLY ugly trace in the console output when the string is17 * too long.18 */19 20#undef TRACE_SYSTEM21#define TRACE_SYSTEM hfi1_dbg22 23#define MAX_MSG_LEN 51224 25#pragma GCC diagnostic push26#ifndef __clang__27#pragma GCC diagnostic ignored "-Wsuggest-attribute=format"28#endif29 30DECLARE_EVENT_CLASS(hfi1_trace_template,31		    TP_PROTO(const char *function, struct va_format *vaf),32		    TP_ARGS(function, vaf),33		    TP_STRUCT__entry(__string(function, function)34				     __vstring(msg, vaf->fmt, vaf->va)35				     ),36		    TP_fast_assign(__assign_str(function);37				   __assign_vstr(msg, vaf->fmt, vaf->va);38				   ),39		    TP_printk("(%s) %s",40			      __get_str(function),41			      __get_str(msg))42);43 44#pragma GCC diagnostic pop45 46/*47 * It may be nice to macroize the __hfi1_trace but the va_* stuff requires an48 * actual function to work and can not be in a macro.49 */50#define __hfi1_trace_def(lvl) \51void __printf(2, 3) __hfi1_trace_##lvl(const char *funct, char *fmt, ...); \52									\53DEFINE_EVENT(hfi1_trace_template, hfi1_ ##lvl,				\54	TP_PROTO(const char *function, struct va_format *vaf),		\55	TP_ARGS(function, vaf))56 57#define __hfi1_trace_fn(lvl) \58void __printf(2, 3) __hfi1_trace_##lvl(const char *func, char *fmt, ...)\59{									\60	struct va_format vaf = {					\61		.fmt = fmt,						\62	};								\63	va_list args;							\64									\65	va_start(args, fmt);						\66	vaf.va = &args;							\67	trace_hfi1_ ##lvl(func, &vaf);					\68	va_end(args);							\69	return;								\70}71 72/*73 * To create a new trace level simply define it below and as a __hfi1_trace_fn74 * in trace.c. This will create all the hooks for calling75 * hfi1_cdbg(LVL, fmt, ...); as well as take care of all76 * the debugfs stuff.77 */78__hfi1_trace_def(AFFINITY);79__hfi1_trace_def(PKT);80__hfi1_trace_def(PROC);81__hfi1_trace_def(SDMA);82__hfi1_trace_def(LINKVERB);83__hfi1_trace_def(DEBUG);84__hfi1_trace_def(SNOOP);85__hfi1_trace_def(CNTR);86__hfi1_trace_def(PIO);87__hfi1_trace_def(DC8051);88__hfi1_trace_def(FIRMWARE);89__hfi1_trace_def(RCVCTRL);90__hfi1_trace_def(TID);91__hfi1_trace_def(MMU);92__hfi1_trace_def(IOCTL);93 94#define hfi1_cdbg(which, fmt, ...) \95	__hfi1_trace_##which(__func__, fmt, ##__VA_ARGS__)96 97#define hfi1_dbg(fmt, ...) \98	hfi1_cdbg(DEBUG, fmt, ##__VA_ARGS__)99 100/*101 * Define HFI1_EARLY_DBG at compile time or here to enable early trace102 * messages. Do not check in an enablement for this.103 */104 105#ifdef HFI1_EARLY_DBG106#define hfi1_dbg_early(fmt, ...) \107	trace_printk(fmt, ##__VA_ARGS__)108#else109#define hfi1_dbg_early(fmt, ...)110#endif111 112#endif /* __HFI1_TRACE_EXTRA_H */113 114#undef TRACE_INCLUDE_PATH115#undef TRACE_INCLUDE_FILE116#define TRACE_INCLUDE_PATH .117#define TRACE_INCLUDE_FILE trace_dbg118#include <trace/define_trace.h>119