162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#undef TRACE_SYSTEM
362306a36Sopenharmony_ci#define TRACE_SYSTEM x86_fpu
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#if !defined(_TRACE_FPU_H) || defined(TRACE_HEADER_MULTI_READ)
662306a36Sopenharmony_ci#define _TRACE_FPU_H
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include <linux/tracepoint.h>
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ciDECLARE_EVENT_CLASS(x86_fpu,
1162306a36Sopenharmony_ci	TP_PROTO(struct fpu *fpu),
1262306a36Sopenharmony_ci	TP_ARGS(fpu),
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci	TP_STRUCT__entry(
1562306a36Sopenharmony_ci		__field(struct fpu *, fpu)
1662306a36Sopenharmony_ci		__field(bool, load_fpu)
1762306a36Sopenharmony_ci		__field(u64, xfeatures)
1862306a36Sopenharmony_ci		__field(u64, xcomp_bv)
1962306a36Sopenharmony_ci		),
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci	TP_fast_assign(
2262306a36Sopenharmony_ci		__entry->fpu		= fpu;
2362306a36Sopenharmony_ci		__entry->load_fpu	= test_thread_flag(TIF_NEED_FPU_LOAD);
2462306a36Sopenharmony_ci		if (boot_cpu_has(X86_FEATURE_OSXSAVE)) {
2562306a36Sopenharmony_ci			__entry->xfeatures = fpu->fpstate->regs.xsave.header.xfeatures;
2662306a36Sopenharmony_ci			__entry->xcomp_bv  = fpu->fpstate->regs.xsave.header.xcomp_bv;
2762306a36Sopenharmony_ci		}
2862306a36Sopenharmony_ci	),
2962306a36Sopenharmony_ci	TP_printk("x86/fpu: %p load: %d xfeatures: %llx xcomp_bv: %llx",
3062306a36Sopenharmony_ci			__entry->fpu,
3162306a36Sopenharmony_ci			__entry->load_fpu,
3262306a36Sopenharmony_ci			__entry->xfeatures,
3362306a36Sopenharmony_ci			__entry->xcomp_bv
3462306a36Sopenharmony_ci	)
3562306a36Sopenharmony_ci);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ciDEFINE_EVENT(x86_fpu, x86_fpu_before_save,
3862306a36Sopenharmony_ci	TP_PROTO(struct fpu *fpu),
3962306a36Sopenharmony_ci	TP_ARGS(fpu)
4062306a36Sopenharmony_ci);
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ciDEFINE_EVENT(x86_fpu, x86_fpu_after_save,
4362306a36Sopenharmony_ci	TP_PROTO(struct fpu *fpu),
4462306a36Sopenharmony_ci	TP_ARGS(fpu)
4562306a36Sopenharmony_ci);
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciDEFINE_EVENT(x86_fpu, x86_fpu_before_restore,
4862306a36Sopenharmony_ci	TP_PROTO(struct fpu *fpu),
4962306a36Sopenharmony_ci	TP_ARGS(fpu)
5062306a36Sopenharmony_ci);
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciDEFINE_EVENT(x86_fpu, x86_fpu_after_restore,
5362306a36Sopenharmony_ci	TP_PROTO(struct fpu *fpu),
5462306a36Sopenharmony_ci	TP_ARGS(fpu)
5562306a36Sopenharmony_ci);
5662306a36Sopenharmony_ci
5762306a36Sopenharmony_ciDEFINE_EVENT(x86_fpu, x86_fpu_regs_activated,
5862306a36Sopenharmony_ci	TP_PROTO(struct fpu *fpu),
5962306a36Sopenharmony_ci	TP_ARGS(fpu)
6062306a36Sopenharmony_ci);
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ciDEFINE_EVENT(x86_fpu, x86_fpu_regs_deactivated,
6362306a36Sopenharmony_ci	TP_PROTO(struct fpu *fpu),
6462306a36Sopenharmony_ci	TP_ARGS(fpu)
6562306a36Sopenharmony_ci);
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ciDEFINE_EVENT(x86_fpu, x86_fpu_init_state,
6862306a36Sopenharmony_ci	TP_PROTO(struct fpu *fpu),
6962306a36Sopenharmony_ci	TP_ARGS(fpu)
7062306a36Sopenharmony_ci);
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ciDEFINE_EVENT(x86_fpu, x86_fpu_dropped,
7362306a36Sopenharmony_ci	TP_PROTO(struct fpu *fpu),
7462306a36Sopenharmony_ci	TP_ARGS(fpu)
7562306a36Sopenharmony_ci);
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ciDEFINE_EVENT(x86_fpu, x86_fpu_copy_src,
7862306a36Sopenharmony_ci	TP_PROTO(struct fpu *fpu),
7962306a36Sopenharmony_ci	TP_ARGS(fpu)
8062306a36Sopenharmony_ci);
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ciDEFINE_EVENT(x86_fpu, x86_fpu_copy_dst,
8362306a36Sopenharmony_ci	TP_PROTO(struct fpu *fpu),
8462306a36Sopenharmony_ci	TP_ARGS(fpu)
8562306a36Sopenharmony_ci);
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ciDEFINE_EVENT(x86_fpu, x86_fpu_xstate_check_failed,
8862306a36Sopenharmony_ci	TP_PROTO(struct fpu *fpu),
8962306a36Sopenharmony_ci	TP_ARGS(fpu)
9062306a36Sopenharmony_ci);
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ci#undef TRACE_INCLUDE_PATH
9362306a36Sopenharmony_ci#define TRACE_INCLUDE_PATH asm/trace/
9462306a36Sopenharmony_ci#undef TRACE_INCLUDE_FILE
9562306a36Sopenharmony_ci#define TRACE_INCLUDE_FILE fpu
9662306a36Sopenharmony_ci#endif /* _TRACE_FPU_H */
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci/* This part must be outside protection */
9962306a36Sopenharmony_ci#include <trace/define_trace.h>
100